/// <summary>
        /// Generates an URI-friendly ID for the <see cref="T:System.Web.Http.Description.ApiDescription" />. E.g. "Get-Values-id" instead of "GetValues/{id}?name={name}"
        /// </summary>
        /// <param name="description">The <see cref="T:System.Web.Http.Description.ApiDescription" />.</param>
        /// <param name="version">The version of the API controller, if any.</param>
        /// <returns>
        /// Returns a URL-friendly id of the API.
        /// </returns>
        /// <remarks>The current version removes all optional parameters.</remarks>
        public static string GetFriendlyId(this System.Web.Http.Description.ApiDescription description, string version = "")
        {
            string path = description.RelativePath;

            string[] urlParts  = path.Split('?');
            string   localPath = urlParts[0].EndsWith("/") ?
                                 urlParts[0].Substring(0, urlParts[0].Length - 1).ToLower() :
                                 urlParts[0].ToLower();
            string queryKeyString = null;

            StringBuilder friendlyPath = new StringBuilder();

            friendlyPath.AppendFormat("{0}-{1}",
                                      description.HttpMethod.Method,
                                      localPath.Replace("/", "-").Replace("{", String.Empty).Replace("}", String.Empty));
            if (queryKeyString != null)
            {
                friendlyPath.AppendFormat("_{0}", queryKeyString);
            }
            if (!string.IsNullOrEmpty(version))
            {
                friendlyPath.AppendFormat("-{0}", version);
            }
            return(friendlyPath.ToString());
        }
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            if (operation == null)
            {
                throw new ArgumentNullException("operation");
            }

            if (apiDescription == null)
            {
                throw new ArgumentNullException("apiDescription");
            }

            Collection <IFilter>  filters         = apiDescription.ActionDescriptor.ControllerDescriptor.GetFilters();
            IEnumerable <IFilter> mobileAppFilter = filters.Where(f => typeof(MobileAppControllerAttribute).IsAssignableFrom(f.GetType()));

            if (mobileAppFilter.Any())
            {
                if (operation.parameters == null)
                {
                    operation.parameters = new List <Parameter>();
                }

                operation.parameters.Add(new Parameter
                {
                    name     = "ZUMO-API-VERSION",
                    @in      = "header",
                    type     = "string",
                    required = true,
                    @default = "2.0.0"
                });
            }
        }
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            if (operation.parameters == null)
            {
                operation.parameters = new List <Parameter>();
            }
            var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline();
            //判断是否添加方法过滤器
            var isActionFilter = filterPipeline.Select(filterInfo => filterInfo.Instance).Any(filter => filter is AuthAttribute);
            //判断是否允许匿名方法
            var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes <AllowAnonymousAttribute>().Any();

            if (isActionFilter && !allowAnonymous)
            {
                operation.parameters.Add(new Parameter {
                    name = "appkey", @in = "header", description = "appkey", required = false, type = "string", @default = "test"
                });
                operation.parameters.Add(new Parameter {
                    name = "token", @in = "header", description = "token", required = false, type = "string", @default = "test"
                });
                operation.parameters.Add(new Parameter {
                    name = "timestamp", @in = "header", description = "时间戳", required = false, type = "string", @default = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                });
                operation.parameters.Add(new Parameter {
                    name = "sign", @in = "header", description = "签名", required = false, type = "string", @default = "test"
                });
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="operation"></param>
        /// <param name="schemaRegistry"></param>
        /// <param name="apiDescription"></param>
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            if (operation.parameters == null)
            {
                operation.parameters = new List <Parameter>();
            }

            //operation.parameters.Add(new Parameter
            //{
            //    //apptype
            //    @in = "header",
            //    name = "apptype",//header name
            //                     //@default = "0",//0:Android;1:IOS
            //    description = "应用类型0:未知; 1:Android;2:IOS",
            //    required = true,
            //    type = "string",
            //    @enum = new List<object>() { "0", "1" }
            //});

            //operation.parameters.Add(new Parameter
            //{
            //    @in = "header",
            //    name = "ciphertext",//header name
            //    @default = "ciphertext",
            //    description = "密文(app调用时忽略此参数)",
            //    required = true,
            //    type = "string",
            //});
        }
