123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- using System;
- using System.IO;
- using System.Net;
- using Jellyfin.Server.Helpers;
- using MediaBrowser.Common.Configuration;
- using MediaBrowser.Common.Net;
- using MediaBrowser.Controller.Extensions;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.Hosting;
- using Microsoft.Extensions.Logging;
- namespace Jellyfin.Server.Extensions;
- /// <summary>
- /// Extensions for configuring the web host builder.
- /// </summary>
- public static class WebHostBuilderExtensions
- {
- /// <summary>
- /// Configure the web host builder.
- /// </summary>
- /// <param name="builder">The builder to configure.</param>
- /// <param name="appHost">The application host.</param>
- /// <param name="startupConfig">The application configuration.</param>
- /// <param name="appPaths">The application paths.</param>
- /// <param name="logger">The logger.</param>
- /// <returns>The configured web host builder.</returns>
- public static IWebHostBuilder ConfigureWebHostBuilder(
- this IWebHostBuilder builder,
- CoreAppHost appHost,
- IConfiguration startupConfig,
- IApplicationPaths appPaths,
- ILogger logger)
- {
- return builder
- .UseKestrel((builderContext, options) =>
- {
- var addresses = appHost.NetManager.GetAllBindInterfaces();
- bool flagged = false;
- foreach (IPObject netAdd in addresses)
- {
- logger.LogInformation("Kestrel listening on {Address}", IPAddress.IPv6Any.Equals(netAdd.Address) ? "All Addresses" : netAdd);
- options.Listen(netAdd.Address, appHost.HttpPort);
- if (appHost.ListenWithHttps)
- {
- options.Listen(
- netAdd.Address,
- appHost.HttpsPort,
- listenOptions => listenOptions.UseHttps(appHost.Certificate));
- }
- else if (builderContext.HostingEnvironment.IsDevelopment())
- {
- try
- {
- options.Listen(
- netAdd.Address,
- appHost.HttpsPort,
- listenOptions => listenOptions.UseHttps());
- }
- catch (InvalidOperationException)
- {
- if (!flagged)
- {
- logger.LogWarning("Failed to listen to HTTPS using the ASP.NET Core HTTPS development certificate. Please ensure it has been installed and set as trusted");
- flagged = true;
- }
- }
- }
- }
- // Bind to unix socket (only on unix systems)
- if (startupConfig.UseUnixSocket() && Environment.OSVersion.Platform == PlatformID.Unix)
- {
- var socketPath = StartupHelpers.GetUnixSocketPath(startupConfig, appPaths);
- // Workaround for https://github.com/aspnet/AspNetCore/issues/14134
- if (File.Exists(socketPath))
- {
- File.Delete(socketPath);
- }
- options.ListenUnixSocket(socketPath);
- logger.LogInformation("Kestrel listening to unix socket {SocketPath}", socketPath);
- }
- })
- .UseStartup(_ => new Startup(appHost));
- }
- }
|