Example #1
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            var actionApiVersionModel = context.ApiDescription.ActionDescriptor?.GetApiVersion();

            if (actionApiVersionModel == null)
            {
                return;
            }

            var documentVersion = context.ApiDescription.ActionDescriptor.Properties["docName"]
                                  .ToString()
                                  .Replace("v", string.Empty);

            var versionParameter = (operation.Parameters.FirstOrDefault(
                                        p => p.Name == "version"
                                        ) as NonBodyParameter);

            if (versionParameter != null)
            {
                versionParameter.Default = documentVersion;
                versionParameter.Enum    = new List <object>()
                {
                    documentVersion
                };
            }
        }
Example #2
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(a => a.GetType() == typeof(AuthorizeAttribute));

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

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

            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
                });
            }
        }
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            operation.Responses.Add("401", new Response {
                Description = "Unauthorized"
            });
            operation.Responses.Add("403", new Response {
                Description = "Forbidden"
            });
            operation.Responses.Add("500", new Response {
                Description = "Internal Server Error"
            });

            operation.Description  = ".Net Core Main API";
            operation.Summary      = "Authenticate to make authorize request to the Main API.";
            operation.ExternalDocs = new ExternalDocs
            {
                Description = "Contact",
                Url         = "https://codepower.io"
            };
            operation.Security = new List <IDictionary <string, IEnumerable <string> > > {
                new Dictionary <string, IEnumerable <string> > {
                    { "Bearer", Enumerable.Empty <string>() }
                }
            };
        }
Example #4
0
        /// <summary>
        /// Applies the filter to the specified operation using the given context.
        /// </summary>
        /// <param name="operation">The operation to apply the filter to.</param>
        /// <param name="context">The current operation filter context.</param>
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/412
            // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/pull/413
            foreach (var parameter in operation.Parameters.OfType <NonBodyParameter>())
            {
                var description = context.ApiDescription.ParameterDescriptions.FirstOrDefault(p => p.Name == parameter.Name);
                if (description == null)
                {
                    return;
                }
                if (parameter.Description == null)
                {
                    parameter.Description = description.ModelMetadata.Description;
                }

                if (description.RouteInfo != null)
                {
                    parameter.Required |= !description.RouteInfo.IsOptional;
                    if (parameter.Default == null)
                    {
                        parameter.Default = description.RouteInfo.DefaultValue;
                    }
                }
                //else
                //{
                //    parameter.Required = description.ModelMetadata.IsRequired;
                //}
            }
        }
Example #5
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors;
            var isAuthorized   = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is AuthorizeFilter);
            var allowAnonymous = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is IAllowAnonymousFilter);

            if (isAuthorized && !allowAnonymous)
            {
                if (operation.Parameters == null)
                {
                    operation.Parameters = new List <IParameter>();
                }

                var pm = new NonBodyParameter
                {
                    Name        = "angel-auth",
                    In          = "header",
                    Description = "授权口令 Access Token",
                    Required    = true,
                    Type        = "string"
                };
#if DEBUG
                pm.Required = false;
#endif

                operation.Parameters.Add(pm);
            }
        }
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            var controllerPermissions = context.ApiDescription.ControllerAttributes()
                                        .OfType <AbpAuthorizeAttribute>()
                                        .Select(attr => attr.Permissions);

            var actionPermissions = context.ApiDescription.ActionAttributes()
                                    .OfType <AbpAuthorizeAttribute>()
                                    .Select(attr => attr.Permissions);

            var permissions = controllerPermissions.Union(actionPermissions).Distinct()
                              .SelectMany(p => p);

            if (permissions.Any())
            {
                operation.Responses.Add("401", new Response {
                    Description = "Unauthorized"
                });
                operation.Responses.Add("403", new Response {
                    Description = "Forbidden"
                });

                operation.Security = new List <IDictionary <string, IEnumerable <string> > >
                {
                    new Dictionary <string, IEnumerable <string> >
                    {
                        { "bearerAuth", permissions }
                    }
                };
            }
        }
