예제 #1
0
        private SwaggerParameter CreatePrimitiveParameter(string name, string description, Type type, IList <Attribute> parentAttributes,
                                                          ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            var typeDescription = JsonObjectTypeDescription.FromType(type, parentAttributes, Settings.DefaultEnumHandling);
            var parameterType   = typeDescription.Type.HasFlag(JsonObjectType.Object) ? typeof(string) : type; // object types must be treated as string

            var operationParameter = _schemaGenerator.Generate <SwaggerParameter>(parameterType, parentAttributes, schemaResolver, schemaDefinitionAppender);

            if (parameterType.GetTypeInfo().IsEnum)
            {
                operationParameter.SchemaReference = _schemaGenerator.Generate <JsonSchema4>(parameterType, parentAttributes, schemaResolver, schemaDefinitionAppender);
            }
            else
            {
                _schemaGenerator.ApplyPropertyAnnotations(operationParameter, type, parentAttributes, typeDescription);
            }

            operationParameter.Name          = name;
            operationParameter.IsRequired    = parentAttributes?.Any(a => a.GetType().Name == "RequiredAttribute") ?? false;
            operationParameter.IsNullableRaw = typeDescription.IsNullable;

            if (description != string.Empty)
            {
                operationParameter.Description = description;
            }

            return(operationParameter);
        }
예제 #2
0
        private void LoadDefaultReturnType(SwaggerOperation operation, MethodInfo method, string xmlDescription,
                                           ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            var returnType = method.ReturnType;

            if (returnType == typeof(Task))
            {
                returnType = typeof(void);
            }
            else if (returnType.Name == "Task`1")
            {
                returnType = returnType.GenericTypeArguments[0];
            }

            if (IsVoidResponse(returnType))
            {
                operation.Responses["204"] = new SwaggerResponse
                {
                    Description = xmlDescription ?? string.Empty,
                };
            }
            else
            {
                var typeDescription = JsonObjectTypeDescription.FromType(returnType,
                                                                         method.ReturnParameter?.GetCustomAttributes(), Settings.DefaultEnumHandling);
                operation.Responses["200"] = new SwaggerResponse
                {
                    Description   = xmlDescription ?? string.Empty,
                    IsNullableRaw = typeDescription.IsNullable,
                    Schema        = CreateAndAddSchema(returnType, typeDescription.IsNullable, null, schemaResolver, schemaDefinitionAppender)
                };
            }
        }
예제 #3
0
        private SwaggerParameter CreatePrimitiveParameter(string name, string description, Type type, IList <Attribute> parentAttributes,
                                                          ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            var typeDescription = JsonObjectTypeDescription.FromType(type, parentAttributes, Settings.DefaultEnumHandling);

            SwaggerParameter operationParameter;

            if (typeDescription.IsEnum)
            {
                // TODO(incompatibility): We use "schema" even it is not allowed in non-body parameters
                var parameterType = type.Name == "Nullable`1" ? type.GetGenericTypeArguments().Single() : type;
                operationParameter = new SwaggerParameter
                {
                    Type   = typeDescription.Type, // Used as fallback for generators which do not check the "schema" property
                    Schema = _schemaGenerator.Generate <JsonSchema4>(parameterType, parentAttributes, schemaResolver, schemaDefinitionAppender)
                };
            }
            else
            {
                var parameterType = typeDescription.Type.HasFlag(JsonObjectType.Object) ? typeof(string) : type; // object types must be treated as string
                operationParameter = _schemaGenerator.Generate <SwaggerParameter>(parameterType, parentAttributes, schemaResolver, schemaDefinitionAppender);
                _schemaGenerator.ApplyPropertyAnnotations(operationParameter, type, parentAttributes, typeDescription);
            }

            operationParameter.Name          = name;
            operationParameter.IsRequired    = parentAttributes?.Any(a => a.GetType().Name == "RequiredAttribute") ?? false;
            operationParameter.IsNullableRaw = typeDescription.IsNullable;

            if (description != string.Empty)
            {
                operationParameter.Description = description;
            }

            return(operationParameter);
        }
