using Jellyfin.Server.Extensions; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Prometheus; namespace Jellyfin.Server { /// /// Startup configuration for the Kestrel webhost. /// public class Startup { private readonly IServerConfigurationManager _serverConfigurationManager; /// /// Initializes a new instance of the class. /// /// The server configuration manager. public Startup(IServerConfigurationManager serverConfigurationManager) { _serverConfigurationManager = serverConfigurationManager; } /// /// Configures the service collection for the webhost. /// /// The service collection. public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(); services.AddHttpContextAccessor(); services.AddJellyfinApi(_serverConfigurationManager.Configuration.BaseUrl.TrimStart('/')); services.AddJellyfinApiSwagger(); // configure custom legacy authentication services.AddCustomAuthentication(); services.AddJellyfinApiAuthorization(); } /// /// Configures the app builder for the webhost. /// /// The application builder. /// The webhost environment. /// The server application host. public void Configure( IApplicationBuilder app, IWebHostEnvironment env, IServerApplicationHost serverApplicationHost) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseWebSockets(); app.UseResponseCompression(); // TODO app.UseMiddleware(); app.Use(serverApplicationHost.ExecuteWebsocketHandlerAsync); // TODO use when old API is removed: app.UseAuthentication(); app.UseJellyfinApiSwagger(); app.UseRouting(); app.UseAuthorization(); if (_serverConfigurationManager.Configuration.EnableMetrics) { app.UseHttpMetrics(); // Must be registered after any middleware that could chagne HTTP response codes or the data will be bad } app.UseEndpoints(endpoints => { endpoints.MapControllers(); if (_serverConfigurationManager.Configuration.EnableMetrics) { endpoints.MapMetrics(_serverConfigurationManager.Configuration.BaseUrl.TrimStart('/') + "/metrics"); } }); app.Use(serverApplicationHost.ExecuteHttpHandlerAsync); } } }