Startup.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. namespace Jellyfin.Server
  11. {
  12. /// <summary>
  13. /// Startup configuration for the Kestrel webhost.
  14. /// </summary>
  15. public class Startup
  16. {
  17. private readonly IServerConfigurationManager _serverConfigurationManager;
  18. /// <summary>
  19. /// Initializes a new instance of the <see cref="Startup" /> class.
  20. /// </summary>
  21. /// <param name="serverConfigurationManager">The server configuration manager.</param>
  22. public Startup(IServerConfigurationManager serverConfigurationManager)
  23. {
  24. _serverConfigurationManager = serverConfigurationManager;
  25. }
  26. /// <summary>
  27. /// Configures the service collection for the webhost.
  28. /// </summary>
  29. /// <param name="services">The service collection.</param>
  30. public void ConfigureServices(IServiceCollection services)
  31. {
  32. services.AddResponseCompression();
  33. services.AddHttpContextAccessor();
  34. services.AddJellyfinApi(_serverConfigurationManager.Configuration.BaseUrl.TrimStart('/'));
  35. services.AddJellyfinApiSwagger();
  36. // configure custom legacy authentication
  37. services.AddCustomAuthentication();
  38. services.AddJellyfinApiAuthorization();
  39. }
  40. /// <summary>
  41. /// Configures the app builder for the webhost.
  42. /// </summary>
  43. /// <param name="app">The application builder.</param>
  44. /// <param name="env">The webhost environment.</param>
  45. /// <param name="serverApplicationHost">The server application host.</param>
  46. public void Configure(
  47. IApplicationBuilder app,
  48. IWebHostEnvironment env,
  49. IServerApplicationHost serverApplicationHost)
  50. {
  51. if (env.IsDevelopment())
  52. {
  53. app.UseDeveloperExceptionPage();
  54. }
  55. app.UseMiddleware<ExceptionMiddleware>();
  56. app.UseWebSockets();
  57. app.UseResponseCompression();
  58. // TODO app.UseMiddleware<WebSocketMiddleware>();
  59. app.Use(serverApplicationHost.ExecuteWebsocketHandlerAsync);
  60. app.UseAuthentication();
  61. app.UseJellyfinApiSwagger(_serverConfigurationManager);
  62. app.UseRouting();
  63. app.UseCors(ServerCorsPolicy.DefaultPolicyName);
  64. app.UseAuthorization();
  65. app.UseEndpoints(endpoints =>
  66. {
  67. endpoints.MapControllers();
  68. });
  69. app.Use(serverApplicationHost.ExecuteHttpHandlerAsync);
  70. }
  71. }
  72. }