public void Apply(Operation operation, OperationFilterContext context)
        {
            // Correspond each "Authorize" role to an oauth2 scope
            var controllerScopes = context.ApiDescription.GetControllerAttributes()
                .OfType<AuthorizeAttribute>()
                .SelectMany(attr => attr.Roles.Split(','));

            var actionScopes = context.ApiDescription.GetActionAttributes()
                .OfType<AuthorizeAttribute>()
                .SelectMany(attr => attr.Roles.Split(','));

            var scopes = controllerScopes.Union(actionScopes).Distinct();

            if (scopes.Any())
            {
                if (operation.Security == null)
                    operation.Security = new List<IDictionary<string, IEnumerable<string>>>();

                var oAuthRequirements = new Dictionary<string, IEnumerable<string>>
                {
                    { "oauth2", scopes }
                };

                operation.Security.Add(oAuthRequirements);
            }
        }
        public void Apply(Operation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                return;
            }

            var parameters = operation.Parameters.Select(p => p.Name);
            operation.OperationId = string.Format("{0}_by_{1}", operation.OperationId, string.Join("_and_", parameters));
        }
            /// <summary>
            /// Called when generating the operation
            /// </summary>
            public void Apply(Operation operation, OperationFilterContext context)
            {
                operation.OperationId = "GarbageCollection_Get";

                foreach (var dtParam in operation.Parameters.Where(x => x is NonBodyParameter).Cast<NonBodyParameter>())
                {
                    // TODO: Make this less hacky when possible!
                    if (dtParam.Name == "addr")
                        dtParam.Required = true;
                }
            }
        public void Apply(Operation operation, OperationFilterContext context)
        {
            var apiDesc = context.ApiDescription;

            var controllerAttributes = apiDesc.GetControllerAttributes().OfType<SwaggerOperationFilterAttribute>();
            var actionAttributes = apiDesc.GetActionAttributes().OfType<SwaggerOperationFilterAttribute>();

            foreach (var attribute in controllerAttributes.Union(actionAttributes))
            {
                var filter = (IOperationFilter)Activator.CreateInstance(attribute.FilterType);
                filter.Apply(operation, context);
            }
        }
        public void Apply(Operation operation, OperationFilterContext context)
        {
            var attribute = context.ApiDescription.GetActionAttributes()
                .OfType<SwaggerOperationAttribute>()
                .FirstOrDefault();
            if (attribute == null) return;

            if (attribute.OperationId != null)
                operation.OperationId = attribute.OperationId;

            if (attribute.Tags != null)
                operation.Tags = attribute.Tags;

            if (attribute.Schemes != null)
                operation.Schemes = attribute.Schemes;
        }
        public void Apply(Operation operation, OperationFilterContext context)
        {
            var apiDesc = context.ApiDescription;
            if (apiDesc.GetControllerAttributes().OfType<SwaggerResponseRemoveDefaultsAttribute>().Any() ||
                apiDesc.GetActionAttributes().OfType<SwaggerResponseRemoveDefaultsAttribute>().Any())
            {
                operation.Responses.Clear();
            }

            var controllerAttributes = apiDesc.GetControllerAttributes().OfType<SwaggerResponseAttribute>()
                .OrderBy(attr => attr.StatusCode);
            ApplyResponsesFrom(controllerAttributes, operation, context.SchemaRegistry);

            var actionAttributes = apiDesc.GetActionAttributes().OfType<SwaggerResponseAttribute>()
                .OrderBy(attr => attr.StatusCode);
            ApplyResponsesFrom(actionAttributes, operation, context.SchemaRegistry);
        }