예제 #4
0
        /// <exception cref="InvalidOperationException">Could not find value type of dictionary type.</exception>
        private void GenerateDictionary <TSchemaType>(Type type, TSchemaType schema, ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
            where TSchemaType : JsonSchema4, new()
        {
            var genericTypeArguments = ReflectionExtensions.GetGenericTypeArguments(type);

            var valueType = genericTypeArguments.Length == 2 ? genericTypeArguments[1] : typeof(object);

            if (valueType == typeof(object))
            {
                schema.AdditionalPropertiesSchema = JsonSchema4.CreateAnySchema();
            }
            else
            {
                if (RequiresSchemaReference(valueType, null))
                {
                    schema.AdditionalPropertiesSchema = new JsonSchema4
                    {
                        SchemaReference = Generate(valueType, schemaResolver, schemaDefinitionAppender)
                    };
                }
                else
                {
                    schema.AdditionalPropertiesSchema = Generate(valueType, schemaResolver, schemaDefinitionAppender);
                }
            }

            schema.AllowAdditionalProperties = true;
        }
예제 #5
0
        private void GeneratePropertiesAndInheritance(Type type, JsonSchema4 schema, ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            var properties = GetTypeProperties(type);

#if !LEGACY
            var declaredFields = type.GetTypeInfo().DeclaredFields
                                 .Where(f => f.IsPublic);

            var declaredProperties = type.GetTypeInfo().DeclaredProperties
                                     .Where(p => p.GetMethod?.IsPublic == true || p.SetMethod?.IsPublic == true);
#else
            var declaredFields = type.GetTypeInfo()
                                 .GetFields(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);

            var declaredProperties = type.GetTypeInfo()
                                     .GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance)
                                     .Where(p => p.GetGetMethod()?.IsPublic == true || p.GetSetMethod()?.IsPublic == true);
#endif

            foreach (var property in declaredProperties.Where(p => properties == null || properties.Contains(p.Name)))
            {
                LoadPropertyOrField(property, property.PropertyType, type, schema, schemaResolver, schemaDefinitionAppender);
            }

            foreach (var field in declaredFields.Where(p => properties == null || properties.Contains(p.Name)))
            {
                LoadPropertyOrField(field, field.FieldType, type, schema, schemaResolver, schemaDefinitionAppender);
            }

            GenerateInheritance(type, schema, schemaResolver, schemaDefinitionAppender);
        }
예제 #6
0
        private void AddBodyParameter(SwaggerOperationExtended operation, ISchemaResolver schemaResolver,
                                      ParameterInfo parameter)
        {
            var operationParameter = CreateBodyParameter(parameter, schemaResolver);

            operation.Parameters.Add(operationParameter);
        }
예제 #7
0
        private void AddPrimitiveParameter(SwaggerOperationExtended operation, ISchemaResolver schemaResolver,
                                           ParameterInfo parameter)
        {
            var operationParameter = CreatePrimitiveParameter(parameter, schemaResolver);

            operationParameter.Kind = SwaggerParameterKindExtended.Query;
            operation.Parameters.Add(operationParameter);
        }
예제 #8
0
 public PluginService(ILogger <PluginService> logger,
                      TFPluginServer pluginServer, ISchemaResolver schemaResolver)
 {
     _log            = logger;
     _pluginServer   = pluginServer;
     _schemaResolver = schemaResolver;
     _log.LogInformation("PluginService constructed");
 }
