コード例 #1
0
        private void LoadModel()
        {
            try
            {
                _loading = true;
                ClearPalettes();

                var schemaManager       = new RoadmapPropertySchemaManager(_model);
                var devOpsSchemaManager = new DevOpsPropertySchemaManager(_model);
                var connector           = DevOpsManager.GetConnector(_model);
                IEnumerable <IMitigation> mitigations;
                if (_filter == RoadmapStatus.NoActionRequired)
                {
                    mitigations = _model?.GetUniqueMitigations()?
                                  .Where(x => (schemaManager.GetStatus(x) != RoadmapStatus.NoActionRequired) ||
                                         (connector != null && devOpsSchemaManager.GetDevOpsInfo(x, connector) != null))
                                  .OrderBy(x => x.Name).ToArray();
                }
                else
                {
                    mitigations = _model?.GetUniqueMitigations()?
                                  .Where(x => schemaManager.GetStatus(x) == _filter)
                                  .OrderBy(x => x.Name).ToArray();
                }

                if (mitigations?.Any() ?? false)
                {
                    var summaries = DevOpsManager.GetMitigationsSummary(_model);

                    foreach (var mitigation in mitigations)
                    {
                        if (summaries?.ContainsKey(mitigation) ?? false)
                        {
                            var summary = summaries[mitigation];
                            AddItem(mitigation, summary.Status, summary.AssignedTo);
                        }
                        else
                        {
                            AddItem(mitigation, WorkItemStatus.Unknown, null);
                        }
                    }

                    RefreshNodes();
                }
            }
            finally
            {
                _loading = false;
            }
        }
コード例 #2
0
        public IEnumerable <ListItem> GetList(IThreatModel model)
        {
            IEnumerable <ListItem> result = null;

            var schema      = new RoadmapPropertySchemaManager(model);
            var mitigations = model.GetUniqueMitigations()?
                              .Where(x => schema.GetStatus(x) == RoadmapStatus.ShortTerm)
                              .OrderBy(x => x.Name)
                              .ToArray();

            if (mitigations?.Any() ?? false)
            {
                var list = new List <ListItem>();

                foreach (var mitigation in mitigations)
                {
                    var items = new List <ItemRow>();

                    var tems = model.GetThreatEventMitigations(mitigation)?.ToArray();

                    if (tems?.Any() ?? false)
                    {
                        items.Add(new TextRow("Control Type", mitigation.ControlType.GetEnumLabel()));
                        items.Add(new TextRow("Description", mitigation.Description));
                        items.Add(new TableRow("Affected Threats", new []
                        {
                            new TableColumn("Object", 150),
                            new TableColumn("Threat", 150),
                            new TableColumn("Strength", 100),
                            new TableColumn("Status", 100)
                        }, GetAffectedThreatsCells(tems)));
                        items.Add(new TableRow("Directives", new[]
                        {
                            new TableColumn("Object", 150),
                            new TableColumn("Directives", 350),
                        }, GetDirectivesCells(tems)));

                        var itemRows = mitigation.GetItemRows()?.ToArray();
                        if (itemRows?.Any() ?? false)
                        {
                            items.AddRange(itemRows);
                        }

                        list.Add(new ListItem(mitigation.Name, mitigation.Id, items));
                    }
                }

                result = list;
            }

            return(result);
        }
        public IEnumerable <KeyValuePair <string, IPropertyType> > GetProperties([NotNull] IThreatModel model)
        {
            IEnumerable <KeyValuePair <string, IPropertyType> > result = null;

            var schema      = new RoadmapPropertySchemaManager(model);
            var mitigations = model.GetUniqueMitigations()?
                              .Where(x => schema.GetStatus(x) == RoadmapStatus.LongTerm)
                              .OrderBy(x => x.Name)
                              .ToArray();

            if (mitigations?.Any() ?? false)
            {
                var dict = new Dictionary <string, IPropertyType>();

                foreach (var mitigation in mitigations)
                {
                    var properties = mitigation.Properties?
                                     .Where(x => !(x.PropertyType?.DoNotPrint ?? true))
                                     .Select(x => x.PropertyType)
                                     .ToArray();

                    if (properties?.Any() ?? false)
                    {
                        foreach (var property in properties)
                        {
                            if (!dict.ContainsKey(property.Name))
                            {
                                dict.Add(property.Name, property);
                            }
                        }
                    }
                }

                result = dict
                         .OrderBy(x => model.GetSchema(x.Value.SchemaId).Priority)
                         .ThenBy(x => model.GetSchema(x.Value.SchemaId).Namespace)
                         .ThenBy(x => model.GetSchema(x.Value.SchemaId).Name)
                         .ThenBy(x => x.Value.Priority)
                         .ToArray();
            }

            return(result);
        }
        public IEnumerable <ListItem> GetList(IThreatModel model)
        {
            IEnumerable <ListItem> result = null;

            var schema      = new RoadmapPropertySchemaManager(model);
            var mitigations = model.GetUniqueMitigations()?
                              .Where(x => schema.GetStatus(x) == RoadmapStatus.LongTerm)
                              .OrderBy(x => x.Name)
                              .ToArray();

            if (mitigations?.Any() ?? false)
            {
                var list = new List <ListItem>();

                foreach (var mitigation in mitigations)
                {
                    var items = new List <ItemRow>();

                    var tems = model.GetThreatEventMitigations(mitigation)?.ToArray();

                    if (tems?.Any() ?? false)
                    {
                        items.Add(new TextRow("Control Type", mitigation.ControlType.GetEnumLabel()));
                        items.Add(new TextRow("Description", mitigation.Description));

                        var itemRows = mitigation.GetItemRows()?.ToArray();
                        if (itemRows?.Any() ?? false)
                        {
                            items.AddRange(itemRows);
                        }

                        list.Add(new ListItem(mitigation.Name, mitigation.Id, items));
                    }
                }

                result = list;
            }

            return(result);
        }