Example #7
0
        public void Apply(Operation operation, OperationFilterContext context)
        {
            var controllerActionDescriptor = context.ApiDescription.ActionDescriptor as ControllerActionDescriptor;
            if (controllerActionDescriptor == null) return;

            var methodXPath = GetMethodXPath(controllerActionDescriptor.MethodInfo);
            var methodNode = _navigator.SelectSingleNode(methodXPath);
            if (methodNode == null) return;

            var summaryNode = methodNode.SelectSingleNode(SummaryExpression);
            if (summaryNode != null)
                operation.Summary = summaryNode.ExtractContent();

            var remarksNode = methodNode.SelectSingleNode(RemarksExpression);
            if (remarksNode != null)
                operation.Description = remarksNode.ExtractContent();

            ApplyParamComments(operation, methodNode);
        }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="operation">Operation</param>
        /// <param name="context">OperationFilterContext</param>
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var pars = context.ApiDescription.ParameterDescriptions;

            foreach (var par in pars)
            {
                var swaggerParam = operation.Parameters.SingleOrDefault(p => p.Name == par.Name);

                var attributes = ((ControllerParameterDescriptor)par.ParameterDescriptor).ParameterInfo.CustomAttributes;

                if (attributes != null && attributes.Count() > 0 && swaggerParam != null)
                {
                    // Required - [Required]
                    var requiredAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RequiredAttribute));
                    if (requiredAttr != null)
                    {
                        swaggerParam.Required = true;
                    }

                    // Regex Pattern [RegularExpression]
                    var regexAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RegularExpressionAttribute));
                    if (regexAttr != null)
                    {
                        string regex = (string)regexAttr.ConstructorArguments[0].Value;
                        if (swaggerParam is OpenApiParameter)
                        {
                            ((OpenApiParameter)swaggerParam).Schema.Pattern = regex;
                        }
                    }

                    // String Length [StringLength]
                    int?minLenght = null, maxLength = null;
                    var stringLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(StringLengthAttribute));
                    if (stringLengthAttr != null)
                    {
                        if (stringLengthAttr.NamedArguments.Count == 1)
                        {
                            minLenght = (int)stringLengthAttr.NamedArguments.Single(p => p.MemberName == "MinimumLength").TypedValue.Value;
                        }
                        maxLength = (int)stringLengthAttr.ConstructorArguments[0].Value;
                    }

                    var minLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(MinLengthAttribute));
                    if (minLengthAttr != null)
                    {
                        minLenght = (int)minLengthAttr.ConstructorArguments[0].Value;
                    }

                    var maxLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(MaxLengthAttribute));
                    if (maxLengthAttr != null)
                    {
                        maxLength = (int)maxLengthAttr.ConstructorArguments[0].Value;
                    }

                    if (swaggerParam is OpenApiParameter)
                    {
                        ((OpenApiParameter)swaggerParam).Schema.MinLength = minLenght;
                        ((OpenApiParameter)swaggerParam).Schema.MaxLength = maxLength;
                    }

                    // Range [Range]
                    var rangeAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RangeAttribute));
                    if (rangeAttr != null)
                    {
                        int rangeMin = (int)rangeAttr.ConstructorArguments[0].Value;
                        int rangeMax = (int)rangeAttr.ConstructorArguments[1].Value;

                        if (swaggerParam is OpenApiParameter)
                        {
                            ((OpenApiParameter)swaggerParam).Schema.Minimum = rangeMin;
                            ((OpenApiParameter)swaggerParam).Schema.Maximum = rangeMax;
                        }
                    }
                }
            }
        }
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
     operation.Responses.Add("401", new OpenApiResponse {
         Description = "Unauthorized"
     });
 }
Example #10
0
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
     operation.OperationId = context.MethodInfo.Name;
 }
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
     var responses = operation.Responses;
 }