Ejemplo n.º 5
0
            public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
            {
                if (operation.parameters == null)
                {
                    operation.parameters = new List <Parameter>();
                }
                if (System.Configuration.ConfigurationManager.AppSettings["tokenAuth"].ToLower() == "false")
                {
                    return;
                }
                var  attributesA  = apiDescription.ActionDescriptor.GetCustomAttributes <AllowAnonymousAttribute>().OfType <AllowAnonymousAttribute>();
                bool isAnonymousA = attributesA.Any(a => a is AllowAnonymousAttribute);

                if (isAnonymousA)
                {
                    return;
                }
                operation.parameters.Add(new Parameter()
                {
                    name        = "Authorization",
                    @in         = "header",
                    type        = "string",
                    description = "tokenхож╓пео╒",
                    required    = true
                });
            }
 public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
 {
     // Add a default response code
     if (operation != null && operation.responses != null && operation.responses.ContainsKey("200"))
     {
         operation.responses.Add("default", operation.responses["200"]);
     }
 }
Ejemplo n.º 7
0
 public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
 {
     operation.parameters = operation.parameters ?? new List <Parameter>();
     operation.parameters.Add(new Parameter
     {
         name        = Name,
         description = Description,
         @in         = In,
         required    = true,
         type        = "string"
     });
 }
Ejemplo n.º 8
0
            public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
            {
                var module = _packageService.GetModules().Where(x => x.ModuleInfo.ModuleInstance != null).FirstOrDefault(x => apiDescription.ActionDescriptor.ControllerDescriptor.ControllerType.Assembly == x.ModuleInfo.ModuleInstance.GetType().Assembly);

                if (module != null)
                {
                    operation.tags = new string[] { module.Title };
                }
                else if (apiDescription.ActionDescriptor.ControllerDescriptor.ControllerType.Assembly.GetName().Name == "VirtoCommerce.Platform.Web")
                {
                    operation.tags = new string[] { "VirtoCommerce platform" };
                }
            }
Ejemplo n.º 9
0
        public static bool ResolveVersionSupportByRouteConstraint(System.Web.Http.Description.ApiDescription apiDesc, string targetApiVersion)
        {
            //var versionConstraint = (apiDesc.Route.Constraints.ContainsKey("apiVersion"))
            //    ? apiDesc.Route.Constraints["apiVersion"] as RegexRouteConstraint
            //    : null;

            //return (versionConstraint == null)
            //    ? false
            //    : versionConstraint.Pattern.Split('|').ToList().Contains(targetApiVersion);


            return(apiDesc.Route.RouteTemplate.Contains(targetApiVersion));
        }
Ejemplo n.º 10
0
        /// <summary>
        ///
        /// </summary>
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            var attributes  = apiDescription.ActionDescriptor.GetCustomAttributes <ResourceAuthorizeAttribute>();
            var permissions = new List <string>();

            foreach (var attribute in attributes)
            {
                var permissionString = String.Format("Requires <strong>{0}</strong> permission on <strong>{1}</strong> resource type.",
                                                     attribute.Permission.PermissionName,
                                                     attribute.Permission.ResourceType);
                operation.description += permissionString;
            }
        }
 public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
 {
     if (operation.parameters == null)
     {
         operation.parameters = new List <Parameter>();
     }
     operation.parameters.Add(new Parameter
     {
         name        = "Authorization",
         @in         = "header",
         description = "access token",
         required    = false,
         type        = "string"
     });
 }
Ejemplo n.º 12
0
 public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
 {
     //如果方法名里包含upload,则提供一个参数名为file类型为file的参数
     if (apiDescription.ActionDescriptor.ActionName.Contains("Upload"))
     {
         operation.consumes.Add("application/form-data");
         operation.parameters.Add(new Parameter
         {
             name     = "file",
             @in      = "formData",
             required = true,
             type     = "file"
         });
     }
 }