Example #7
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            //var controllerPolicies = context.ApiDescription.ControllerAttributes()
            //    .OfType<AuthorizeAttribute>()
            //    .Select(attr => attr.Policy);
            //var actionPolicies = context.ApiDescription.ActionAttributes()
            //    .OfType<AuthorizeAttribute>()
            //    .Select(attr => attr.Policy);
            //var policies = controllerPolicies.Union(actionPolicies).Distinct();

            //var requiredClaimTypes = policies
            //    .Select(x => this.authorizationOptions.Value.GetPolicy(x))
            //    .SelectMany(x => x.Requirements)
            //    .OfType<ClaimsAuthorizationRequirement>()
            //    .Select(x => x.ClaimType);

            //if (requiredClaimTypes.Any())
            //{
            //    operation.Responses.Add("401", new Response { Description = "Unauthorized" });
            //    operation.Responses.Add("403", new Response { Description = "Forbidden" });

            //    operation.Security = new List<IDictionary<string, IEnumerable<string>>>();
            //    operation.Security.Add(
            //        new Dictionary<string, IEnumerable<string>>
            //        {
            //        { "oauth2", requiredClaimTypes }
            //        });
            //}
        }
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            string token = "";

            if (operation == null)
            {
                return;
            }

            if (operation.Parameters == null)
            {
                operation.Parameters = new List <IParameter>();
            }

            if (!context.ApiDescription.RelativePath.ToLower().EndsWith("login"))
            {
                var parameter = new NonBodyParameter
                {
                    Description = "Authorization token (Bearer)",
                    @In         = "header",
                    Name        = "Authorization",
                    Default     = "Bearer " + token,
                    Required    = true,
                    Type        = "string"
                };
                operation.Parameters.Add(parameter);
            }
        }
Example #9
0
        /// <summary>
        /// 应用过滤器
        /// </summary>
        /// <param name="operation"></param>
        /// <param name="context"></param>
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            #region 文件上传处理
            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"
                });
            }
            #endregion
        }
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            // Check for authorize attribute
            var hasAuthorize = context.MethodInfo.DeclaringType.GetCustomAttributes(true)
                               .Union(context.MethodInfo.GetCustomAttributes(true))
                               .OfType <AuthorizeAttribute>().Any();

            if (hasAuthorize)
            {
                if (operation.Parameters == null)
                {
                    operation.Parameters = new List <IParameter>();
                }
                operation.Responses.Add("401", new Response {
                    Description = "Unauthorized"
                });
                operation.Responses.Add("403", new Response {
                    Description = "Forbidden"
                });

                operation.Security = new List <IDictionary <string, IEnumerable <string> > >();
                //Add JWT bearer type
                operation.Security.Add(new Dictionary <string, IEnumerable <string> >
                {
                    { "Bearer", new string[] { } }
                });
            }
        }
Example #11
0
 public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
 {
     operation.Produces.Clear();
     operation.Produces.Add("application/vnd.api+json");
     operation.Consumes.Clear();
     operation.Consumes.Add("application/vnd.api+json");
 }
Example #12
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            if (context.SchemaRegistry.Definitions.Count == 4)
            {
                _oldDefinitionList.Clear();
            }

            operation.Description += context.SchemaRegistry.Definitions
                                     .Where(x => !_oldDefinitionList.Contains(x.Key))
                                     .SelectMany(x => x.Value.Properties)
                                     .Where(ps => ps.Value.Enum != null && ps.Value.Enum.Any())
                                     .Where(x => x.Value.Enum.First().GetType() != typeof(ResultCode))
                                     .Select(x => new EnumDescriber
            {
                Name = x.Key,
                Info = EnumInfo(x.Key, x.Value.Enum),
            })
                                     .Concat(operation.Parameters
                                             .OfType <NonBodyParameter>()
                                             .Where(x => x.Enum != null && x.Enum.Any())
                                             .Select(nonBodyParameter => new EnumDescriber
            {
                Name = nonBodyParameter.Name,
                Info = EnumInfo(nonBodyParameter.Name, nonBodyParameter.Enum)
            }))
                                     .GroupBy(x => x.Name.ToLower())
                                     .Select(x => x.First())
                                     .Select(x => x.Info)
                                     .JoinStr(string.Empty);

            _oldDefinitionList.AddRange(context.SchemaRegistry.Definitions.Select(x => x.Key));
        }
