Beispiel #1
0
        /// <summary>
        /// Checks if a Fact is used in a Threat Event Scenario.
        /// </summary>
        /// <param name="fact">Fact to be searched.</param>
        /// <returns>True if the Fact is used in the Scenario, false otherwise.</returns>
        public bool IsUsed([NotNull] Fact fact, [NotNull] IThreatEventScenario scenario)
        {
            var risk   = _schemaManager.GetRisk(scenario);
            var result = (risk?.AssociatedFacts?.Contains(fact.Id) ?? false) ||
                         (risk?.LossEventFrequency?.AssociatedFacts?.Contains(fact.Id) ?? false) ||
                         (risk?.LossEventFrequency?.ThreatEventFrequency?.AssociatedFacts?.Contains(fact.Id) ?? false) ||
                         (risk?.LossEventFrequency?.ThreatEventFrequency?.ContactFrequency?.AssociatedFacts
                          ?.Contains(fact.Id) ?? false) ||
                         (risk?.LossEventFrequency?.ThreatEventFrequency?.ProbabilityOfAction?.AssociatedFacts
                          ?.Contains(fact.Id) ?? false) ||
                         (risk?.LossEventFrequency?.Vulnerability?.AssociatedFacts?.Contains(fact.Id) ?? false) ||
                         (risk?.LossEventFrequency?.Vulnerability?.Difficulty?.AssociatedFacts?.Contains(fact.Id) ?? false) ||
                         (risk?.LossEventFrequency?.Vulnerability?.ThreatCapability?.AssociatedFacts?.Contains(fact.Id) ??
                          false) ||
                         (risk?.LossMagnitude?.AssociatedFacts?.Contains(fact.Id) ?? false) ||
                         (risk?.LossMagnitude?.SecondaryLossEventFrequency?.AssociatedFacts?.Contains(fact.Id) ?? false);

            if (!result)
            {
                var primaryLosses = risk?.LossMagnitude?.PrimaryLosses?.ToArray();
                if (primaryLosses?.Any() ?? false)
                {
                    foreach (var loss in primaryLosses)
                    {
                        if (loss.AssociatedFacts?.Contains(fact.Id) ?? false)
                        {
                            result = true;
                            break;
                        }
                    }
                }
            }

            if (!result)
            {
                var secondaryLosses = risk?.LossMagnitude?.SecondaryLosses?.ToArray();
                if (secondaryLosses?.Any() ?? false)
                {
                    foreach (var loss in secondaryLosses)
                    {
                        if (loss.AssociatedFacts?.Contains(fact.Id) ?? false)
                        {
                            result = true;
                            break;
                        }
                    }
                }
            }

            return(result);
        }
Beispiel #2
0
        public static Risk GetRisk(this IThreatEventScenario scenario)
        {
            Risk result = null;

            var model = scenario.Model;

            if (model != null)
            {
                var schemaManager = new QuantitativeRiskSchemaManager(model);
                result = schemaManager.GetRisk(scenario);
            }

            return(result);
        }