Ejemplo n.º 13
0
        /// <summary>
        /// Swagger生成token认证
        /// </summary>
        /// <param name="operation"></param>
        /// <param name="schemaRegistry"></param>
        /// <param name="apiDescription"></param>
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            if (operation.parameters == null)
            {
                operation.parameters = new List <Parameter>();
            }
            //判断是否添加权限过滤器
            var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline();
            //判断是否允许匿名方法
            var isAuthorized   = filterPipeline.Select(filterInfo => filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);
            var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes <AllowAnonymousAttribute>().Any();

            if (isAuthorized && !allowAnonymous)
            {
                operation.parameters.Add(new Parameter {
                    name = "Authorization", @in = "header", description = "Token", required = false, type = "string"
                });
            }
        }
Ejemplo n.º 14
0
 public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
 {
     //FORCE X-MobilePatronsApp-AUTH-TOKEN IN ALL CONTROLLERS EXCEPT:
     if ((apiDescription.ActionDescriptor).ControllerDescriptor.ControllerType.Name != "AccountController" &&
         (apiDescription.ActionDescriptor).ControllerDescriptor.ControllerType.Name != "LoginController" &&
         (apiDescription.ActionDescriptor).ControllerDescriptor.ControllerType.Name != "ValuesController" &&
         (apiDescription.ActionDescriptor).ControllerDescriptor.ControllerType.Name != "PasswordController" &&
         !apiDescription.RelativePath.Equals("Login/Post"))
     {
         if (null == operation.parameters)
         {
             operation.parameters = new List <Parameter>();
         }
         // allow user auth token to be sent
         operation.parameters.Add(new Parameter()
         {
             name = "X-PATRONS-AUTH-TOKEN", type = "string", @in = "header", required = true, description = "Identifies logged-in user.  Get this from /Account/Login result Token."
         });
     }
 }
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            // Add a dynamic enumeration of the Queues

            // of course, you can also search based on the presence of custom attributes
            var param = operation.parameters.FirstOrDefault(x => x.name.Equals("queueName"));

            if (param != null)
            {
                if (param.@enum == null)
                {
                    param.@enum = new System.Collections.Generic.List <object>();
                }

                foreach (string queueName in this.GetQueues())
                {
                    [email protected](queueName);
                }
            }
        }
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            if (operation.parameters == null)
            {
                operation.parameters = new List <Parameter>();
            }

            operation.parameters.Add(new Parameter
            {
                name        = "Authorization",
                @in         = "header",
                required    = false,
                description = "access bearer token",
                type        = "String",
                schema      = new Schema
                {
                    type     = "String",
                    @default = new OpenApiString("Bearer ")
                }
            });
        }
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            if (operation.operationId.IndexOf("Trigger", StringComparison.InvariantCultureIgnoreCase) >= 0)
            {
                // this is a possible trigger
                var triggerStateParam = operation.parameters.FirstOrDefault(x => x.name.Equals("triggerState"));
                if (triggerStateParam != null)
                {
                    if (triggerStateParam.vendorExtensions == null)
                    {
                        triggerStateParam.vendorExtensions = new Dictionary <string, object>();
                    }

                    // add 2 vendor extensions
                    // x-ms-visibility: set to 'internal' to signify this is an internal field
                    // x-ms-scheduler-recommendation: set to a value that logic app can use
                    triggerStateParam.vendorExtensions.Add("x-ms-visibility", "internal");
                    triggerStateParam.vendorExtensions.Add("x-ms-scheduler-recommendation",
                                                           "@coalesce(triggers()?.outputs?.body?['triggerState'], '')");
                }
            }
        }