예제 #9
0
 /// <summary>Initializes a new instance of the <see cref="SwaggerGenerator"/> class.</summary>
 /// <param name="schemaGenerator">The schema generator.</param>
 /// <param name="schemaGeneratorSettings">The schema generator settings.</param>
 /// <param name="schemaResolver">The schema resolver.</param>
 /// <param name="schemaDefinitionAppender">The schema definition appender.</param>
 public SwaggerGenerator(JsonSchemaGenerator schemaGenerator, JsonSchemaGeneratorSettings schemaGeneratorSettings, 
     ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
 {
     _schemaGenerator = schemaGenerator;
     _schemaResolver = schemaResolver;
     _schemaDefinitionAppender = schemaDefinitionAppender;
     _settings = schemaGeneratorSettings;
 }
예제 #10
0
 public TSqlBuilder(
     ITableNameResolver tableNameResolver,
     IColumnNameResolver columnNameResolver) : base(
         tableNameResolver,
         columnNameResolver)
 {
     this.schemaResolver = new DefaultSchemaResolver(DefaultSchema);
 }
예제 #11
0
 public TSqlBuilder(
     ITableNameResolver tableNameResolver,
     IColumnNameResolver columnNameResolver,
     ISchemaResolver schemaResolver) : base(
         tableNameResolver,
         columnNameResolver)
 {
     this.schemaResolver = schemaResolver;
 }
예제 #12
0
        private void AddPrimitiveParameter(string name, SwaggerOperation operation, ParameterInfo parameter,
                                           ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            var operationParameter = CreatePrimitiveParameter(name, parameter, schemaResolver, schemaDefinitionAppender);

            operationParameter.Kind       = SwaggerParameterKind.Query;
            operationParameter.IsRequired = operationParameter.IsRequired || parameter.HasDefaultValue == false;
            operation.Parameters.Add(operationParameter);
        }
예제 #13
0
        private SwaggerParameter CreateBodyParameter(ParameterInfo parameter, ISchemaResolver schemaResolver)
        {
            var operationParameter = new SwaggerParameter();

            operationParameter.Schema = CreateAndAddSchema <SwaggerParameter>(parameter.ParameterType, schemaResolver);
            operationParameter.Name   = "request";
            operationParameter.Kind   = SwaggerParameterKind.body;
            return(operationParameter);
        }
예제 #14
0
        /// <summary>Generates a <see cref="JsonSchema4" /> object for the given type and adds the mapping to the given resolver.</summary>
        /// <typeparam name="TSchemaType">The type of the schema type.</typeparam>
        /// <param name="type">The type.</param>
        /// <param name="schemaResolver">The schema resolver.</param>
        /// <returns>The schema.</returns>
        /// <exception cref="InvalidOperationException">Could not find value type of dictionary type.</exception>
        /// <exception cref="InvalidOperationException">Could not find item type of enumeration type.</exception>
        public TSchemaType Generate <TSchemaType>(Type type, ISchemaResolver schemaResolver)
            where TSchemaType : JsonSchema4, new()
        {
            var schema = new TSchemaType();

            var typeDescription = JsonObjectTypeDescription.FromType(type);

            schema.Type   = typeDescription.Type;
            schema.Format = typeDescription.Format;

            if (schema.Type.HasFlag(JsonObjectType.Object))
            {
                if (typeDescription.IsDictionary)
                {
                    GenerateDictionary(type, schema, schemaResolver);
                }
                else
                {
                    if (type == typeof(object))
                    {
                        return(new TSchemaType
                        {
                            Type = JsonObjectType.Object,
                            AllowAdditionalProperties = false
                        });
                    }

                    schema.TypeName = GetTypeName(type);

                    if (schemaResolver.HasSchema(type))
                    {
                        schema.SchemaReference = schemaResolver.GetSchema(type);
                        return(schema);
                    }

                    GenerateObject(type, schema, schemaResolver);
                    GenerateInheritance(type, schema, schemaResolver);
                }
            }
            else if (schema.Type.HasFlag(JsonObjectType.Array))
            {
                schema.Type = JsonObjectType.Array;

                var itemType = type.GenericTypeArguments.Length == 0 ? type.GetElementType() : type.GenericTypeArguments[0];
                if (itemType == null)
                {
                    throw new InvalidOperationException("Could not find item type of enumeration type '" + type.FullName + "'.");
                }

                schema.Item = Generate <JsonSchema4>(itemType, schemaResolver);
            }

            TryLoadEnumerations(type, schema);

            return(schema);
        }
 public SqlServerDataContext(
     SqlServerConnectionProvider connectionProvider,
     ITableNameResolver tableNameResolver,
     IColumnNameResolver columnNameResolver,
     ISchemaResolver schemaResolver) : base(
         connectionProvider,
         new TSqlBuilder(tableNameResolver, columnNameResolver, schemaResolver),
         new SqlCache())
 {
 }
        private void GenerateInheritance(Type type, JsonSchema4 schema, ISchemaResolver schemaResolver)
        {
            var baseType = type.GetTypeInfo().BaseType;

            if (baseType != null && baseType != typeof(object))
            {
                var baseSchema = Generate <JsonProperty>(baseType, schemaResolver);
                schema.AllOf.Add(baseSchema);
            }
        }
예제 #17
0
        private TSchemaType CreateAndAddSchema <TSchemaType>(Type type, ISchemaResolver schemaResolver)
            where TSchemaType : JsonSchema4, new()
        {
            if (type.Name == "Task`1")
            {
                type = type.GenericTypeArguments[0];
            }

            if (type.Name == "JsonResult`1")
            {
                type = type.GenericTypeArguments[0];
            }

            var info = JsonObjectTypeDescription.FromType(type);

            if (info.Type.HasFlag(JsonObjectType.Object))
            {
                if (!schemaResolver.HasSchema(type))
                {
                    var schemaGenerator = new RootTypeJsonSchemaGenerator(_service);
                    schemaGenerator.Generate <JsonSchema4>(type, schemaResolver);
                }

                //load
                //目前先屏蔽处理某些特定类型的异常
                //Dictionary<string,string>
                JsonSchema4 t = null;
                try
                {
                    t = schemaResolver.GetSchema(type);
                }
                catch (Exception)
                {
                }
                return(new TSchemaType
                {
                    Type = JsonObjectType.Object,
                    SchemaReference = t
                });
            }

            if (info.Type.HasFlag(JsonObjectType.Array))
            {
                var itemType = type.GenericTypeArguments.Length == 0 ? type.GetElementType() : type.GenericTypeArguments[0];
                return(new TSchemaType
                {
                    Type = JsonObjectType.Array,
                    Item = CreateAndAddSchema <JsonSchema4>(itemType, schemaResolver)
                });
            }

            var generator = new RootTypeJsonSchemaGenerator(_service);

            return(generator.Generate <TSchemaType>(type, schemaResolver));
        }
예제 #18
0
        /// <exception cref="InvalidOperationException">The operation has more than one body parameter.</exception>
        private void GenerateForController(SwaggerService service, Type controllerType, string excludedMethodName,
                                           ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            var hasIgnoreAttribute = controllerType.GetTypeInfo().GetCustomAttributes()
                                     .Any(a => a.GetType().Name == "SwaggerIgnoreAttribute");

            if (!hasIgnoreAttribute)
            {
                var operations = new List <Tuple <SwaggerOperationDescription, MethodInfo> >();
                foreach (var method in GetActionMethods(controllerType, excludedMethodName))
                {
                    var httpPaths   = GetHttpPaths(controllerType, method);
                    var httpMethods = GetSupportedHttpMethods(method).ToList();

                    foreach (var httpPath in httpPaths)
                    {
                        foreach (var httpMethod in httpMethods)
                        {
                            var operation = new SwaggerOperation
                            {
                                IsDeprecated = method.GetCustomAttribute <ObsoleteAttribute>() != null
                            };

                            var parameters = method.GetParameters().ToList();

                            LoadParameters(operation, parameters, httpPath, schemaResolver, schemaDefinitionAppender);
                            LoadReturnType(operation, method, schemaResolver, schemaDefinitionAppender);
                            LoadMetaData(operation, method);
                            LoadOperationTags(method, operation, controllerType);

                            var operationDescription = new SwaggerOperationDescription
                            {
                                Path = Regex.Replace(httpPath, "{(.*?)(:(.*?))?}", match =>
                                {
                                    if (operation.ActualParameters.Any(p => p.Kind == SwaggerParameterKind.Path && match.Groups[1].Value == p.Name))
                                    {
                                        return("{" + match.Groups[1].Value + "}");
                                    }
                                    return(string.Empty);
                                }).TrimEnd('/'),
                                Method    = httpMethod,
                                Operation = operation
                            };

                            operationDescription.Operation.OperationId = GetOperationId(service, controllerType.Name, method);
                            operations.Add(new Tuple <SwaggerOperationDescription, MethodInfo>(operationDescription, method));
                        }
                    }
                }

                AddOperationDescriptionsToDocument(service, operations, schemaResolver);
            }

            AppendRequiredSchemasToDefinitions(service, schemaResolver);
        }
예제 #19
0
        private void AddFileParameter(ParameterInfo parameter, bool isFileArray, SwaggerOperation operation,
                                      ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            var attributes = parameter.GetCustomAttributes().ToList();

            // TODO: Check if there is a way to control the property name
            var operationParameter = CreatePrimitiveParameter(parameter.Name, parameter.GetXmlDocumentation(),
                                                              parameter.ParameterType, attributes, schemaResolver, schemaDefinitionAppender);

            InitializeFileParameter(operationParameter, isFileArray);
            operation.Parameters.Add(operationParameter);
        }
예제 #20
0
        private TSchemaType CreateAndAddSchema <TSchemaType>(Type type, ISchemaResolver schemaResolver)
            where TSchemaType : JsonSchema4, new()
        {
            if (type.Name == "Task`1")
            {
                type = type.GenericTypeArguments[0];
            }

            if (type.Name == "JsonResult`1")
            {
                type = type.GenericTypeArguments[0];
            }

            var info = JsonObjectTypeDescription.FromType(type);

            if (info.Type.HasFlag(JsonObjectType.Object))
            {
                if (type == typeof(object))
                {
                    return(new TSchemaType
                    {
                        Type = JsonObjectType.Object,
                        AllowAdditionalProperties = false
                    });
                }

                if (!schemaResolver.HasSchema(type))
                {
                    var schemaGenerator = new RootTypeJsonSchemaGenerator(_service, JsonSchemaGeneratorSettings);
                    schemaGenerator.Generate <JsonSchema4>(type, schemaResolver);
                }

                return(new TSchemaType
                {
                    Type = JsonObjectType.Object,
                    SchemaReference = schemaResolver.GetSchema(type)
                });
            }

            if (info.Type.HasFlag(JsonObjectType.Array))
            {
                var itemType = type.GenericTypeArguments.Length == 0 ? type.GetElementType() : type.GenericTypeArguments[0];
                return(new TSchemaType
                {
                    Type = JsonObjectType.Array,
                    Item = CreateAndAddSchema <JsonSchema4>(itemType, schemaResolver)
                });
            }

            var generator = new RootTypeJsonSchemaGenerator(_service, JsonSchemaGeneratorSettings);

            return(generator.Generate <TSchemaType>(type, schemaResolver));
        }
        /// <exception cref="InvalidOperationException">Could not find value type of dictionary type.</exception>
        private void GenerateDictionary <TSchemaType>(Type type, TSchemaType schema, ISchemaResolver schemaResolver)
            where TSchemaType : JsonSchema4, new()
        {
            if (type.GenericTypeArguments.Length != 2)
            {
                throw new InvalidOperationException("Could not find value type of dictionary type '" + type.FullName + "'.");
            }

            var valueType = type.GenericTypeArguments[1];

            schema.AdditionalPropertiesSchema = Generate <JsonProperty>(valueType, schemaResolver);
            schema.AllowAdditionalProperties  = true;
        }
 internal override EntityDesignerViewModel LoadModelAndDiagram(
     SerializationResult serializationResult, Partition modelPartition, string modelFileName, Partition diagramPartition,
     string diagramFileName, ISchemaResolver schemaResolver, ValidationController validationController,
     ISerializerLocator serializerLocator)
 {
     EntityDesignerViewModel evm = null;
     using (new VsUtils.HourglassHelper())
     {
         evm = LoadModel(serializationResult, modelPartition, modelFileName, schemaResolver, validationController, serializerLocator);
         var diagram = CreateDiagramHelper(diagramPartition, evm);
     }
     return evm;
 }
예제 #23
0
        private bool TryAddFileParameter(JsonObjectTypeDescription info, SwaggerOperation operation, ParameterInfo parameter,
                                         ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            var isFileArray = IsFileArray(parameter.ParameterType, info);

            if (info.Type == JsonObjectType.File || isFileArray)
            {
                AddFileParameter(parameter, isFileArray, operation, schemaResolver, schemaDefinitionAppender);
                return(true);
            }

            return(false);
        }
예제 #24
0
        private void GenerateKnownTypes(Type type, ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
        {
            foreach (dynamic knownTypeAttribute in type.GetTypeInfo().GetCustomAttributes().Where(a => a.GetType().Name == "KnownTypeAttribute"))
            {
                var typeDescription = JsonObjectTypeDescription.FromType(knownTypeAttribute.Type, null, Settings.DefaultEnumHandling);
                var isIntegerEnum   = typeDescription.Type == JsonObjectType.Integer;

                if (!schemaResolver.HasSchema(knownTypeAttribute.Type, isIntegerEnum))
                {
                    var knownSchema = Generate(knownTypeAttribute.Type, schemaResolver, schemaDefinitionAppender);
                    schemaDefinitionAppender.Append(knownSchema.ActualSchema);
                }
            }
        }
예제 #25
0
 private void LoadReturnType(SwaggerOperation operation, MethodInfo method, ISchemaResolver schemaResolver)
 {
     if (method.ReturnType.FullName != "System.Void" && method.ReturnType.FullName != "System.Threading.Tasks.Task")
     {
         operation.Responses["200"] = new SwaggerResponse
         {
             Schema = CreateAndAddSchema <JsonSchema4>(method.ReturnType, schemaResolver)
         };
     }
     else
     {
         operation.Responses["200"] = new SwaggerResponse();
     }
 }
예제 #26
0
        internal override EntityDesignerViewModel LoadModelAndDiagram(
            SerializationResult serializationResult, Partition modelPartition, string modelFileName, Partition diagramPartition,
            string diagramFileName, ISchemaResolver schemaResolver, ValidationController validationController,
            ISerializerLocator serializerLocator)
        {
            EntityDesignerViewModel evm = null;

            using (new VsUtils.HourglassHelper())
            {
                evm = LoadModel(serializationResult, modelPartition, modelFileName, schemaResolver, validationController, serializerLocator);
                var diagram = CreateDiagramHelper(diagramPartition, evm);
            }
            return(evm);
        }
예제 #27
0
        private void GenerateInheritance(Type type, JsonSchema4 schema, ISchemaResolver schemaResolver)
        {
            var baseType = type.GetTypeInfo().BaseType;

            if (baseType != null && baseType != typeof(object))
            {
                if (Settings.FlattenInheritanceHierarchy)
                {
                    GeneratePropertiesAndInheritance(baseType, schema, schemaResolver);
                }
                else
                {
                    var baseSchema = Generate <JsonProperty>(baseType, schemaResolver);
                    schema.AllOf.Add(baseSchema);
                }
            }
        }
        /// <summary>Processes the specified method information.</summary>
        /// <param name="operationDescription">The operation description.</param>
        /// <param name="methodInfo">The method information.</param>
        /// <param name="schemaResolver">The schema resolver.</param>
        /// <param name="allOperationDescriptions">All operation descriptions.</param>
        /// <returns>true if the operation should be added to the Swagger specification.</returns>
        public bool Process(SwaggerOperationDescription operationDescription, MethodInfo methodInfo,
                            ISchemaResolver schemaResolver, IList <SwaggerOperationDescription> allOperationDescriptions)
        {
            if (operationDescription.Operation.Security == null)
            {
                operationDescription.Operation.Security = new List <SwaggerSecurityRequirement>();
            }

            var scopes = GetScopes(operationDescription, methodInfo, schemaResolver, allOperationDescriptions);

            operationDescription.Operation.Security.Add(new SwaggerSecurityRequirement
            {
                { _name, scopes }
            });

            return(true);
        }
        /// <summary>Gets the security scopes for an operation.</summary>
        /// <param name="operationDescription">The operation description.</param>
        /// <param name="methodInfo">The method information.</param>
        /// <param name="schemaResolver">The schema resolver.</param>
        /// <param name="allOperationDescriptions">All operation descriptions.</param>
        /// <returns>The scopes.</returns>
        protected virtual IEnumerable <string> GetScopes(SwaggerOperationDescription operationDescription, MethodInfo methodInfo,
                                                         ISchemaResolver schemaResolver, IList <SwaggerOperationDescription> allOperationDescriptions)
        {
            var allAttributes = methodInfo.GetCustomAttributes().Concat(
                methodInfo.DeclaringType.GetTypeInfo().GetCustomAttributes());

            var authorizeAttributes = allAttributes.Where(a => a.GetType().Name == "AuthorizeAttribute").ToList();

            if (!authorizeAttributes.Any())
            {
                return(Enumerable.Empty <string>());
            }

            return(authorizeAttributes
                   .SelectMany((dynamic attr) => ((string)attr.Roles).Split(','))
                   .Distinct());
        }
예제 #30
0
        private void AppendRequiredSchemasToDefinitions(SwaggerService service, ISchemaResolver schemaResolver)
        {
            foreach (var schema in schemaResolver.Schemas)
            {
                if (!service.Definitions.Values.Contains(schema))
                {
                    var typeName = schema.GetTypeName(Settings.TypeNameGenerator);

                    if (!service.Definitions.ContainsKey(typeName))
                    {
                        service.Definitions[typeName] = schema;
                    }
                    else
                    {
                        service.Definitions["ref_" + Guid.NewGuid().ToString().Replace("-", "_")] = schema;
                    }
                }
            }
        }
        internal override EntityDesignerViewModel LoadModel(
            SerializationResult serializationResult, Partition partition, string fileName, ISchemaResolver schemaResolver,
            ValidationController validationController, ISerializerLocator serializerLocator)
        {
            var docData = VSHelpers.GetDocData(PackageManager.Package, fileName) as IEntityDesignDocData;
            docData.CreateAndLoadBuffer();

            EntityDesignerViewModel evm = null;

            var serializationContext = new SerializationContext(GetDirectory(partition.Store), fileName, serializationResult);
            var transactionContext = new TransactionContext();
            transactionContext.Add(SerializationContext.TransactionContextKey, serializationContext);

            using (var t = partition.Store.TransactionManager.BeginTransaction("Load Model from " + fileName, true, transactionContext))
            {
                var uri = Tools.XmlDesignerBase.Base.Util.Utils.FileName2Uri(fileName);
                var context = PackageManager.Package.DocumentFrameMgr.EditingContextManager.GetNewOrExistingContext(uri);
                evm =
                    ModelTranslatorContextItem.GetEntityModelTranslator(context).TranslateModelToDslModel(null, partition) as
                    EntityDesignerViewModel;

                if (evm == null)
                {
                    serializationResult.Failed = true;
                }
                else
                {
                    if (t.IsActive)
                    {
                        t.Commit();
                    }
                }
            }

            // Validate imported model
            if (!serializationResult.Failed
                && (validationController != null))
            {
                validationController.Validate(partition, ValidationCategories.Load);
            }
            return evm;
        }
예제 #32
0
        private TSchemaType HandleSpecialTypes <TSchemaType>(Type type, ISchemaResolver schemaResolver)
            where TSchemaType : JsonSchema4, new()
        {
            var typeMapper = Settings.TypeMappers.FirstOrDefault(m => m.MappedType == type);

            if (typeMapper != null)
            {
                var schema = typeMapper.GetSchema <TSchemaType>(this, schemaResolver);
                if (schema != null)
                {
                    return(schema);
                }
            }

            if (type == typeof(JObject) || type == typeof(JToken) || type == typeof(object))
            {
                return(JsonSchema4.CreateAnySchema <TSchemaType>());
            }

            return(null);
        }
        public override HostDesignerModel LoadModelAndDiagram(
            SerializationResult serializationResult, 
            Partition modelPartition, 
            string modelFileName, 
            Partition diagramPartition, 
            string diagramFileName, 
            ISchemaResolver schemaResolver, 
            ValidationController validationController, 
            ISerializerLocator serializerLocator)
        {
            ISchemaResolver resolver = new CustomModelingSchemaResolver(schemaResolver, "GeneratedCode\\HostDesignerSchema.xsd");

            return base.LoadModelAndDiagram(
                serializationResult,
                modelPartition,
                modelFileName,
                diagramPartition,
                diagramFileName,
                resolver,
                validationController,
                serializerLocator);
        }
 public override MetaModel LoadModel(SerializationResult serializationResult, Store store, string fileName, ISchemaResolver schemaResolver, DslValidation.ValidationController validationController, ISerializerLocator serializerLocator)
 {
     return LoadModel(serializationResult, store.DefaultPartition, fileName, schemaResolver, validationController, serializerLocator, true, true);
 }
 public CustomModelingSchemaResolver(ISchemaResolver defaultResolver, string schemaFileName)
 {
     this.defaultResolver = defaultResolver;            
     this.schemaFileName = schemaFileName;
 }