Example #13
0
        /// <summary>
        /// Applies the filter to the specified operation using the given context.
        /// </summary>
        /// <param name="operation">The operation to apply the filter to.</param>
        /// <param name="context">The current operation filter context.</param>
        void IOperationFilter.Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            var apiDescription = context.ApiDescription;

            operation.Deprecated |= apiDescription.IsDeprecated();

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

            // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/412
            // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/pull/413
            foreach (var parameter in operation.Parameters.OfType <NonBodyParameter>())
            {
                var description = apiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name);

                if (parameter.Description == null)
                {
                    parameter.Description = description.ModelMetadata?.Description;
                }

                if (parameter.Default == null)
                {
                    parameter.Default = description.DefaultValue;
                }

                parameter.Required |= description.IsRequired;
            }
        }
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            // Check for authorize attribute



            var hasAuthorize = context.ApiDescription.ControllerAttributes().OfType <AuthorizeAttribute>().Any() ||
                               context.ApiDescription.ActionAttributes().OfType <AuthorizeAttribute>().Any();

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

                operation.Security = new List <IDictionary <string, IEnumerable <string> > >();
                operation.Security.Add(new Dictionary <string, IEnumerable <string> >
                {
                    { "oauth2", new [] { "order" } }
                });
            }
        }
Example #15
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            var allremoveParams = operation.Parameters.Where(a => a.Name.Contains(".")
                                                             ).ToList();

            foreach (var obj in allremoveParams)
            {
                operation.Parameters.Remove(obj);
            }
        }
 public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
 {
     if (operation.Parameters == null)
     {
         operation.Parameters = new List <IParameter>();
     }
     operation.Parameters.Add(new NonBodyParameter()
     {
         Name = "AccessToken"
     });
 }
Example #17
0
 /// <summary>
 /// Swagger過濾邏輯
 /// </summary>
 /// <param name="operation">操作</param>
 /// <param name="context">內容</param>
 public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
 {
     if ((context.MethodInfo.GetCustomAttributes <AuthorizeAttribute>().Count() > 0 ||
          context.MethodInfo.DeclaringType.GetCustomAttributes <AuthorizeAttribute>().Count() > 0) &&
         context.MethodInfo.GetCustomAttributes <AllowAnonymousAttribute>().Count() == 0 &&
         context.MethodInfo.DeclaringType.GetCustomAttributes <AllowAnonymousAttribute>().Count() == 0
         )
     {
         operation.Summary = "🔐" + operation.Summary;
     }
 }
Example #18
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            #region header里增加token参数
            var versionParameter = operation.Parameters.Single(p => p.Name == "version");
            operation.Parameters.Remove(versionParameter);
            var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors;
            //查找模型绑定的TokenModel参数
            var isExist = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is TokenValidateAttribute);
            //存在,用token代替
            if (isExist)
            {
                if (operation.Parameters == null)
                {
                    operation.Parameters = new List <IParameter>();
                }
                context.ApiDescription.ParameterDescriptions
                .Where(desc => desc.ParameterDescriptor != null && desc.ParameterDescriptor.ParameterType != null && desc.ParameterDescriptor.ParameterType == typeof(TokenModel))
                .ToList()
                .ForEach(param =>
                {
                    var toRemove = operation.Parameters
                                   .FirstOrDefault(p => p.Name == param.Name);
                    //删除
                    if (null != toRemove)
                    {
                        operation.Parameters.Remove(toRemove);
                    }
                });
                //添加
                operation.Parameters.Add(new NonBodyParameter
                {
                    Name        = "token",
                    In          = "header",
                    Description = "@Order=2,access token",
                    Required    = true,
                    Type        = "string",
                });
            }
            #endregion

            #region 参数排序
            var parames = operation.Parameters.OrderBy(p => p, new ParameterSortComparer()).ToList();
            foreach (var parameter in parames)
            {
                SetDescription(parameter);
            }
            operation.Parameters.Clear();
            operation.Parameters = parames;
            #endregion
        }
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                operation.Parameters = new List <IParameter>();
            }

            operation.Parameters.Add(new HeaderParameter()
            {
                Name     = "api-key",
                In       = "header",
                Type     = "string",
                Required = true
            });
        }
 public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
 {
     if (operation.Parameters == null)
     {
         operation.Parameters = new List <IParameter>();
     }
     operation.Parameters.Add(new NonBodyParameter()
     {
         Name        = "token",
         In          = "header",
         Type        = "string",
         Description = "token认证信息",
         Required    = true
     });
 }
        void IOperationFilter.Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            var param = new Param();

            param.Name        = "authorization";
            param.In          = "header";
            param.Description = "JWT Token";
            param.Required    = false;
            param.Type        = "string";
            if (operation.Parameters == null)
            {
                operation.Parameters = new List <IParameter>();
            }
            operation.Parameters.Add(param);
        }
