private void LoadModel()
        {
            var schemaManager = new DevOpsConfigPropertySchemaManager(_model);
            var iterations    = schemaManager.GetIterations()?.ToArray();

            if (iterations?.Any() ?? false)
            {
                _iterations.Items.AddRange(iterations);

                var propertySchemaManager = new DevOpsPropertySchemaManager(_model);
                var firstSeenOn           = propertySchemaManager.GetFirstSeenOn(_mitigation);
                if (firstSeenOn != null)
                {
                    var item = _iterations.Items.OfType <Iteration>()
                               .FirstOrDefault(x => string.CompareOrdinal(x.Id, firstSeenOn.IterationId) == 0);
                    if (item != null)
                    {
                        _iterations.SelectedItem = item;
                    }
                }
            }
        }
Пример #2
0
        public IEnumerable <IRoadmapFilter> GetFilters([NotNull] IThreatModel model)
        {
            var schemaManager = new DevOpsConfigPropertySchemaManager(model);

            return(schemaManager.GetIterations()?.Select(x => new IterationFilter(x)));
        }
Пример #3
0
        public void SetThreatModel(IThreatModel threatModel)
        {
            var schemaManager = new DevOpsConfigPropertySchemaManager(threatModel);
            var iterations    = schemaManager.GetIterations()?
                                .OrderBy(x => x.Start)
                                .ToArray();

            if (iterations?.Any() ?? false)
            {
                var current = schemaManager.CurrentIteration ?? schemaManager.PreviousIteration;

                float maxRisk = 0f;

                if (Chart?.ChartSeries.FirstOrDefault() is ChartSeries series)
                {
                    SeriesPoint point;
                    float       risk = 0f;
                    foreach (var iteration in iterations)
                    {
                        point = new SeriesPoint(iteration.Name);

                        if (iteration == current)
                        {
                            var extensionId = ExtensionUtils.GetExtensionByLabel <IConfigurationPanelFactory <Form> >(
                                "Extensions Configuration Panel")?.GetExtensionId();

                            if (extensionId != null)
                            {
                                var normalizationReference = threatModel.GetExtensionConfiguration(extensionId)?
                                                             .GlobalGet <int>("normalization") ?? 0;
                                if (normalizationReference > 0)
                                {
                                    risk = threatModel.EvaluateRisk(normalizationReference);
                                    if (risk > 0f)
                                    {
                                        schemaManager.SetIterationRisk(iteration, risk);
                                    }
                                }
                            }
                        }
                        else
                        {
                            risk = schemaManager.GetIterationRisk(iteration);
                        }
                        point.ValueY = new object[] { ((object)risk) };
                        series.SeriesPoints.Add(point);

                        if (maxRisk < risk)
                        {
                            maxRisk = risk;
                        }
                    }
                }

                var residualRiskSchemaManager = new ResidualRiskEstimatorPropertySchemaManager(threatModel);
                var estimator = residualRiskSchemaManager.SelectedEstimator;
                if (estimator != null)
                {
                    var parameters = residualRiskSchemaManager.Parameters?.ToArray();
                    if (parameters?.Any() ?? false)
                    {
                        var infinite = residualRiskSchemaManager.Infinite;
                        if (infinite < 0)
                        {
                            infinite = estimator.DefaultInfinite;
                        }

                        var p = parameters.ToDictionary(x => x.Name, x => x.Value);
                        AcceptableRisk = estimator.GetAcceptableRisk(threatModel, p, infinite, 0);
                    }
                    else
                    {
                        AcceptableRisk = 0f;
                    }

                    if (AcceptableRisk > maxRisk)
                    {
                        Chart.AxisY.MaxValue = AcceptableRisk * 1.2f;
                    }
                }
            }
        }