Ejemplo n.º 1
0
        public void ExecuteRibbonAction(IThreatModel threatModel, [NotNull] IActionDefinition action)
        {
            switch (action.Name)
            {
            case "CreateDiagram":
                var diagram = threatModel.AddDiagram();
                PanelCreationRequired?.Invoke(this, diagram);
                ChangeRibbonActionStatus?.Invoke(this, "IterateDiagrams", true);
                break;

            case "IterateDiagrams":
                IteratePanels?.Invoke(this);
                break;

            case "ReorderDiagrams":
                using (var dialog = new DiagramSortDialog(threatModel))
                {
                    dialog.ShowDialog(Form.ActiveForm);
                }
                break;

            default:
                PanelShowRequired?.Invoke(this, null);
                break;
            }
        }
Ejemplo n.º 2
0
        private void ImportElements([NotNull] ThreatModel source, [NotNull] IThreatModel target,
                                    out int externalInteractors, out int process, out int dataStore)
        {
            externalInteractors = 0;
            process             = 0;
            dataStore           = 0;

            var elements = source.Elements?.ToArray();

            if (elements?.Any() ?? false)
            {
                var schemaManager = new EntitiesPropertySchemaManager(target);
                var schema        = schemaManager.GetSchema();

                foreach (var element in elements)
                {
                    IEntity entity;

                    switch (element.Value.ElementType)
                    {
                    case ElementType.StencilRectangle:
                        entity = target.AddEntity <IExternalInteractor>(element.Value.Name);
                        externalInteractors++;
                        break;

                    case ElementType.StencilEllipse:
                        entity = target.AddEntity <IProcess>(element.Value.Name);
                        process++;
                        break;

                    case ElementType.StencilParallelLines:
                        entity = target.AddEntity <IDataStore>(element.Value.Name);
                        dataStore++;
                        break;

                    default:
                        entity = null;
                        break;
                    }

                    if (entity != null)
                    {
                        schemaManager.SetMsTmtEntityId(entity, element.Key.ToString());
                        var properties = element.Value.Properties?.ToArray();
                        AddProperties(schema, entity, properties);

                        IDiagram diagram = target.Diagrams?.FirstOrDefault(x =>
                                                                           string.CompareOrdinal(x.Name, element.Value.Page) == 0);
                        if (diagram == null)
                        {
                            diagram = target.AddDiagram(element.Value.Page);
                        }
                        diagram.AddEntityShape(entity.Id, new PointF(element.Value.Position.X * 2f, element.Value.Position.Y * 2f));
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private void ImportElements([NotNull] ThreatModel source, [NotNull] IThreatModel target, float dpiFactor,
                                    out int diagrams, out int externalInteractors, out int processes, out int dataStores, out int trustBoundaries)
        {
            diagrams            = 0;
            externalInteractors = 0;
            processes           = 0;
            dataStores          = 0;
            trustBoundaries     = 0;

            var elements = source.Elements?
                           .OrderBy(x => (int)x.Value.ElementType)
                           .ToArray();

            if (elements?.Any() ?? false)
            {
                var schemaManager = new ObjectPropertySchemaManager(target);

                IEntity                entity;
                ITrustBoundary         boundary;
                IEntityTemplate        entityTemplate;
                ITrustBoundaryTemplate trustBoundaryTemplate;
                IPropertySchema        schema;
                IPropertySchema        secondarySchema;
                var baseEISchema = new BaseExternalInteractorPropertySchemaManager(target).GetSchema();
                var basePSchema  = new BaseProcessPropertySchemaManager(target).GetSchema();
                var baseDSSchema = new BaseDataStorePropertySchemaManager(target).GetSchema();
                var baseTBSchema = new BaseTrustBoundaryPropertySchemaManager(target).GetSchema();

                foreach (var element in elements)
                {
                    switch (element.Value.ElementType)
                    {
                    case ElementType.StencilRectangle:
                        entityTemplate = target.EntityTemplates?.FirstOrDefault(x =>
                                                                                string.CompareOrdinal(schemaManager.GetObjectId(x), element.Value.TypeId) == 0);
                        entity = entityTemplate != null?entityTemplate.CreateEntity(element.Value.Name) :
                                     target.AddEntity <IExternalInteractor>(element.Value.Name);

                        boundary        = null;
                        schema          = baseEISchema;
                        secondarySchema = entityTemplate != null?
                                          target.GetSchema(entityTemplate.Name, Resources.DefaultNamespace) : null;

                        externalInteractors++;
                        break;

                    case ElementType.StencilEllipse:
                        entityTemplate = target.EntityTemplates?.FirstOrDefault(x =>
                                                                                string.CompareOrdinal(schemaManager.GetObjectId(x), element.Value.TypeId) == 0);
                        entity = entityTemplate != null?entityTemplate.CreateEntity(element.Value.Name) :
                                     target.AddEntity <IProcess>(element.Value.Name);

                        boundary        = null;
                        schema          = basePSchema;
                        secondarySchema = entityTemplate != null?
                                          target.GetSchema(entityTemplate.Name, Resources.DefaultNamespace) : null;

                        processes++;
                        break;

                    case ElementType.StencilParallelLines:
                        entityTemplate = target.EntityTemplates?.FirstOrDefault(x =>
                                                                                string.CompareOrdinal(schemaManager.GetObjectId(x), element.Value.TypeId) == 0);
                        entity = entityTemplate != null?entityTemplate.CreateEntity(element.Value.Name) :
                                     target.AddEntity <IDataStore>(element.Value.Name);

                        boundary        = null;
                        schema          = baseDSSchema;
                        secondarySchema = entityTemplate != null?
                                          target.GetSchema(entityTemplate.Name, Resources.DefaultNamespace) : null;

                        dataStores++;
                        break;

                    case ElementType.BorderBoundary:
                    case ElementType.LineBoundary:
                        trustBoundaryTemplate = target.TrustBoundaryTemplates?.FirstOrDefault(x =>
                                                                                              string.CompareOrdinal(schemaManager.GetObjectId(x), element.Value.TypeId) == 0);
                        entity   = null;
                        boundary = trustBoundaryTemplate != null?trustBoundaryTemplate.CreateTrustBoundary(element.Value.Name) :
                                       target.AddGroup <ITrustBoundary>(element.Value.Name);

                        schema          = baseTBSchema;
                        secondarySchema = trustBoundaryTemplate != null?
                                          target.GetSchema(trustBoundaryTemplate.Name, Resources.DefaultNamespace) : null;

                        trustBoundaries++;
                        break;

                    default:
                        entity          = null;
                        boundary        = null;
                        schema          = null;
                        secondarySchema = null;
                        break;
                    }

                    if (entity != null)
                    {
                        schemaManager.SetObjectId(entity, element.Value.TypeId);
                        schemaManager.SetInstanceId(entity, element.Key.ToString());
                        var properties = element.Value.Properties?.ToArray();
                        AddProperties(target, schema, secondarySchema, entity, properties);

                        var diagram = target.Diagrams?.FirstOrDefault(x =>
                                                                      string.CompareOrdinal(x.Name, element.Value.Page) == 0);
                        if (diagram == null)
                        {
                            diagram = target.AddDiagram(element.Value.Page);
                            diagrams++;
                        }

                        diagram.AddEntityShape(entity.Id,
                                               new PointF((element.Value.Position.X + element.Value.Size.Width / 2f) * dpiFactor, (element.Value.Position.Y + element.Value.Size.Height / 2f) * dpiFactor));
                    }
                    else if (boundary != null)
                    {
                        schemaManager.SetObjectId(boundary, element.Value.TypeId);
                        schemaManager.SetInstanceId(boundary, element.Key.ToString());
                        var properties = element.Value.Properties?.ToArray();
                        AddProperties(target, schema, secondarySchema, entity, properties);

                        if (element.Value.ElementType == ElementType.BorderBoundary)
                        {
                            var diagram = target.Diagrams?.FirstOrDefault(x =>
                                                                          string.CompareOrdinal(x.Name, element.Value.Page) == 0);
                            if (diagram == null)
                            {
                                diagram = target.AddDiagram(element.Value.Page);
                                diagrams++;
                            }

                            diagram.AddGroupShape(boundary.Id,
                                                  new PointF((element.Value.Position.X + element.Value.Size.Width / 2f) * dpiFactor, (element.Value.Position.Y + element.Value.Size.Height / 2f) * dpiFactor),
                                                  new SizeF(element.Value.Size.Width * dpiFactor, element.Value.Size.Height * dpiFactor));
                        }
                    }
                }
            }
        }