Ejemplo n.º 1
0
        private void ProcessRows(ExcelReportEngine engine, GridRow[] rows,
                                 int p, List <string> fields, IPropertyType[] checkedItems,
                                 int severityCol = 0)
        {
            if (checkedItems.Any())
            {
                foreach (var item in checkedItems)
                {
                    fields.Add(item.Name);
                }
            }
            engine.AddHeader(p, fields.ToArray());

            List <object> values = new List <object>();

            foreach (var row in rows)
            {
                values.Clear();
                values.AddRange(row.Cells.Select(x => x.Value));
                foreach (var item in checkedItems)
                {
                    if (row.Tag is IPropertiesContainer container &&
                        container.GetProperty(item) is IProperty property)
                    {
                        if (property is IPropertyIdentityReference reference)
                        {
                            values.Add(reference.Value?.Name);
                        }
                        else
                        {
                            values.Add(property.StringValue);
                        }
                    }
                }

                var r = engine.AddRow(p, values.ToArray());
                if (severityCol > 0)
                {
                    var severity = _model.Severities.FirstOrDefault(x =>
                                                                    string.CompareOrdinal(x.Name, values[severityCol - 1].ToString()) == 0);
                    if (severity != null)
                    {
                        engine.ColorCell(p, r, severityCol,
                                         Color.FromKnownColor(severity.TextColor),
                                         Color.FromKnownColor(severity.BackColor));
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private bool SaveExcelFile([Required] string fileName)
        {
            var result = false;

            using (ExcelReportEngine engine = new ExcelReportEngine())
            {
                if (_includeExternalInteractors.Checked)
                {
                    var rows = _externalInteractors.PrimaryGrid.FlatCheckedRows.OfType <GridRow>().ToArray();

                    if (rows.Any())
                    {
                        var           p      = engine.AddPage("External Interactors");
                        List <string> fields = new List <string> {
                            "Name", "Description", "Parent"
                        };
                        var checkedItems = _fieldsExternalInteractors.CheckedItems.OfType <IPropertyType>().ToArray();
                        ProcessRows(engine, rows, p, fields, checkedItems);
                    }
                }

                if (_includeProcesses.Checked)
                {
                    var rows = _processes.PrimaryGrid.FlatCheckedRows.OfType <GridRow>().ToArray();

                    if (rows.Any())
                    {
                        var           p      = engine.AddPage("Processes");
                        List <string> fields = new List <string> {
                            "Name", "Description", "Parent"
                        };
                        var checkedItems = _fieldsProcesses.CheckedItems.OfType <IPropertyType>().ToArray();
                        ProcessRows(engine, rows, p, fields, checkedItems);
                    }
                }

                if (_includeDataStores.Checked)
                {
                    var rows = _dataStores.PrimaryGrid.FlatCheckedRows.OfType <GridRow>().ToArray();

                    if (rows.Any())
                    {
                        var           p      = engine.AddPage("Data Stores");
                        List <string> fields = new List <string> {
                            "Name", "Description", "Parent"
                        };
                        var checkedItems = _fieldsDataStores.CheckedItems.OfType <IPropertyType>().ToArray();
                        ProcessRows(engine, rows, p, fields, checkedItems);
                    }
                }

                if (_includeDataFlows.Checked)
                {
                    var rows = _dataFlows.PrimaryGrid.FlatCheckedRows.OfType <GridRow>().ToArray();

                    if (rows.Any())
                    {
                        var           p      = engine.AddPage("Flows");
                        List <string> fields = new List <string> {
                            "Name", "Description", "Source", "Target", "Flow Type"
                        };
                        var checkedItems = _fieldsDataFlows.CheckedItems.OfType <IPropertyType>().ToArray();
                        ProcessRows(engine, rows, p, fields, checkedItems);
                    }
                }

                if (_includeThreatEvents.Checked)
                {
                    var rows = _threatEvents.PrimaryGrid.FlatCheckedRows.OfType <GridRow>().ToArray();

                    if (rows.Any())
                    {
                        var           p      = engine.AddPage("Threat Events");
                        List <string> fields = new List <string>
                        {
                            "Name", "Description", "Associated To Type", "Associated To", "Severity"
                        };
                        var checkedItems = _fieldsThreatEvents.CheckedItems.OfType <IPropertyType>().ToArray();
                        ProcessRows(engine, rows, p, fields, checkedItems, 5);
                    }
                }

                if (_includeMitigations.Checked)
                {
                    var rows = _mitigations.PrimaryGrid.FlatCheckedRows.OfType <GridRow>().ToArray();

                    if (rows.Any())
                    {
                        var           p      = engine.AddPage("Mitigations");
                        List <string> fields = new List <string>
                        {
                            "Name", "Description", "Control Type", "Threat Event",
                            "Associated To Type", "Associated To", "Strength", "Status", "Directives"
                        };
                        var checkedItems = _fieldsMitigations.CheckedItems.OfType <IPropertyType>().ToArray();
                        ProcessRows(engine, rows, p, fields, checkedItems);
                    }
                }

                try
                {
                    engine.Save(fileName);
                    result = true;
                }
                catch (System.IO.IOException e)
                {
                    ShowWarning?.Invoke(e.Message);
                }
            }

            return(result);
        }