< Summary - Jellyfin

Information
Class: Jellyfin.Server.Extensions.ApiApplicationBuilderExtensions
Assembly: jellyfin
File(s): /srv/git/jellyfin/Jellyfin.Server/Extensions/ApiApplicationBuilderExtensions.cs
Line coverage
97%
Covered lines: 35
Uncovered lines: 1
Coverable lines: 36
Total lines: 144
Line coverage: 97.2%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
UseJellyfinApiSwagger(...)50%2296.42%
UseIPBasedAccessValidation(...)100%11100%
UseLanFiltering(...)100%11100%
UseQueryStringDecoding(...)100%11100%
UseBaseUrlRedirection(...)100%11100%
UseServerStartupMessage(...)100%11100%
UseWebSocketHandler(...)100%11100%
UseRobotsRedirection(...)100%11100%
UsePathTrim(...)100%11100%

File(s)

/srv/git/jellyfin/Jellyfin.Server/Extensions/ApiApplicationBuilderExtensions.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using Jellyfin.Api.Middleware;
 3using MediaBrowser.Common.Net;
 4using MediaBrowser.Controller.Configuration;
 5using Microsoft.AspNetCore.Builder;
 6using Microsoft.OpenApi.Models;
 7
 8namespace Jellyfin.Server.Extensions
 9{
 10    /// <summary>
 11    /// Extensions for adding API specific functionality to the application pipeline.
 12    /// </summary>
 13    public static class ApiApplicationBuilderExtensions
 14    {
 15        /// <summary>
 16        /// Adds swagger and swagger UI to the application pipeline.
 17        /// </summary>
 18        /// <param name="applicationBuilder">The application builder.</param>
 19        /// <param name="serverConfigurationManager">The server configuration.</param>
 20        /// <returns>The updated application builder.</returns>
 21        public static IApplicationBuilder UseJellyfinApiSwagger(
 22            this IApplicationBuilder applicationBuilder,
 23            IServerConfigurationManager serverConfigurationManager)
 24        {
 25            // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
 26            // specifying the Swagger JSON endpoint.
 27
 2228            var baseUrl = serverConfigurationManager.GetNetworkConfiguration().BaseUrl.Trim('/');
 2229            var apiDocBaseUrl = serverConfigurationManager.GetNetworkConfiguration().BaseUrl;
 2230            if (!string.IsNullOrEmpty(baseUrl))
 31            {
 032                baseUrl += '/';
 33            }
 34
 2235            return applicationBuilder
 2236                .UseSwagger(c =>
 2237                {
 2238                    // Custom path requires {documentName}, SwaggerDoc documentName is 'api-docs'
 2239                    c.RouteTemplate = "{documentName}/openapi.json";
 2240                    c.PreSerializeFilters.Add((swagger, httpReq) =>
 2241                    {
 2242                        swagger.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{httpReq.Scheme}://{http
 2243                    });
 2244                })
 2245                .UseSwaggerUI(c =>
 2246                {
 2247                    c.DocumentTitle = "Jellyfin API";
 2248                    c.SwaggerEndpoint($"/{baseUrl}api-docs/openapi.json", "Jellyfin API");
 2249                    c.InjectStylesheet($"/{baseUrl}api-docs/swagger/custom.css");
 2250                    c.RoutePrefix = "api-docs/swagger";
 2251                })
 2252                .UseReDoc(c =>
 2253                {
 2254                    c.DocumentTitle = "Jellyfin API";
 2255                    c.SpecUrl($"/{baseUrl}api-docs/openapi.json");
 2256                    c.InjectStylesheet($"/{baseUrl}api-docs/redoc/custom.css");
 2257                    c.RoutePrefix = "api-docs/redoc";
 2258                });
 59        }
 60
 61        /// <summary>
 62        /// Adds IP based access validation to the application pipeline.
 63        /// </summary>
 64        /// <param name="appBuilder">The application builder.</param>
 65        /// <returns>The updated application builder.</returns>
 66        public static IApplicationBuilder UseIPBasedAccessValidation(this IApplicationBuilder appBuilder)
 67        {
 2268            return appBuilder.UseMiddleware<IPBasedAccessValidationMiddleware>();
 69        }
 70
 71        /// <summary>
 72        /// Adds LAN based access filtering to the application pipeline.
 73        /// </summary>
 74        /// <param name="appBuilder">The application builder.</param>
 75        /// <returns>The updated application builder.</returns>
 76        public static IApplicationBuilder UseLanFiltering(this IApplicationBuilder appBuilder)
 77        {
 2278            return appBuilder.UseMiddleware<LanFilteringMiddleware>();
 79        }
 80
 81        /// <summary>
 82        /// Enables url decoding before binding to the application pipeline.
 83        /// </summary>
 84        /// <param name="appBuilder">The <see cref="IApplicationBuilder"/>.</param>
 85        /// <returns>The updated application builder.</returns>
 86        public static IApplicationBuilder UseQueryStringDecoding(this IApplicationBuilder appBuilder)
 87        {
 2288            return appBuilder.UseMiddleware<QueryStringDecodingMiddleware>();
 89        }
 90
 91        /// <summary>
 92        /// Adds base url redirection to the application pipeline.
 93        /// </summary>
 94        /// <param name="appBuilder">The application builder.</param>
 95        /// <returns>The updated application builder.</returns>
 96        public static IApplicationBuilder UseBaseUrlRedirection(this IApplicationBuilder appBuilder)
 97        {
 2298            return appBuilder.UseMiddleware<BaseUrlRedirectionMiddleware>();
 99        }
 100
 101        /// <summary>
 102        /// Adds a custom message during server startup to the application pipeline.
 103        /// </summary>
 104        /// <param name="appBuilder">The application builder.</param>
 105        /// <returns>The updated application builder.</returns>
 106        public static IApplicationBuilder UseServerStartupMessage(this IApplicationBuilder appBuilder)
 107        {
 22108            return appBuilder.UseMiddleware<ServerStartupMessageMiddleware>();
 109        }
 110
 111        /// <summary>
 112        /// Adds a WebSocket request handler to the application pipeline.
 113        /// </summary>
 114        /// <param name="appBuilder">The application builder.</param>
 115        /// <returns>The updated application builder.</returns>
 116        public static IApplicationBuilder UseWebSocketHandler(this IApplicationBuilder appBuilder)
 117        {
 22118            return appBuilder.UseMiddleware<WebSocketHandlerMiddleware>();
 119        }
 120
 121        /// <summary>
 122        /// Adds robots.txt redirection to the application pipeline.
 123        /// </summary>
 124        /// <param name="appBuilder">The application builder.</param>
 125        /// <returns>The updated application builder.</returns>
 126        public static IApplicationBuilder UseRobotsRedirection(this IApplicationBuilder appBuilder)
 127        {
 22128            return appBuilder.UseMiddleware<RobotsRedirectionMiddleware>();
 129        }
 130
 131        /// <summary>
 132        /// Adds /emby and /mediabrowser route trimming to the application pipeline.
 133        /// </summary>
 134        /// <remarks>
 135        /// This must be injected before any path related middleware.
 136        /// </remarks>
 137        /// <param name="appBuilder">The application builder.</param>
 138        /// <returns>The updated application builder.</returns>
 139        public static IApplicationBuilder UsePathTrim(this IApplicationBuilder appBuilder)
 140        {
 22141            return appBuilder.UseMiddleware<LegacyEmbyRouteRewriteMiddleware>();
 142        }
 143    }
 144}