Example #22
0
        /// <summary>
        /// Apply function
        /// </summary>
        /// <param name="swaggerDocument">swaggerDocument parameter</param>
        /// <param name="documentFilter">documentFilter parameter </param>
        public void Apply(Operation swaggerDocument, OperationFilterContext documentFilter)
        {
            if (swaggerDocument.Parameters == null)
            {
                swaggerDocument.Parameters = new List <IParameter>();
            }

            swaggerDocument.Parameters.Add(new NonBodyParameter
            {
                Name     = "Authorization",
                In       = "header",
                Type     = "string",
                Required = true
            });
        }
 public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
 {
     if (operation.OperationId.ToLower() == "apivaluesuploadput")
     {
         operation.Parameters.Clear();
         operation.Parameters.Add(new NonBodyParameter {
             Name        = "file",
             In          = "formData",
             Description = "Upload File",
             Required    = true,
             Type        = "file"
         });
         operation.Consumes.Add("multipart/form-data");
     }
 }
Example #24
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                operation.Parameters = new List <IParameter>();
            }

            operation.Parameters.Add(new NonBodyParameter
            {
                Name     = "authorization",
                In       = "header",
                Type     = "string",
                Required = false
            });
        }
Example #25
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation,
                          Swashbuckle.AspNetCore.SwaggerGen.OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                operation.Parameters = new List <Swashbuckle.AspNetCore.Swagger.IParameter>();
            }

            operation.Parameters.Add(new Swashbuckle.AspNetCore.Swagger.NonBodyParameter
            {
                Name     = "CompanyId",
                In       = "header",
                Type     = "string",
                Required = true
            });
        }
Example #26
0
 public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
 {
     if (operation.OperationId.ToLower(CultureInfo.CurrentCulture) == "apitopicscreateresourcesuploadpost")
     {
         operation.Parameters.Clear();
         operation.Parameters.Add(new NonBodyParameter
         {
             Name        = "uploadedFile",
             In          = "formData",
             Description = "Upload File",
             Required    = true,
             Type        = "file"
         });
         operation.Consumes.Add("multipart/form-data");
     }
 }
Example #27
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                operation.Parameters = new List <IParameter>();
            }

            operation.Parameters.Add(new NonBodyParameter
            {
                In          = "header",
                Name        = "Authorization",
                Description = "Auth Token.",
                Required    = true,
                Type        = "string",
                Default     = $"{_authSchemeName} ###"
            });
        }
Example #28
0
        /// <summary>
        /// Swagger過濾邏輯
        /// </summary>
        /// <param name="operation">操作</param>
        /// <param name="context">內容</param>
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            var filesParams = context.ApiDescription.ActionDescriptor
                              .Parameters
                              .Where(x => x.ParameterType == typeof(IFormFileCollection));

            if (operation.Parameters?.Count > 0)
            {
                var parameters2 = operation.Parameters
                                  .Where(x => filesParams.Any(y => x.Name == y.Name));

                foreach (NonBodyParameter parameter in parameters2)
                {
                    parameter.Type = "file";
                }
            }
        }
Example #29
0
        public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context)
        {
            foreach (var parameter in operation.Parameters.OfType <NonBodyParameter>())
            {
                var description = context.ApiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name);

                if (parameter.Description == null)
                {
                    parameter.Description = description.ModelMetadata.Description;
                }

                if (parameter.Default == null)
                {
                    parameter.Default = description.RouteInfo.DefaultValue;
                }
                parameter.Required |= !description.RouteInfo.IsOptional;
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="operation"></param>
        /// <param name="context"></param>
        public void Apply(Operation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                operation.Parameters = new List <IParameter>();
            }

            if (context.MethodInfo.GetCustomAttributes(typeof(AllowAnonymousAttribute), true).Length == 0)
            {
                operation.Parameters.Add(new NonBodyParameter()
                {
                    Name     = "Authorization", //添加Authorization头部参数
                    In       = "header",
                    Type     = "string",
                    Required = false
                });
            }
        }