Example #12
0
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
     operation.Responses.Clear();
     operation.Responses.Add("200", new OpenApiResponse
     {
         Description = "The image in the desired encoding (text/plain or image/png).",
         Content     = new Dictionary <string, OpenApiMediaType>
         {
             {
                 "text/plain", new OpenApiMediaType
                 {
                     Examples = new Dictionary <string, OpenApiExample>
                     {
                         {
                             "Usage in HTML", new OpenApiExample
                             {
                                 Description =
                                     "This is how to embed an example Base64-encoded image in HTML. This is not the image you generated above.",
                                 Value = new OpenApiString(
                                     $"<img alt=\"{AltText}\" src=\"data:image/png;base64,{ExampleBase64}\">")
                             }
                         },
                         {
                             "Usage in Markdown", new OpenApiExample
                             {
                                 Description =
                                     "This is how to embed an example Base64-encoded image in Markdown. This is not the image you generated above.",
                                 Value = new OpenApiString(
                                     $"![{AltText}](data:image/png;base64,{ExampleBase64})")
                             }
                         }
                     }
                 }
             },
             {
                 "image/png", new OpenApiMediaType
                 {
                     Examples = new Dictionary <string, OpenApiExample>
                     {
                         {
                             "Usage in HTML", new OpenApiExample
                             {
                                 Description =
                                     "This is how to load an example binary image in HTML. This is not the image you generated above.",
                                 Value = new OpenApiString(
                                     $"<img alt=\"{AltText}\" src=\"{Uri}\">")
                             }
                         },
                         {
                             "Usage in Markdown", new OpenApiExample
                             {
                                 Description =
                                     "This is how to load an example binary image in Markdown. This is not the image you generated above.",
                                 Value = new OpenApiString(
                                     $"![{AltText}]({Uri})")
                             }
                         }
                     }
                 }
             }
         }
     });
     operation.Responses.Add("400", new OpenApiResponse {
         Description = "The input was invalid."
     });
 }
Example #13
0
 public void Apply(Operation operation, OperationFilterContext context)
 {
     ApplyConstraintsXmlToActionParameters(operation.Parameters, context.ApiDescription);
 }
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
     operation.Responses.TryAdd("default", GetResponse("Error"));
 }
        protected void SetSwaggerResponses(OpenApiOperation operation, OperationFilterContext filterContext)
        {
            var swaggerResponseFilter = new AnnotationsOperationFilter();

            swaggerResponseFilter.Apply(operation, filterContext);
        }
Example #16
0
 private bool ContextHasAutoValidateAttributes(OperationFilterContext context)
 => GetAutoValidateAttributesFromContext(context).Any();
Example #17
0
 public void Apply(Operation operation, OperationFilterContext context)
 {
     operation.Responses.Add("400", new Response {
         Description = "Bad request"
     });
 }
 public void Apply(Operation operation, OperationFilterContext contex)
 {
     operation.Extensions.Add("X-property1", "value");
 }
Example #19
0
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
     operation.Parameters = operation.Parameters.Where(
         x => !objectIdIgnoreParameters.Contains(x.Name)
         ).ToList();
 }
Example #20
0
 public void Apply(Operation operation, OperationFilterContext context)
 {
     operation.Extensions.Add("x-purpose", "test");
 }
 public void Apply(Operation operation, OperationFilterContext contex)
 {
     operation.Extensions.Add("X-property1", "value");
 }
Example #22
0
 public void Apply(Operation operation, OperationFilterContext context)
 {
     SetRequestModelExamples(operation, context);
     SetResponseModelExamples(operation, context);
 }
Example #23
0
 private static IEnumerable <AutoValidateAttribute> GetAutoValidateAttributesFromContext(OperationFilterContext context)
 => context.MethodInfo.ReflectedType.GetCustomAttributes(true)
 .Union(context.MethodInfo.GetCustomAttributes(true))
 .OfType <AutoValidateAttribute>();
