/// <summary> /// Calls <see cref="SwaggerDocsConfig.DescribeAllEnumsAsStrings(bool)"/> /// | Make it compatible with owin branching /// | Ignores CancellationToken parameter type /// </summary> public static SwaggerDocsConfig ApplyDefaultApiConfig(this SwaggerDocsConfig doc, HttpConfiguration webApiConfig) { doc.DescribeAllEnumsAsStrings(); doc.RootUrl(req => new Uri(req.RequestUri, req.GetOwinContext().Request.PathBase.Value).ToString()); doc.OperationFilter <OpenApiIgnoreParameterTypeOperationFilter <CancellationToken> >(); doc.OperationFilter <DefaultAuthorizationOperationFilter>(); AppEnvironment appEnv = DefaultAppEnvironmentProvider.Current.GetActiveAppEnvironment(); doc.OAuth2("oauth2") .Flow("password") .TokenUrl($"{appEnv.GetSsoUrl()}/connect/token") .Scopes(scopes => { if (!appEnv.Security.Scopes.SequenceEqual(new[] { "openid", "profile", "user_info" })) { foreach (string scope in appEnv.Security.Scopes) { scopes.Add(scope, scope); } } }); return(doc); }
public static OAuth2SchemeBuilder AppServiceAuthentication(this SwaggerDocsConfig config, Uri siteUri, string authProvider) { if (config == null) { throw new ArgumentNullException("config"); } if (siteUri == null) { throw new ArgumentNullException("siteUri"); } if (authProvider == null) { throw new ArgumentNullException("authProvider"); } config.OperationFilter(() => new MobileAppAuthenticationFilter(authProvider)); Uri loginUri = new Uri(siteUri, new Uri(".auth/login/" + authProvider, UriKind.Relative)); return(config.OAuth2(authProvider) .Description("OAuth2 Implicit Grant") .Flow("implicit") .AuthorizationUrl(loginUri.ToString())); }
public static SwaggerEnabledConfiguration EnableSwagger( this HttpConfiguration httpConfig, string routeTemplate, Action <SwaggerDocsConfig> configure = null) { var config = new SwaggerDocsConfig(); if (configure != null) { configure(config); } httpConfig.Routes.MapHttpRoute( name: "swagger_docs", routeTemplate: routeTemplate, defaults: null, constraints: new { apiVersion = @".+" }, handler: new SwaggerDocsHandler(config) ); return(new SwaggerEnabledConfiguration( httpConfig, config.GetRootUrl, config.GetApiVersions().Select(version => routeTemplate.Replace("{apiVersion}", version)))); }
/// <summary> /// Calls <see cref="SwaggerDocsConfig.DescribeAllEnumsAsStrings(bool)"/> /// | Make it compatible with owin branching /// | Ignores CancellationToken parameter type /// </summary> public static SwaggerDocsConfig ApplyDefaultApiConfig(this SwaggerDocsConfig doc, HttpConfiguration webApiConfig) { doc.DescribeAllEnumsAsStrings(); doc.RootUrl(req => new Uri(req.RequestUri, req.GetOwinContext().Request.PathBase.Value).ToString()); doc.OperationFilter <OpenApiIgnoreParameterTypeOperationFilter <CancellationToken> >(); AppEnvironment appEnv = (AppEnvironment)webApiConfig.DependencyResolver.GetService(typeof(AppEnvironment)); doc.OperationFilter(() => new DefaultAuthorizationOperationFilter { AppEnvironment = appEnv }); doc.OperationFilter <SwaggerDefaultValuesOperationFilter>(); doc.OperationFilter <ExamplesOperationFilter>(); doc.OperationFilter <DescriptionOperationFilter>(); doc.SchemaId(type => $"{type.FullName}, {type.Assembly.GetName().Name}"); doc.OAuth2("oauth2") .Flow("password") .TokenUrl($"{appEnv.GetSsoUrl()}/connect/token") .Scopes(scopes => { if (!appEnv.Security.Scopes.SequenceEqual(new[] { "openid", "profile", "user_info" })) { foreach (string scope in appEnv.Security.Scopes) { scopes.Add(scope, scope); } } }); return(doc); }
public AreaSwaggerConfigurationContext(SwaggerDocsConfig config, IEnumerable <string> discoveryPaths, string routeTemplate) { Config = config; RootUrlResolver = config.GetRootUrl; DiscoveryPaths = discoveryPaths; RouteTemplate = routeTemplate; }
/// <summary> /// Calls <see cref="SwaggerDocsConfig.DescribeAllEnumsAsStrings(bool)"/> /// | Make it compatible with owin branching /// | Ignores CancellationToken parameter type /// </summary> public static SwaggerDocsConfig ApplyDefaultApiConfig(this SwaggerDocsConfig doc, HttpConfiguration webApiConfig) { doc.DescribeAllEnumsAsStrings(); doc.RootUrl(req => new Uri(req.RequestUri, req.GetOwinContext().Request.PathBase.Value).ToString()); doc.OperationFilter <OpenApiIgnoreParameterTypeOperationFilter <CancellationToken> >(); return(doc); }
public void Apply(Swashbuckle.Application.SwaggerDocsConfig c) { c.ApiKey(Key) .Name(Name) .Description(Description) .In(In); c.DocumentFilter(() => this); c.OperationFilter(() => this); }
private readonly List <DiscoveryUrlsObj> _discoveryPathsObj; //we want the version name and the title public SwaggerEnabledConfiguration(HttpConfiguration httpConfig, Func <HttpRequestMessage, string> rootUrlResolver, IEnumerable <string> discoveryPaths, SwaggerDocsConfig swaggerDocsConfig, string routeTemplate) { _swaggerDocsConfig = swaggerDocsConfig; _httpConfig = httpConfig; _rootUrlResolver = rootUrlResolver; _discoveryPaths = discoveryPaths; _discoveryPathsObj = swaggerDocsConfig.GetDiscoveryPaths(routeTemplate); }
public static OAuth2SchemeBuilder AppServiceAuthentication(this SwaggerDocsConfig config, string siteUri, string authProvider) { if (siteUri == null) { throw new ArgumentNullException("siteUri"); } Uri uri = new Uri(siteUri); return(AppServiceAuthentication(config, uri, authProvider)); }
/// <summary> /// Calls <see cref="OpenApiExtensions.ApplyDefaultODataConfig(SwaggerDocsConfig, HttpConfiguration)"/> /// | Ignores ODataQueryOptions parameter type /// | Uses <see cref="ODataSwaggerProvider"/> /// </summary> public static SwaggerDocsConfig ApplyDefaultODataConfig(this SwaggerDocsConfig doc, HttpConfiguration webApiConfig) { doc.ApplyDefaultApiConfig(webApiConfig); doc.OperationFilter <OpenApiIgnoreParameterTypeOperationFilter <ODataQueryOptions> >(); doc.CustomProvider(defaultProvider => new ODataSwaggerProvider(defaultProvider, doc, webApiConfig).Configure(odataConfig => { odataConfig.EnableSwaggerRequestCaching(); odataConfig.IncludeNavigationProperties(); odataConfig.SetAssembliesResolver((System.Web.Http.Dispatcher.IAssembliesResolver)webApiConfig.DependencyResolver.GetService(typeof(System.Web.Http.Dispatcher.IAssembliesResolver))); })); return(doc); }
/// <summary> /// Calls <see cref="OpenApiExtensions.ApplyDefaultODataConfig(SwaggerDocsConfig, HttpConfiguration)"/> /// | Ignores ODataQueryOptions parameter type /// | Uses <see cref="ODataSwaggerProvider"/> /// </summary> public static SwaggerDocsConfig ApplyDefaultODataConfig(this SwaggerDocsConfig doc, HttpConfiguration webApiConfig) { doc.ApplyDefaultApiConfig(webApiConfig); doc.OperationFilter <OpenApiIgnoreParameterTypeOperationFilter <ODataQueryOptions> >(); doc.CustomProvider(defaultProvider => new ODataSwaggerProvider(defaultProvider, doc, webApiConfig).Configure(odataConfig => { odataConfig.EnableSwaggerRequestCaching(); odataConfig.IncludeNavigationProperties(); odataConfig.SetAssembliesResolver((System.Web.Http.Dispatcher.IAssembliesResolver)webApiConfig.DependencyResolver.GetService(typeof(System.Web.Http.Dispatcher.IAssembliesResolver))); })); doc.SchemaId(type => type.AssemblyQualifiedName); doc.GroupActionsBy(apiDesc => $"[{((ODataRoute)apiDesc.Route).RoutePrefix}] {apiDesc.ActionDescriptor.ControllerDescriptor.ControllerName}"); return(doc); }
public static SwaggerEnabledConfiguration EnableSwagger( this HttpConfiguration httpConfig, string routeTemplate, Action <SwaggerDocsConfig> configure = null) { SwaggerDocsConfig config = new SwaggerDocsConfig(); if (configure != null) { configure(config); } HttpRouteCollectionExtensions.MapHttpRoute(httpConfig.get_Routes(), "swagger_docs" + routeTemplate, routeTemplate, (object)null, (object)new { apiVersion = ".+" }, (HttpMessageHandler) new SwaggerDocsHandler(config)); return(new SwaggerEnabledConfiguration(httpConfig, new Func <HttpRequestMessage, string>(config.GetRootUrl), config.GetApiVersions().Select <string, string>((Func <string, string>)(version => routeTemplate.Replace("{apiVersion}", version))))); }
public static IDictionary <AreaDescription, AreaSwaggerConfigurationContext> DiscoverAreas(Assembly assembly, Action <SwaggerDocsConfig, AreaDescription> configure = null, string routeAreaTemplate = null) { var areasDiscoveryPaths = new Dictionary <AreaDescription, AreaSwaggerConfigurationContext>(); foreach (var type in assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(AreaRegistration)))) { var config = new SwaggerDocsConfig(); var areaRegistration = (AreaRegistration)Activator.CreateInstance(type); var area = new AreaDescription(areaRegistration.AreaName, type); configure?.Invoke(config, area); var routeTemplate = (routeAreaTemplate ?? DefaultRouteTemplate).Replace("{areaName}", areaRegistration.AreaName.ToLowerInvariant()); var discoveryPaths = config.GetApiVersions().Select(version => routeTemplate.Replace("{apiVersion}", version)); areasDiscoveryPaths.Add(area, new AreaSwaggerConfigurationContext(config, discoveryPaths, routeTemplate)); } return(areasDiscoveryPaths); }
private static AreaSwaggerConfigurationContext EnableSwaggerOutOfAreas(HttpConfiguration httpConfig, Action <SwaggerDocsConfig, AreaDescription> configure, string routeAreaTemplate, IList <AreaDescription> allAreas) { var config = new SwaggerDocsConfig(); configure?.Invoke(config, AreaDescription.Empty); var routeTemplate = (routeAreaTemplate ?? DefaultRouteTemplate) .Replace("{areaName}/", string.Empty); httpConfig.Routes.MapHttpRoute( name: "swagger_docs" + routeTemplate, routeTemplate: routeTemplate, defaults: null, constraints: new { apiVersion = @".+" }, handler: new SwaggerDocsHandler(config, null, allAreas) ); var discoveryPaths = config.GetApiVersions().Select(version => routeTemplate.Replace("{apiVersion}", version)); return(new AreaSwaggerConfigurationContext(config, discoveryPaths, routeTemplate)); }
/// <summary> /// Calls <see cref="OpenApiExtensions.ApplyDefaultODataConfig(SwaggerDocsConfig, HttpConfiguration)"/> /// | Ignores ODataQueryOptions parameter type /// | Uses <see cref="ODataSwaggerProvider"/> /// </summary> public static SwaggerDocsConfig ApplyDefaultODataConfig(this SwaggerDocsConfig doc, HttpConfiguration webApiConfig) { if (doc == null) throw new ArgumentNullException(nameof(doc)); if (webApiConfig == null) throw new ArgumentNullException(nameof(webApiConfig)); doc.DocumentFilter<RemoveDefaultODataNamespaceFromSwaggerDocumentFilter>(); doc.ApplyDefaultApiConfig(webApiConfig); doc.OperationFilter<OpenApiIgnoreParameterTypeOperationFilter<ODataQueryOptions>>(); doc.CustomProvider(defaultProvider => new ODataSwaggerProvider(defaultProvider, doc, webApiConfig).Configure(odataConfig => { odataConfig.EnableSwaggerRequestCaching(); odataConfig.IncludeNavigationProperties(); odataConfig.SetAssembliesResolver((System.Web.Http.Dispatcher.IAssembliesResolver)webApiConfig.DependencyResolver.GetService(typeof(System.Web.Http.Dispatcher.IAssembliesResolver))); })); doc.GroupActionsBy(apiDesc => $"[{((ODataRoute)apiDesc.Route).RoutePrefix}] {apiDesc.ActionDescriptor.ControllerDescriptor.ControllerName}"); return doc; }
public static SwaggerDocsConfig VersioningSwaggerDoc(this SwaggerDocsConfig config, VersionedApiExplorer apiExplorer, string docTitleFormat, string versionParamName) { if (config == null) { throw new ArgumentNullException(nameof(config)); } if (apiExplorer == null) { throw new ArgumentNullException(nameof(apiExplorer)); } if (string.IsNullOrWhiteSpace(docTitleFormat)) { throw new ArgumentNullException(nameof(docTitleFormat)); } if (string.IsNullOrWhiteSpace(versionParamName)) { throw new ArgumentNullException(nameof(versionParamName)); } config.MultipleApiVersions( (apiDescription, version) => apiDescription.GetGroupName() == version, info => { foreach (var group in apiExplorer.ApiDescriptions) { info.Version(group.Name, string.Format(docTitleFormat, group.ApiVersion)); } }); config.OperationFilter(() => new RemoveVersionParameters(versionParamName)); config.DocumentFilter(() => new SetVersionInPaths(versionParamName)); return(config); }
public static SwaggerDocsConfig VersioningSwaggerDoc(this SwaggerDocsConfig config, VersionedApiExplorer apiExplorer, string docTitleFormat) { return(VersioningSwaggerDoc(config, apiExplorer, docTitleFormat, "api-version")); }
public static SwaggerDocsConfig VersioningSwaggerDoc(this SwaggerDocsConfig config, VersionedApiExplorer apiExplorer) { return(VersioningSwaggerDoc(config, apiExplorer, "API {0}")); }
public SwaggerDocsHandler(SwaggerDocsConfig config) { _config = config; }
public SwaggerDocsHandler(SwaggerDocsConfig config) { _config = config; IsAuthenticated = CheckThreadAuthentication; stopWatch = new Stopwatch(); }
public static string DefaultRootUrlResolver(HttpRequestMessage request) { return(new UriBuilder(SwaggerDocsConfig.GetHeaderValue(request, "X-Forwarded-Proto") ?? request.RequestUri.Scheme, SwaggerDocsConfig.GetHeaderValue(request, "X-Forwarded-Host") ?? request.RequestUri.Host, int.Parse(SwaggerDocsConfig.GetHeaderValue(request, "X-Forwarded-Port") ?? request.RequestUri.Port.ToString((IFormatProvider)CultureInfo.InvariantCulture)), (SwaggerDocsConfig.GetHeaderValue(request, "X-Forwarded-Prefix") ?? string.Empty) + HttpRequestMessageExtensions.GetConfiguration(request).get_VirtualPathRoot()).Uri.AbsoluteUri.TrimEnd('/')); }
public SwaggerDocsHandler(SwaggerDocsConfig config, AreaDescription area = null, IList <AreaDescription> allAreas = null) { _config = config; _area = area; _allAreas = allAreas ?? new List <AreaDescription>(); }