Ejemplo n.º 18
0
        private static bool ResolveVersionSupportByRouteConstraint(System.Web.Http.Description.ApiDescription apiDesc, string targetApiVersion)
        {
            var attr = apiDesc.ActionDescriptor.GetCustomAttributes <VersionRouteAttribute>().FirstOrDefault();

            if (attr == null)
            {
                if (targetApiVersion == "1")
                {
                    return(true);
                }
                return(false);
            }

            int targetVersion;

            if (int.TryParse(targetApiVersion, out targetVersion))
            {
                return(attr.AllowedVersion == targetVersion);
            }
            ;

            return(false);
        }
Ejemplo n.º 19
0
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            if (operation.operationId.IndexOf("Trigger", StringComparison.InvariantCultureIgnoreCase) < 0)
            {
                return;
            }

            var triggerStateParam = operation.parameters.FirstOrDefault(x => x.name.Equals("triggerId"));

            if (triggerStateParam == null)
            {
                return;
            }

            if (triggerStateParam.vendorExtensions == null)
            {
                triggerStateParam.vendorExtensions = new Dictionary <string, object>();
            }

            triggerStateParam.vendorExtensions.Add("x-ms-summary", "Trigger ID");
            triggerStateParam.vendorExtensions.Add("x-ms-visibility", "internal");
            triggerStateParam.vendorExtensions.Add("x-ms-scheduler-recommendation", "@workflow().name");
        }