Example #24
0
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                operation.Parameters = new List <OpenApiParameter>();
            }

            operation.Parameters.Add(new OpenApiParameter
            {
                Name        = "x-partner-name",
                Description = "Client resgistered name",
                In          = ParameterLocation.Header,
                Required    = true,
                Schema      = new OpenApiSchema()
                {
                    Type = "string"
                }
            });

            IDictionary <string, OpenApiExample> examples = new Dictionary <string, OpenApiExample>
            {
                {
                    "par1",
                    new OpenApiExample
                    {
                        Description = "CIS Number:   CISNumber|12345678",
                        Summary     = "CISNumber"
                    }
                },

                {
                    "par2",
                    new OpenApiExample
                    {
                        Description = "ELB Number:   ELBNumber|12345678",
                        Summary     = "ELBNumber"
                    }
                },
                {
                    "par3",
                    new OpenApiExample
                    {
                        Description = "Routing and ELb:   RoutingAndElbNumber|101000695:123456781231231",
                        Summary     = "RoutingAndElbNumber"
                    }
                }
            };

            operation.Parameters.Add(new OpenApiParameter
            {
                Name        = "x-customer-id",
                Description = "Customer Id",
                In          = ParameterLocation.Header,
                Required    = true,
                Schema      = new OpenApiSchema()
                {
                    Type = "string"
                },
                Examples = examples
            });



            IDictionary <string, OpenApiExample> requestIdSample = new Dictionary <string, OpenApiExample>
            {
                {
                    "part1",
                    new OpenApiExample
                    {
                        Description = "2c4d133b-52e6-4e8a-a88b-1e69c069aeae",
                        Summary     = "GUID"
                    }
                }
            };

            operation.Parameters.Add(new OpenApiParameter
            {
                Name        = "RequestId",
                Description = "Operation id",
                In          = ParameterLocation.Header,
                Required    = true,
                Schema      = new OpenApiSchema()
                {
                    Type = "string"
                },
                Examples = requestIdSample
            });
        }
Example #25
0
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
 }
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
     operation.Description = $"Relative Path: &nbsp;&nbsp;&nbsp;{context.ApiDescription.RelativePath}";
 }
Example #27
0
 public void Apply(Operation operation, OperationFilterContext context)
 {
     operation.Parameters?.Remove(operation.Parameters?.Where(x => x.Name == "SyncRoot").FirstOrDefault());
 }
Example #28
0
 public void Apply(Operation operation, OperationFilterContext context)
 {
     Filter(operation, context);
 }
 public void Apply(Operation operation, OperationFilterContext context)
 {
     operation.Description = operation.Description?.Replace("&amp;", "&");
     operation.Summary     = operation.Summary?.Replace("&amp;", "&");
 }
        public void Apply(Operation operation, OperationFilterContext context)
        {
            var controllerActionDescriptor = context.ApiDescription.ActionDescriptor as ControllerActionDescriptor;

            if (controllerActionDescriptor == null)
            {
                return;
            }

            var pluralizer = new Pluralizer();

            var actionName      = controllerActionDescriptor.ActionName;
            var singularizeName = pluralizer.Singularize(controllerActionDescriptor.ControllerName);
            var pluralizeName   = pluralizer.Pluralize(singularizeName);

            var parameterCount = operation.Parameters.Where(p => p.Name != "version" && p.Name != "api-version").Count();

            if (IsGetAllAction())
            {
                if (!operation.Summary.HasValue())
                {
                    operation.Summary = $"Returns all {pluralizeName}";
                }
            }
            else if (IsActionName("Post", "Create"))
            {
                if (!operation.Summary.HasValue())
                {
                    operation.Summary = $"Creates a {singularizeName}";
                }

                if (!operation.Parameters[0].Description.HasValue())
                {
                    operation.Parameters[0].Description = $"A {singularizeName} representation";
                }
            }
            else if (IsActionName("Read", "Get"))
            {
                if (!operation.Summary.HasValue())
                {
                    operation.Summary = $"Retrieves a {singularizeName} by unique id";
                }

                if (!operation.Parameters[0].Description.HasValue())
                {
                    operation.Parameters[0].Description = $"a unique id for the {singularizeName}";
                }
            }
            else if (IsActionName("Put", "Edit", "Update"))
            {
                if (!operation.Summary.HasValue())
                {
                    operation.Summary = $"Updates a {singularizeName} by unique id";
                }

                //if (!operation.Parameters[0].Description.HasValue())
                //    operation.Parameters[0].Description = $"A unique id for the {singularizeName}";

                if (!operation.Parameters[0].Description.HasValue())
                {
                    operation.Parameters[0].Description = $"A {singularizeName} representation";
                }
            }
            else if (IsActionName("Delete", "Remove"))
            {
                if (!operation.Summary.HasValue())
                {
                    operation.Summary = $"Deletes a {singularizeName} by unique id";
                }

                if (!operation.Parameters[0].Description.HasValue())
                {
                    operation.Parameters[0].Description = $"A unique id for the {singularizeName}";
                }
            }

            #region Local Functions
            bool IsGetAllAction()
            {
                foreach (var name in new[] { "Get", "Read", "Select" })
                {
                    if ((actionName.Equals(name, StringComparison.OrdinalIgnoreCase) && parameterCount == 0) ||
                        actionName.Equals($"{name}All", StringComparison.OrdinalIgnoreCase) ||
                        actionName.Equals($"{name}{pluralizeName}", StringComparison.OrdinalIgnoreCase) ||
                        actionName.Equals($"{name}All{singularizeName}", StringComparison.OrdinalIgnoreCase) ||
                        actionName.Equals($"{name}All{pluralizeName}", StringComparison.OrdinalIgnoreCase))
                    {
                        return(true);
                    }
                }
                return(false);
            }

            bool IsActionName(params string[] names)
            {
                foreach (var name in names)
                {
                    if (actionName.Equals(name, StringComparison.OrdinalIgnoreCase) ||
                        actionName.Equals($"{name}ById", StringComparison.OrdinalIgnoreCase) ||
                        actionName.Equals($"{name}{singularizeName}", StringComparison.OrdinalIgnoreCase) ||
                        actionName.Equals($"{name}{singularizeName}ById", StringComparison.OrdinalIgnoreCase))
                    {
                        return(true);
                    }
                }
                return(false);
            }

            #endregion
        }