コード例 #5
0
        public KanbanItem([NotNull] IMitigation mitigation, int originalContainer) :
            this(mitigation.Name, ThreatModelManager.StandardColor, originalContainer)
        {
            Item = mitigation;

            var model = mitigation.Model;

            if (model != null)
            {
                var schemaManager = new RoadmapPropertySchemaManager(model);
                SetInfo("Roadmap", schemaManager.GetStatus(mitigation).GetEnumLabel());

                _connector = DevOpsManager.GetConnector(model);
                if (_connector != null)
                {
                    var devOpsSchemaManager = new DevOpsPropertySchemaManager(model);
                    var info = devOpsSchemaManager.GetDevOpsInfo(mitigation, _connector);
                    if ((info?.Id ?? -1) >= 0)
                    {
                        DevOpsId = info.Id;
                    }
                }
            }
        }
コード例 #6
0
        public async void ExecuteCustomAction([NotNull] IActionDefinition action)
        {
            string text    = null;
            bool   warning = false;

            try
            {
                switch (action.Name)
                {
                case "Sync":
                    if ((await DevOpsManager.UpdateAsync(_model)) > 0)
                    {
                        LoadModel();
                    }
                    break;

                case "Auto":
                    var summaries     = DevOpsManager.GetMitigationsSummary(_model);
                    var schemaManager = new RoadmapPropertySchemaManager(_model);
                    var mitigations   = _model?.GetUniqueMitigations()?
                                        .Where(x => (schemaManager.GetStatus(x) != RoadmapStatus.NoActionRequired) &&
                                               !(summaries?.ContainsKey(x) ?? false))
                                        .OrderBy(x => x.Name).ToArray();
                    if (mitigations?.Any() ?? false)
                    {
                        var connector           = DevOpsManager.GetConnector(_model);
                        var devOpsSchemaManager = new DevOpsPropertySchemaManager(_model);
                        _countdown = new CountdownEvent(mitigations.Length);
                        foreach (var mitigation in mitigations)
                        {
                            AutoLoad(mitigation, connector, devOpsSchemaManager);
                        }

                        ShowMessage?.Invoke("Automatic Load in progress...");
                        AutomaticLoadCompletion();
                    }
                    else
                    {
                        ShowWarning?.Invoke("Automatic Load has not identified any action to do.");
                    }
                    break;

                case "ShortTerm":
                    _filter = RoadmapStatus.ShortTerm;
                    LoadModel();
                    break;

                case "MidTerm":
                    _filter = RoadmapStatus.MidTerm;
                    LoadModel();
                    break;

                case "LongTerm":
                    _filter = RoadmapStatus.LongTerm;
                    LoadModel();
                    break;

                case "All":
                    _filter = RoadmapStatus.NoActionRequired;
                    LoadModel();
                    break;

                case "Refresh":
                    LoadModel();
                    break;
                }

                //if (warning)
                //    ShowWarning?.Invoke(text);
                //else if (text != null)
                //    ShowMessage?.Invoke($"{text} has been executed successfully.");
            }
            catch
            {
                //ShowWarning?.Invoke($"An error occurred during the execution of the action.");
                throw;
            }
        }