Startup.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Jellyfin.Server.Extensions;
  2. using MediaBrowser.Controller;
  3. using MediaBrowser.Controller.Configuration;
  4. using Microsoft.AspNetCore.Builder;
  5. using Microsoft.AspNetCore.Hosting;
  6. using Microsoft.Extensions.DependencyInjection;
  7. using Microsoft.Extensions.Hosting;
  8. namespace Jellyfin.Server
  9. {
  10. /// <summary>
  11. /// Startup configuration for the Kestrel webhost.
  12. /// </summary>
  13. public class Startup
  14. {
  15. private readonly IServerConfigurationManager _serverConfigurationManager;
  16. /// <summary>
  17. /// Initializes a new instance of the <see cref="Startup" /> class.
  18. /// </summary>
  19. /// <param name="serverConfigurationManager">The server configuration manager.</param>
  20. public Startup(IServerConfigurationManager serverConfigurationManager)
  21. {
  22. _serverConfigurationManager = serverConfigurationManager;
  23. }
  24. /// <summary>
  25. /// Configures the service collection for the webhost.
  26. /// </summary>
  27. /// <param name="services">The service collection.</param>
  28. public void ConfigureServices(IServiceCollection services)
  29. {
  30. services.AddResponseCompression();
  31. services.AddHttpContextAccessor();
  32. services.AddJellyfinApi(_serverConfigurationManager.Configuration.BaseUrl.TrimStart('/'));
  33. services.AddJellyfinApiSwagger();
  34. // configure custom legacy authentication
  35. services.AddCustomAuthentication();
  36. services.AddJellyfinApiAuthorization();
  37. }
  38. /// <summary>
  39. /// Configures the app builder for the webhost.
  40. /// </summary>
  41. /// <param name="app">The application builder.</param>
  42. /// <param name="env">The webhost environment.</param>
  43. /// <param name="serverApplicationHost">The server application host.</param>
  44. public void Configure(
  45. IApplicationBuilder app,
  46. IWebHostEnvironment env,
  47. IServerApplicationHost serverApplicationHost)
  48. {
  49. if (env.IsDevelopment())
  50. {
  51. app.UseDeveloperExceptionPage();
  52. }
  53. app.UseWebSockets();
  54. app.UseResponseCompression();
  55. // TODO app.UseMiddleware<WebSocketMiddleware>();
  56. app.Use(serverApplicationHost.ExecuteWebsocketHandlerAsync);
  57. // TODO use when old API is removed: app.UseAuthentication();
  58. app.UseJellyfinApiSwagger();
  59. app.UseRouting();
  60. app.UseAuthorization();
  61. app.UseEndpoints(endpoints =>
  62. {
  63. endpoints.MapControllers();
  64. });
  65. app.Use(serverApplicationHost.ExecuteHttpHandlerAsync);
  66. }
  67. }
  68. }