Example #31
0
        private Operation CreateOperation(ApiDescription apiDescription, ISchemaRegistry schemaRegistry)
        {
            var groupName = _options.GroupNameSelector(apiDescription);

            var parameters = apiDescription.ParameterDescriptions
                .Where(paramDesc => paramDesc.Source.IsFromRequest)
                .Select(paramDesc => CreateParameter(paramDesc, schemaRegistry))
                .ToList();

            var responses = new Dictionary<string, Response>();
            if (apiDescription.ResponseType == typeof(void))
                responses.Add("204", new Response { Description = "No Content" });
            else
                responses.Add("200", CreateSuccessResponse(apiDescription.ResponseType, schemaRegistry));

            var operation = new Operation
            {
                Tags = (groupName != null) ? new[] { groupName } : null,
                OperationId = apiDescription.ActionDescriptor.DisplayName,
                Produces = apiDescription.Produces().ToList(),
                //consumes = apiDescription.Consumes().ToList(),
                Parameters = parameters.Any() ? parameters : null, // parameters can be null but not empty
                Responses = responses,
                Deprecated = apiDescription.IsObsolete()
            };

            var filterContext = new OperationFilterContext(apiDescription, schemaRegistry);
            foreach (var filter in _options.OperationFilters)
            {
                filter.Apply(operation, filterContext);
            }

            return operation;
        }
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var versionParameter = operation.Parameters.SingleOrDefault(p => p.Name == "apiVersion");

            operation.Parameters.Remove(versionParameter);
        }
 public void Apply(Operation operation, OperationFilterContext context)
 {
     operation.Extensions.Add("x-purpose", "test");
 }
