Ejemplo n.º 1
0
        private static bool ApplyThreatType([NotNull] IIdentity identity,
                                            [NotNull] IThreatType threatType, [NotNull] SelectionRule rule)
        {
            bool result = false;

            if (rule.Evaluate(identity) && identity is IThreatEventsContainer container)
            {
                var threatEvent = container.AddThreatEvent(threatType);
                if (threatEvent == null)
                {
                    threatEvent = container.ThreatEvents.FirstOrDefault(x => x.ThreatTypeId == threatType.Id);
                }
                else
                {
                    result = true;
                }

                if (threatEvent != null)
                {
                    result |= threatEvent.ApplyMitigations();
                }
            }

            return(result);
        }
        private void _test_Click(object sender, EventArgs e)
        {
            _selectedInteractors.Items.Clear();
            _selectedProcesses.Items.Clear();
            _selectedDataStores.Items.Clear();
            _selectedDataFlows.Items.Clear();
            _modelSelected.Visible = false;

            var rule = Rule;

            if (_threatTypeRule != null && rule != null)
            {
                var entities = _model?.Entities?.OrderBy(x => x.Name).ToArray();
                if (entities?.Any() ?? false)
                {
                    foreach (var entity in entities)
                    {
                        if (_threatTypeRule.Evaluate(entity) && rule.Evaluate(entity))
                        {
                            var builder = new StringBuilder();
                            builder.AppendLine(entity.Name);
                            var diagrams = _model.Diagrams
                                .Where(x => x.Entities?.Any(y => y.AssociatedId == entity.Id) ?? false)
                                .ToArray();
                            if (diagrams?.Any() ?? false)
                            {
                                builder.AppendLine();
                                builder.AppendLine("Diagrams containing the Entity:");
                                foreach (var diagram in diagrams)
                                {
                                    builder.AppendLine($"- {diagram.Name}");
                                }
                            }

                            var item = new ListBoxItem()
                            {
                                Text = entity.ToString(),
                                Image = entity.GetImage(ImageSize.Small),
                                Tooltip = builder.ToString()
                            };

                            if (entity is IExternalInteractor)
                            {
                                _selectedInteractors.Items.Add(item);
                            }
                            else if (entity is IProcess)
                            {
                                _selectedProcesses.Items.Add(item);
                            }
                            else if (entity is IDataStore)
                            {
                                _selectedDataStores.Items.Add(item);
                            }
                        }
                    }
                }

                var dataFlows = _model?.DataFlows?.OrderBy(x => x.Name).ToArray();
                if (dataFlows?.Any() ?? false)
                {
                    foreach (var dataFlow in dataFlows)
                    {
                        if (_threatTypeRule.Evaluate(dataFlow) && rule.Evaluate(dataFlow))
                        {
                            var builder = new StringBuilder();
                            builder.AppendLine(dataFlow.Name);
                            var diagrams = _model.Diagrams
                                .Where(x => x.Links?.Any(y => y.AssociatedId == dataFlow.Id) ?? false)
                                .ToArray();
                            if (diagrams?.Any() ?? false)
                            {
                                builder.AppendLine();
                                builder.AppendLine("Diagrams containing the Flow:");
                                foreach (var diagram in diagrams)
                                {
                                    builder.AppendLine($"- {diagram.Name}");
                                }
                            }

                            _selectedDataFlows.Items.Add(new ListBoxItem()
                            {
                                Text = dataFlow.ToString(),
                                Image = Icons.Resources.flow_small,
                                Tooltip = builder.ToString()
                            });
                        }
                    }
                }

                _modelSelected.Visible = _threatTypeRule.Evaluate(_model) && rule.Evaluate(_model);
            }
        }