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); }
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; } }
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); }
public static void SetStatus(this IMitigation mitigation, RoadmapStatus status) { var model = mitigation?.Model; if (model != null) { var schemaManager = new RoadmapPropertySchemaManager(model); var propertyType = schemaManager.GetPropertyType(); if (propertyType != null) { var property = mitigation.GetProperty(propertyType); if (property == null) { mitigation.AddProperty(propertyType, status.ToString()); } else { property.StringValue = status.ToString(); } } } }
private static RoadmapStatus GetStatusFromProperties(IMitigation mitigation) { RoadmapStatus result = RoadmapStatus.NotAssessed; var model = mitigation?.Model; if (model != null) { var schemaManager = new RoadmapPropertySchemaManager(model); var propertyType = schemaManager.GetPropertyType(); if (propertyType != null) { var property = mitigation.GetProperty(propertyType); if (property != null && Enum.TryParse <RoadmapStatus>(property.StringValue, out var status)) { result = status; } } } return(result); }
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; } } } }
private void ExportCsv([Required] string fileName, RoadmapStatus requiredStatus = RoadmapStatus.NotAssessed) { var mitigations = _model?.GetUniqueMitigations()?.OrderBy(x => x.Name).ToArray(); if (mitigations?.Any() ?? false) { using (var engine = new ExcelReportEngine()) { var page = engine.AddPage("Report"); List <string> fields = new List <string> { "Work Item Type", "Title", "Description", "State", "Priority" }; engine.AddHeader(page, fields.ToArray()); var schema = new RoadmapPropertySchemaManager(_model); foreach (var mitigation in mitigations) { var status = mitigation.GetStatus(); switch (requiredStatus) { case RoadmapStatus.ShortTerm: if (status == RoadmapStatus.ShortTerm) { engine.AddRow(page, new[] { "Task", mitigation.Name, TextToHtml(mitigation.Description), "To Do", ((int)status).ToString() }); } break; case RoadmapStatus.MidTerm: if (status == RoadmapStatus.MidTerm) { engine.AddRow(page, new[] { "Task", mitigation.Name, TextToHtml(mitigation.Description), "To Do", ((int)status).ToString() }); } break; case RoadmapStatus.LongTerm: if (status == RoadmapStatus.LongTerm) { engine.AddRow(page, new[] { "Task", mitigation.Name, TextToHtml(mitigation.Description), "To Do", ((int)status).ToString() }); } break; default: if (status == RoadmapStatus.ShortTerm || status == RoadmapStatus.MidTerm || status == RoadmapStatus.LongTerm) { engine.AddRow(page, new[] { "Task", mitigation.Name, TextToHtml(mitigation.Description), "To Do", ((int)status).ToString() }); } break; } } try { engine.Save(fileName); ShowMessage?.Invoke("CSV for ADO created successfully."); } catch (Exception exc) { ShowWarning?.Invoke(exc.Message); } } } }
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; } }