Example #34
0
        void ApplyInternal(Operation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                return;
            }

            var schemaIdSelector = _swaggerGenOptions.SchemaRegistryOptions.SchemaIdSelector ?? new SchemaRegistryOptions().SchemaIdSelector;

            foreach (var operationParameter in operation.Parameters)
            {
                var apiParameterDescription = context.ApiDescription.ParameterDescriptions.FirstOrDefault(description =>
                                                                                                          description.Name.Equals(operationParameter.Name, StringComparison.InvariantCultureIgnoreCase));

                var modelMetadata = apiParameterDescription?.ModelMetadata;
                if (modelMetadata != null)
                {
                    var parameterType = modelMetadata.ContainerType;
                    if (parameterType == null)
                    {
                        continue;
                    }
                    var validator = _validatorFactory.GetValidator(parameterType);
                    if (validator == null)
                    {
                        continue;
                    }

                    var key = modelMetadata.PropertyName;
                    var validatorsForMember = validator.GetValidatorsForMemberIgnoreCase(key);

                    var lazyLog = new LazyLog(_logger,
                                              logger => logger.LogDebug($"Applying FluentValidation rules to swagger schema for type '{parameterType}' from operation '{operation.OperationId}'."));

                    Schema schema = null;
                    foreach (var propertyValidator in validatorsForMember)
                    {
                        foreach (var rule in _rules)
                        {
                            if (rule.Matches(propertyValidator))
                            {
                                try
                                {
                                    var schemaId = schemaIdSelector(parameterType);

                                    if (!context.SchemaRegistry.Definitions.TryGetValue(schemaId, out schema))
                                    {
                                        schema = context.SchemaRegistry.GetOrRegister(parameterType);
                                    }

                                    if (schema.Properties == null && context.SchemaRegistry.Definitions.ContainsKey(schemaId))
                                    {
                                        schema = context.SchemaRegistry.Definitions[schemaId];
                                    }

                                    if (schema.Properties != null && schema.Properties.Count > 0)
                                    {
                                        lazyLog.LogOnce();
                                        rule.Apply(new RuleContext(schema, new SchemaFilterContext(parameterType, null, context.SchemaRegistry), key.ToLowerCamelCase(), propertyValidator));
                                        _logger.LogDebug($"Rule '{rule.Name}' applied for property '{parameterType.Name}.{key}'.");
                                    }
                                    else
                                    {
                                        _logger.LogDebug($"Rule '{rule.Name}' skipped for property '{parameterType.Name}.{key}'.");
                                    }
                                }
                                catch (Exception e)
                                {
                                    _logger.LogWarning(0, e, $"Error on apply rule '{rule.Name}' for property '{parameterType.Name}.{key}'.");
                                }
                            }
                        }
                    }

                    if (schema?.Required != null)
                    {
                        operationParameter.Required = schema.Required.Contains(key, StringComparer.InvariantCultureIgnoreCase);
                    }

                    if (schema?.Properties != null)
                    {
                        var parameterSchema = operationParameter as PartialSchema;
                        if (operationParameter != null)
                        {
                            if (schema.Properties.TryGetValue(key.ToLowerCamelCase(), out var property) ||
                                schema.Properties.TryGetValue(key, out property))
                            {
                                parameterSchema.MinLength        = property.MinLength;
                                parameterSchema.MaxLength        = property.MaxLength;
                                parameterSchema.Pattern          = property.Pattern;
                                parameterSchema.Minimum          = property.Minimum;
                                parameterSchema.Maximum          = property.Maximum;
                                parameterSchema.ExclusiveMaximum = property.ExclusiveMaximum;
                                parameterSchema.ExclusiveMinimum = property.ExclusiveMinimum;
                            }
                        }
                    }
                }
            }
        }
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var apiDescription  = context.ApiDescription;
            var scopeAttributes = GetMethodOrControllerAttributes <SwaggerRequiredScopesAttribute>(apiDescription).ToArray();

            // skip if operation does not have ScopeAttribute
            if (!scopeAttributes.Any())
            {
                return;
            }

            operation.Responses.Add("401", new OpenApiResponse {
                Description = "Unauthorized"
            });
            operation.Responses.Add("403", new OpenApiResponse {
                Description = "Forbidden"
            });

            var scopes =
                (from item in scopeAttributes
                 from scope in item.Scopes
                 select scope)
                .Distinct()
                .OrderBy(x => x)
                .ToArray();

            operation.Security = new List <OpenApiSecurityRequirement>
            {
                new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Id   = OAuth2Security.OAuth2,
                                Type = ReferenceType.SecurityScheme
                            }
                        },
                        scopes
                    },
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Id   = OAuth2Security.AuthorizationCode,
                                Type = ReferenceType.SecurityScheme
                            }
                        },
                        scopes
                    },
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Id   = OAuth2Security.Implicit,
                                Type = ReferenceType.SecurityScheme
                            }
                        },
                        scopes
                    },
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Id   = OAuth2Security.ClientCredentials,
                                Type = ReferenceType.SecurityScheme
                            }
                        },
                        scopes
                    },
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Id   = OAuth2Security.ResourceOwnerPasswordCredentials,
                                Type = ReferenceType.SecurityScheme
                            }
                        },
                        scopes
                    }
                }
            };
        }
