90 lines
3.6 KiB
C#
90 lines
3.6 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Net;
|
|
using Jellyfin.Server.Helpers;
|
|
using MediaBrowser.Common.Configuration;
|
|
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(true);
|
|
|
|
bool flagged = false;
|
|
foreach (var netAdd in addresses)
|
|
{
|
|
logger.LogInformation("Kestrel is listening on {Address}", IPAddress.IPv6Any.Equals(netAdd.Address) ? "All IPv6 addresses" : netAdd.Address);
|
|
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));
|
|
}
|
|
}
|