public void Apply(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 tokenParameter = new NonBodyParameter { Type = "string", In = "header", Name = "Authorization", Description = "token", Default = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJsb2NhbGhvc3QiLCJhdXRob3JpdHkiOiJhdXRob3JpdHkiLCJmb28iOiJiYXIiLCJpc3MiOiJ3ZSB0aGUgbWFueSJ9.bm77vM2yQXc93vnc44Rqv_Rkm5OszFa9daM37db6EBg", Required = true }; operation.Parameters.Add(tokenParameter); } }
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); } }
private void RemoveVersionParamFrom(Operation operation) { if (operation == null || operation.Parameters == null) return; var versionParam = operation.Parameters.FirstOrDefault(param => param.Name == "version"); if (versionParam == null) return; operation.Parameters.Remove(versionParam) ; }
/// <summary> /// /// </summary> /// <param name="operation"></param> /// <param name="context"></param> public void Apply(Operation operation, OperationFilterContext context) { if (operation.Parameters == null) return; foreach (IParameter param in operation.Parameters) { if (param.In == "modelbinding") param.In = "query"; } }
public void Apply_SetsSummaryAndDescription_FromSummaryAndRemarksTags() { var operation = new Operation(); var filterContext = FilterContextFor(nameof(ActionFixtures.AnnotatedWithSummaryAndRemarksXml)); Subject().Apply(operation, filterContext); Assert.Equal("summary for AnnotatedWithSummaryAndRemarksXml", operation.Summary); Assert.Equal("remarks for AnnotatedWithSummaryAndRemarksXml", operation.Description); }
public void Apply_DelegatesToSpecifiedFilter_IfActionAnnotatedWithFilterAttribute() { var operation = new Operation { OperationId = "foobar" }; var filterContext = FilterContextFor(nameof(ActionFixtures.AnnotatedWithSwaggerOperationFilter)); Subject().Apply(operation, filterContext); Assert.NotEmpty(operation.Extensions); }
private static void ApplyParamComments(Operation operation, XPathNavigator methodNode) { if (operation.Parameters == null) return; var paramNodes = methodNode.Select(ParameterExpression); while (paramNodes.MoveNext()) { var paramNode = paramNodes.Current; var parameter = operation.Parameters .SingleOrDefault(param => param.Name == paramNode.GetAttribute("name", "")); if (parameter != null) parameter.Description = paramNode.ExtractContent(); } }
public void Apply_AssignsProperties_FromActionAttribute() { var operation = new Operation { OperationId = "foobar" }; var filterContext = FilterContextFor(nameof(ActionFixtures.AnnotatedWithSwaggerOperation)); Subject().Apply(operation, filterContext); Assert.Equal("CustomOperationId", operation.OperationId); Assert.Equal(new[] { "customTag" }, operation.Tags.ToArray()); Assert.Equal(new[] { "customScheme" }, operation.Schemes.ToArray()); }
public void Apply_SetsParameterDescriptions_FromParamTags() { var operation = new Operation { Parameters = new List<IParameter> { new NonBodyParameter { Name = "param1" }, new NonBodyParameter { Name = "param2" } } }; var filterContext = FilterContextFor(nameof(ActionFixtures.AnnotatedWithParamsXml)); Subject().Apply(operation, filterContext); Assert.Equal("description for param1", operation.Parameters.First().Description); Assert.Equal("description for param2", operation.Parameters.Last().Description); }
public void Apply_AddsResponses_FromActionAttributes() { var operation = new Operation { Responses = new Dictionary<string, Response> { { "200", new Response() } } }; var filterContext = FilterContextFor(nameof(FakeActions.AnnotatedWithSwaggerResponses)); Subject().Apply(operation, filterContext); Assert.Equal(new[] { "200", "400" }, operation.Responses.Keys.ToArray()); Assert.Equal("Action defined 200", operation.Responses["200"].Description); Assert.Equal("Action defined 400", operation.Responses["400"].Description); }
public void Apply_RemovesExistingResponses_IfControllerAnnotatedWithRemoveDefaultsAttribute() { var operation = new Operation { Responses = new Dictionary<string, Response> { { "200", new Response() } } }; var filterContext = FilterContextFor( nameof(ActionFixtures.ReturnsActionResult), nameof(ControllerFixtures.AnnotatedWithSwaggerResponseRemoveDefaults) ); Subject().Apply(operation, filterContext); Assert.Empty(operation.Responses); }
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 = _xmlNavigator.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); }
public void Apply(Operation operation, OperationFilterContext context) { var controllerActionDescriptor = context.ApiDescription.ActionDescriptor as ControllerActionDescriptor; if (controllerActionDescriptor == null) return; var commentId = XmlCommentsIdHelper.GetCommentIdForMethod(controllerActionDescriptor.MethodInfo); var methodNode = _xmlNavigator.SelectSingleNode(string.Format(MemberXPath, commentId)); if (methodNode == null) return; var summaryNode = methodNode.SelectSingleNode(SummaryTag); if (summaryNode != null) operation.Summary = summaryNode.ExtractContent(); var remarksNode = methodNode.SelectSingleNode(RemarksTag); if (remarksNode != null) operation.Description = remarksNode.ExtractContent(); ApplyParamComments(operation, methodNode); }
public void Apply_FavorsActionAttributes_IfControllerAndActionBothAnnotatedWithSameStatusCode() { var operation = new Operation { Responses = new Dictionary<string, Response> { { "200", new Response() } } }; var filterContext = FilterContextFor( nameof(ActionFixtures.AnnotatedWithSwaggerResponses), nameof(ControllerFixtures.AnnotatedWithSwaggerResponses) ); Subject().Apply(operation, filterContext); Assert.Equal(new[] { "200", "400" }, operation.Responses.Keys.ToArray()); Assert.Equal("Action defined 200", operation.Responses["200"].Description); Assert.Equal("Action defined 400", operation.Responses["400"].Description); }
public void Apply_DelegatesToSpecifiedFilter_IfControllerAnnotatedWithFilterAttribute() { var operation = new Operation { OperationId = "foobar" }; var filterContext = FilterContextFor( nameof(FakeActions.ReturnsActionResult), nameof(FakeControllers.AnnotatedWithSwaggerOperationFilter) ); Subject().Apply(operation, filterContext); Assert.NotEmpty(operation.Extensions); }
public void Apply(Operation operation, OperationFilterContext contex) { operation.Extensions.Add("X-property1", "value"); }
public void Apply(Operation operation, OperationFilterContext context) { operation.Extensions.Add("x-purpose", "test"); }