Startup.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using Jellyfin.Server.Extensions;
  2. using Jellyfin.Server.Middleware;
  3. using Jellyfin.Server.Models;
  4. using MediaBrowser.Controller;
  5. using MediaBrowser.Controller.Configuration;
  6. using Microsoft.AspNetCore.Builder;
  7. using Microsoft.AspNetCore.Hosting;
  8. using Microsoft.Extensions.DependencyInjection;
  9. using Microsoft.Extensions.Hosting;
  10. using Prometheus;
  11. namespace Jellyfin.Server
  12. {
  13. /// <summary>
  14. /// Startup configuration for the Kestrel webhost.
  15. /// </summary>
  16. public class Startup
  17. {
  18. private readonly IServerConfigurationManager _serverConfigurationManager;
  19. /// <summary>
  20. /// Initializes a new instance of the <see cref="Startup" /> class.
  21. /// </summary>
  22. /// <param name="serverConfigurationManager">The server configuration manager.</param>
  23. public Startup(IServerConfigurationManager serverConfigurationManager)
  24. {
  25. _serverConfigurationManager = serverConfigurationManager;
  26. }
  27. /// <summary>
  28. /// Configures the service collection for the webhost.
  29. /// </summary>
  30. /// <param name="services">The service collection.</param>
  31. public void ConfigureServices(IServiceCollection services)
  32. {
  33. services.AddResponseCompression();
  34. services.AddHttpContextAccessor();
  35. services.AddJellyfinApi(_serverConfigurationManager.Configuration.BaseUrl.TrimStart('/'));
  36. services.AddJellyfinApiSwagger();
  37. // configure custom legacy authentication
  38. services.AddCustomAuthentication();
  39. services.AddJellyfinApiAuthorization();
  40. }
  41. /// <summary>
  42. /// Configures the app builder for the webhost.
  43. /// </summary>
  44. /// <param name="app">The application builder.</param>
  45. /// <param name="env">The webhost environment.</param>
  46. /// <param name="serverApplicationHost">The server application host.</param>
  47. public void Configure(
  48. IApplicationBuilder app,
  49. IWebHostEnvironment env,
  50. IServerApplicationHost serverApplicationHost)
  51. {
  52. if (env.IsDevelopment())
  53. {
  54. app.UseDeveloperExceptionPage();
  55. }
  56. app.UseMiddleware<ExceptionMiddleware>();
  57. app.UseWebSockets();
  58. app.UseResponseCompression();
  59. // TODO app.UseMiddleware<WebSocketMiddleware>();
  60. app.UseAuthentication();
  61. app.UseJellyfinApiSwagger(_serverConfigurationManager);
  62. app.UseRouting();
  63. app.UseCors(ServerCorsPolicy.DefaultPolicyName);
  64. app.UseAuthorization();
  65. if (_serverConfigurationManager.Configuration.EnableMetrics)
  66. {
  67. // Must be registered after any middleware that could chagne HTTP response codes or the data will be bad
  68. app.UseHttpMetrics();
  69. }
  70. app.UseEndpoints(endpoints =>
  71. {
  72. endpoints.MapControllers();
  73. if (_serverConfigurationManager.Configuration.EnableMetrics)
  74. {
  75. endpoints.MapMetrics(_serverConfigurationManager.Configuration.BaseUrl.TrimStart('/') + "/metrics");
  76. }
  77. });
  78. app.Use(serverApplicationHost.ExecuteHttpHandlerAsync);
  79. }
  80. }
  81. }