Beispiel #1
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));
                    }
                }
            }
        }
Beispiel #2
0
        public void Initialize([NotNull] IThreatModel model)
        {
            var entitiesPropertySchemaManager = new EntitiesPropertySchemaManager(model);

            entitiesPropertySchemaManager.GetSchema();

            var dataFlowsPropertySchemaManager = new DataFlowsPropertySchemaManager(model);

            dataFlowsPropertySchemaManager.GetSchema();

            var threatsPropertySchemaManager = new ThreatsPropertySchemaManager(model);

            threatsPropertySchemaManager.GetSchema();
        }
Beispiel #3
0
        private IEntity GetEntity([Required] string msEntityId, [NotNull] IThreatModel model,
                                  [NotNull] EntitiesPropertySchemaManager schemaManager)
        {
            IEntity result = null;

            var entities = model.Entities?.ToArray();

            if (entities != null)
            {
                foreach (var entity in entities)
                {
                    var id = schemaManager.GetMsTmtEntityId(entity);
                    if (string.CompareOrdinal(id, msEntityId) == 0)
                    {
                        result = entity;
                        break;
                    }
                }
            }

            return(result);
        }
Beispiel #4
0
        private int ImportDataFlows([NotNull] ThreatModel source, [NotNull] IThreatModel target)
        {
            int result = 0;

            var flows = source.Flows;

            if (flows?.Any() ?? false)
            {
                var entitiesSchemaManager  = new EntitiesPropertySchemaManager(target);
                var dataFlowsSchemaManager = new DataFlowsPropertySchemaManager(target);
                var schema = dataFlowsSchemaManager.GetSchema();

                foreach (var flow in flows)
                {
                    var sourceEntity = GetEntity(flow.SourceGuid.ToString(), target, entitiesSchemaManager);
                    var targetEntity = GetEntity(flow.TargetGuid.ToString(), target, entitiesSchemaManager);
                    if (sourceEntity != null && targetEntity != null)
                    {
                        var dataFlow = target.AddDataFlow(flow.Name, sourceEntity.Id, targetEntity.Id);
                        if (dataFlow != null)
                        {
                            dataFlowsSchemaManager.SetMsTmtDataFlowId(dataFlow, flow.FlowId.ToString());

                            var properties = flow.Properties?.ToArray();
                            AddProperties(schema, dataFlow, properties);
                        }

                        IDiagram diagram = target.Diagrams?.FirstOrDefault(x =>
                                                                           string.CompareOrdinal(x.Name, flow.PageName) == 0);
                        diagram?.AddLink(dataFlow);
                        result++;
                    }
                }
            }

            return(result);
        }