ApiApplicationBuilderExtensions.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using Jellyfin.Server.Middleware;
  2. using MediaBrowser.Controller.Configuration;
  3. using Microsoft.AspNetCore.Builder;
  4. namespace Jellyfin.Server.Extensions
  5. {
  6. /// <summary>
  7. /// Extensions for adding API specific functionality to the application pipeline.
  8. /// </summary>
  9. public static class ApiApplicationBuilderExtensions
  10. {
  11. /// <summary>
  12. /// Adds swagger and swagger UI to the application pipeline.
  13. /// </summary>
  14. /// <param name="applicationBuilder">The application builder.</param>
  15. /// <param name="serverConfigurationManager">The server configuration.</param>
  16. /// <returns>The updated application builder.</returns>
  17. public static IApplicationBuilder UseJellyfinApiSwagger(
  18. this IApplicationBuilder applicationBuilder,
  19. IServerConfigurationManager serverConfigurationManager)
  20. {
  21. // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
  22. // specifying the Swagger JSON endpoint.
  23. var baseUrl = serverConfigurationManager.Configuration.BaseUrl.Trim('/');
  24. if (!string.IsNullOrEmpty(baseUrl))
  25. {
  26. baseUrl += '/';
  27. }
  28. return applicationBuilder
  29. .UseSwagger(c =>
  30. {
  31. // Custom path requires {documentName}, SwaggerDoc documentName is 'api-docs'
  32. c.RouteTemplate = $"/{baseUrl}{{documentName}}/openapi.json";
  33. })
  34. .UseSwaggerUI(c =>
  35. {
  36. c.DocumentTitle = "Jellyfin API";
  37. c.SwaggerEndpoint($"/{baseUrl}api-docs/openapi.json", "Jellyfin API");
  38. c.RoutePrefix = $"{baseUrl}api-docs/swagger";
  39. })
  40. .UseReDoc(c =>
  41. {
  42. c.DocumentTitle = "Jellyfin API";
  43. c.SpecUrl($"/{baseUrl}api-docs/openapi.json");
  44. c.RoutePrefix = $"{baseUrl}api-docs/redoc";
  45. });
  46. }
  47. /// <summary>
  48. /// Adds IP based access validation to the application pipeline.
  49. /// </summary>
  50. /// <param name="appBuilder">The application builder.</param>
  51. /// <returns>The updated application builder.</returns>
  52. public static IApplicationBuilder UseIpBasedAccessValidation(this IApplicationBuilder appBuilder)
  53. {
  54. return appBuilder.UseMiddleware<IpBasedAccessValidationMiddleware>();
  55. }
  56. /// <summary>
  57. /// Adds LAN based access filtering to the application pipeline.
  58. /// </summary>
  59. /// <param name="appBuilder">The application builder.</param>
  60. /// <returns>The updated application builder.</returns>
  61. public static IApplicationBuilder UseLanFiltering(this IApplicationBuilder appBuilder)
  62. {
  63. return appBuilder.UseMiddleware<LanFilteringMiddleware>();
  64. }
  65. /// <summary>
  66. /// Adds base url redirection to the application pipeline.
  67. /// </summary>
  68. /// <param name="appBuilder">The application builder.</param>
  69. /// <returns>The updated application builder.</returns>
  70. public static IApplicationBuilder UseBaseUrlRedirection(this IApplicationBuilder appBuilder)
  71. {
  72. return appBuilder.UseMiddleware<BaseUrlRedirectionMiddleware>();
  73. }
  74. /// <summary>
  75. /// Adds a custom message during server startup to the application pipeline.
  76. /// </summary>
  77. /// <param name="appBuilder">The application builder.</param>
  78. /// <returns>The updated application builder.</returns>
  79. public static IApplicationBuilder UseServerStartupMessage(this IApplicationBuilder appBuilder)
  80. {
  81. return appBuilder.UseMiddleware<ServerStartupMessageMiddleware>();
  82. }
  83. /// <summary>
  84. /// Adds a WebSocket request handler to the application pipeline.
  85. /// </summary>
  86. /// <param name="appBuilder">The application builder.</param>
  87. /// <returns>The updated application builder.</returns>
  88. public static IApplicationBuilder UseWebSocketHandler(this IApplicationBuilder appBuilder)
  89. {
  90. return appBuilder.UseMiddleware<WebSocketHandlerMiddleware>();
  91. }
  92. }
  93. }