Example #36
0
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var apiDescription = context.ApiDescription;

            operation.Deprecated |= apiDescription.IsDeprecated();

            if (operation.Parameters == null)
            {
                return;
            }

            foreach (var response in operation.Responses)
            {
                BaseException baseException;
                switch (response.Key)
                {
                case "400":
                    baseException = new BadRequestException();
                    break;

                case "401":
                    baseException = new UnauthorizedException();
                    break;

                case "403":
                    baseException = new UnauthorizedException();
                    break;

                case "404":
                    baseException = new NotFoundException();
                    break;

                case "406":
                    baseException = new NotAcceptableException();
                    break;

                case "422":
                    baseException = new UnprocessableException();
                    break;

                case "500":
                    baseException = new InternalServerError();
                    break;

                default:
                    baseException = null;
                    break;
                }
                if (baseException != null)
                {
                    response.Value.Description = baseException.ProblemDetailsModel.Detail;
                }
            }

            foreach (var parameter in operation.Parameters)
            {
                var description = apiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name);

                if (String.IsNullOrEmpty(parameter.Description) && !String.IsNullOrEmpty(description?.ModelMetadata?.Description))
                {
                    parameter.Description = description.ModelMetadata?.Description;
                }

                if (parameter.Schema.Default == null && description.DefaultValue != null)
                {
                    parameter.Schema.Default = new OpenApiString(description.DefaultValue.ToString());
                }

                parameter.Required |= description.IsRequired;
            }
        }
Example #37
0
 public void Apply(Operation operation, OperationFilterContext context)
 {
     operation.Responses.Add("500", new Response {
         Description = "Internal server error"
     });
 }
Example #38
0
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
     operation.OperationId = FriendlyId(context.ApiDescription);
 }