Ejemplo n.º 20
0
 /// <summary>
 /// Remove Swagger Defaults
 /// </summary>
 /// <param name="operation">Operation</param>
 /// <param name="schemaRegistry">Schema</param>
 /// <param name="apiDescription">Description for the api</param>
 public void Apply(Swashbuckle.Swagger.Operation operation, Swashbuckle.Swagger.SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
 {
     //not Work
     operation.responses.Clear();
 }
Ejemplo n.º 21
0
 public void Apply(Operation operation, DataTypeRegistry dataTypeRegistry, System.Web.Http.Description.ApiDescription apiDescription)
 {
     operation.ResponseMessages.Add(new ResponseMessage {
         Code = 200, Message = "It's all good!"
     });
 }
        /// <summary>
        /// Filter and add Security JWT definition to all accion with has "AuthorizaAttribute"
        /// </summary>
        /// <param name="operation">Operation</param>
        /// <param name="schemaRegistry">Schema</param>
        /// <param name="apiDescription">Description for the api</param>
        public void Apply(Swashbuckle.Swagger.Operation operation, Swashbuckle.Swagger.SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            if (
                apiDescription.ActionDescriptor.GetFilters().OfType <AuthorizeAttribute>().Any() ||
                apiDescription.ActionDescriptor.ControllerDescriptor.GetFilters().OfType <AuthorizeAttribute>().Any()
                )
            {
                if (operation.security == null)
                {
                    operation.security = new List <IDictionary <string, IEnumerable <string> > >();
                }

                var oAuthRequirements = new Dictionary <string, IEnumerable <string> >();
                oAuthRequirements.Add(_securityDefinitionNameSchema, new List <string>());

                operation.security.Add(oAuthRequirements);
            }
        }
Ejemplo n.º 23
0
 public ApiDescription(System.Web.Http.Description.ApiDescription apiDescription)
 {
     Description = apiDescription;
 }
Ejemplo n.º 24
0
 private string GroupAction(System.Web.Http.Description.ApiDescription apiDescriptor)
 {
     return(apiDescriptor.ActionDescriptor.ControllerDescriptor.ControllerName);
 }
        public void Apply(Swashbuckle.Swagger.Operation operation, Swashbuckle.Swagger.SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
        {
            #region Add Documentation Nodes
            string TModel = null;
            bool   isBlueprintEndpoint = false;


            Type BlueprintController = apiDescription.ActionDescriptor.ControllerDescriptor.ControllerType.BaseType;
            if (BlueprintController.IsGenericType)
            {
                Type modelType = BlueprintController.GetGenericArguments()[0];
                TModel = modelType.Name;

                //Remove all Auto DB generated Properties
                CleanModel(schemaRegistry, modelType);

                isBlueprintEndpoint = true;
            }

            //Has Queryable Endpoint Mark??
            if (apiDescription.ActionDescriptor.GetCustomAttributes <Swashbuckle.Swagger.Annotations.QueryableEndpoint>().Any())
            {
                var attr = apiDescription.ActionDescriptor.GetCustomAttributes <Swashbuckle.Swagger.Annotations.QueryableEndpoint>().First();

                if (attr.QueryableType != null)
                {
                    var EnumerableType = attr.QueryableType;

                    //Remove all Auto DB generated Properties
                    if (!typeof(System.Collections.IEnumerable).IsAssignableFrom(EnumerableType))
                    {
                        //Convert to List (Queryable ALWAYS Return a List)
                        EnumerableType = typeof(List <>).MakeGenericType(attr.QueryableType);
                    }

                    CleanModel(schemaRegistry, EnumerableType);
                    operation.responses.Clear();

                    var statusCode = "200";
                    operation.responses[statusCode] = new Swashbuckle.Swagger.Response
                    {
                        schema = (EnumerableType != null) ? schemaRegistry.GetOrRegister(EnumerableType) : null
                    };
                }

                isBlueprintEndpoint = true;
            }



            if (!isBlueprintEndpoint)
            {
                return;
            }

            if (apiDescription.HttpMethod == System.Net.Http.HttpMethod.Get)
            {
                operation.summary     = String.Format(Gale.REST.Resources.SwasbuckleExtension_Blueprint_GET, TModel);
                operation.description = String.Format(Gale.REST.Resources.SwasbuckleExtension_Blueprint_GET_ImplementationNotes, Gale.REST.Resources.GALE_DOCS_SITE);

                #region OData Parameter's
                operation.parameters = new List <Swashbuckle.Swagger.Parameter>();
                operation.parameters.Add(new Swashbuckle.Swagger.Parameter()
                {
                    name        = "$select",
                    description = "Fields selector (comma separated)",
                    @in         = "query",
                    required    = false,
                    type        = "string"
                });

                operation.parameters.Add(new Swashbuckle.Swagger.Parameter()
                {
                    name        = "$filter",
                    description = "collection of filter's (comma separated): {field} {operator} {value}",
                    @in         = "query",
                    required    = false,
                    type        = "string"
                });

                operation.parameters.Add(new Swashbuckle.Swagger.Parameter()
                {
                    name        = "$orderBy",
                    description = "Order by clause: {field} (asc|desc)",
                    @in         = "query",
                    required    = false,
                    type        = "string"
                });

                operation.parameters.Add(new Swashbuckle.Swagger.Parameter()
                {
                    name        = "$limit",
                    description = "Limit the number of records returned",
                    @in         = "query",
                    required    = false,
                    type        = "number"
                });

                operation.parameters.Add(new Swashbuckle.Swagger.Parameter()
                {
                    name        = "$offset",
                    description = "Skip records before returning anything",
                    @in         = "query",
                    required    = false,
                    type        = "number"
                });
                #endregion
            }
            else if (apiDescription.HttpMethod == System.Net.Http.HttpMethod.Post)
            {
                operation.summary     = String.Format(Gale.REST.Resources.SwasbuckleExtension_Blueprint_POST, TModel);;
                operation.description = String.Format(Gale.REST.Resources.SwasbuckleExtension_Blueprint_POST_ImplementationNotes, TModel);
            }
            else if (apiDescription.HttpMethod == System.Net.Http.HttpMethod.Put)
            {
                operation.summary = String.Format(Gale.REST.Resources.SwasbuckleExtension_Blueprint_PUT, TModel);;
            }
            else if (apiDescription.HttpMethod == System.Net.Http.HttpMethod.Delete)
            {
                operation.summary = String.Format(Gale.REST.Resources.SwasbuckleExtension_Blueprint_DELETE, TModel);;
            }
            #endregion
        }