Example #39
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                operation.Parameters = new List <IParameter>();
            }

            var actionAttrs = context.ApiDescription.ActionAttributes();

            var isAuthorized = actionAttrs.Any(p => typeof(AuthorizeAttribute).IsAssignableFrom(p.GetType()));

            if (isAuthorized == false) //提供action都没有权限特性标记,检查控制器有没有
            {
                var controllerAttrs = context.ApiDescription.ControllerAttributes();

                isAuthorized = controllerAttrs.Any(p => typeof(AuthorizeAttribute).IsAssignableFrom(p.GetType()));
            }

            //添加参数
            operation.Parameters.Add(new NonBodyParameter()
            {
                Name     = "requestTime",
                In       = "query", //query header body path formData
                Type     = "string",
                Required = true     //是否必选
            });
            operation.Parameters.Add(new NonBodyParameter()
            {
                Name     = "nonce_str",
                In       = "query", //query header body path formData
                Type     = "string",
                Required = true     //是否必选
            });
            operation.Parameters.Add(new NonBodyParameter()
            {
                Name     = "sign",
                In       = "query", //query header body path formData
                Type     = "string",
                Required = true     //是否必选
            });

            var isAllowAnonymous = actionAttrs.Any(a => a.GetType() == typeof(AllowAnonymousAttribute));

            if (isAuthorized && isAllowAnonymous == false)
            {
                operation.Parameters.Add(new NonBodyParameter()
                {
                    Name     = "Authorization", //添加Authorization头部参数
                    In       = "header",
                    Type     = "string",
                    Required = false
                });
            }

            if (operation.Security == null)
            {
                operation.Security = new List <IDictionary <string, IEnumerable <string> > >();
            }
            var oAuthRequirements = new Dictionary <string, IEnumerable <string> >
            {
                { "oauth2", new List <string> {
                      "openid", "profile", "Api"
                  } }
            };

            operation.Security.Add(oAuthRequirements);

            //上传文件
            if (!context.ApiDescription.HttpMethod.Equals("POST", StringComparison.OrdinalIgnoreCase) &&
                !context.ApiDescription.HttpMethod.Equals("PUT", StringComparison.OrdinalIgnoreCase))
            {
                return;
            }
            var fileParameters = context.ApiDescription.ActionDescriptor.Parameters.Where(n => n.ParameterType == typeof(IFormFile)).ToList();

            if (fileParameters.Count < 0)
            {
                //operation.Parameters.Clear();
                return;
            }
            operation.Consumes.Add("multipart/form-data");
            foreach (var fileParameter in fileParameters)
            {
                var parameter = operation.Parameters.Single(n => n.Name == fileParameter.Name);
                operation.Parameters.Remove(parameter);
                operation.Parameters.Add(new NonBodyParameter
                {
                    Name        = parameter.Name,
                    In          = "formData",
                    Description = parameter.Description,
                    Required    = parameter.Required,
                    Type        = "file"
                });
            }
        }
Example #40
0
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var method  = context.MethodInfo;
            var enabled = method.GetCustomAttributes(typeof(EnableQueryAttribute), true).Length > 0;

            if (!enabled)
            {
                return;
            }

            operation.Parameters.Add(new OpenApiParameter {
                Name        = "$select",
                Description = "OData select expression",
                In          = ParameterLocation.Query,
                Required    = false,
                Schema      = new OpenApiSchema {
                    Type = "string"
                }
            });

            operation.Parameters.Add(new OpenApiParameter
            {
                Name        = "$filter",
                Description = "OData filter expression",
                In          = ParameterLocation.Query,
                Required    = false,
                Schema      = new OpenApiSchema {
                    Type = "string"
                }
            });

            operation.Parameters.Add(new OpenApiParameter
            {
                Name        = "$orderby",
                Description = "OData order-by expression",
                In          = ParameterLocation.Query,
                Required    = false,
                Schema      = new OpenApiSchema {
                    Type = "string"
                }
            });

            operation.Parameters.Add(new OpenApiParameter
            {
                Name        = "$skip",
                Description = "OData 'skip' attribute. Usable for paging.",
                In          = ParameterLocation.Query,
                Required    = false,
                Schema      = new OpenApiSchema {
                    Type = "integer"
                }
            });

            operation.Parameters.Add(new OpenApiParameter
            {
                Name        = "$top",
                Description = "OData 'top' attribute. Usable for paging.",
                In          = ParameterLocation.Query,
                Required    = false,
                Schema      = new OpenApiSchema {
                    Type = "integer"
                }
            });

            operation.Parameters.Add(new OpenApiParameter
            {
                Name        = "$apply",
                Description = "OData 'apply' attribute. Usable for grouping, aggregations etc.",
                In          = ParameterLocation.Query,
                Required    = false,
                Schema      = new OpenApiSchema {
                    Type = "string"
                }
            });
        }
            /// <summary>
            /// Called when generating the operation
            /// </summary>
            public void Apply(Operation operation, OperationFilterContext context)
            {
                foreach (var dtParam in operation.Parameters.Where(x => x is NonBodyParameter).Cast<NonBodyParameter>())
                {
                    if (dtParam.In == "modelbinding")
                        dtParam.In = "query";

                    if (dtParam.Format == "date-time")
                        dtParam.Format = "date";
                }
            }