From 70472ac84e608a9cc7d41c5ad0f18815e4365750 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Mon, 14 Apr 2025 18:21:05 +0000 Subject: [PATCH] add public port env vars; allow streaming through ui port (#1993) --- CHANGELOG.md | 2 ++ ErsatzTV.Core/Settings.cs | 3 ++ ErsatzTV/Program.cs | 37 +++++++++++++++++++------ ErsatzTV/Properties/launchSettings.json | 4 ++- ErsatzTV/Startup.cs | 16 ++--------- 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19746635..1bdf0110 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Add environment variables to allow ETV to run UI and streaming on separate ports - `ETV_STREAMING_PORT`: port used for streaming requests, defaults to 8409 - `ETV_UI_PORT`: port used for admin UI, defaults to 8409 + - `ETV_PUBLIC_STREAMING_PORT`: port used for streaming requests at reverse proxy, defaults to 8409 + - `ETV_PUBLIC_UI_PORT`: port used for admin UI at reverse proxy, defaults to 8409 ### Fixed - Fix error message about synchronizing Plex collections from a Plex server that has zero collections diff --git a/ErsatzTV.Core/Settings.cs b/ErsatzTV.Core/Settings.cs index 519cc720..2cae0b98 100644 --- a/ErsatzTV.Core/Settings.cs +++ b/ErsatzTV.Core/Settings.cs @@ -4,4 +4,7 @@ public static class Settings { public static int UiPort { get; set; } public static int StreamingPort { get; set; } + + public static int PublicUiPort { get; set; } + public static int PublicStreamingPort { get; set; } } diff --git a/ErsatzTV/Program.cs b/ErsatzTV/Program.cs index 2599a60d..30b77d43 100644 --- a/ErsatzTV/Program.cs +++ b/ErsatzTV/Program.cs @@ -138,31 +138,50 @@ public class Program { uiPort = 8409; } + Settings.UiPort = uiPort; + string publicUiPortVariable = Environment.GetEnvironmentVariable("ETV_PUBLIC_UI_PORT"); + if (!int.TryParse(publicUiPortVariable, out int publicUiPort)) + { + publicUiPort = 8409; + } + + Settings.PublicUiPort = publicUiPort; + string streamingPortVariable = Environment.GetEnvironmentVariable("ETV_STREAMING_PORT"); if (!int.TryParse(streamingPortVariable, out int streamingPort)) { streamingPort = 8409; } + Settings.StreamingPort = streamingPort; + string publicStreamingPortVariable = Environment.GetEnvironmentVariable("ETV_PUBLIC_STREAMING_PORT"); + if (!int.TryParse(publicStreamingPortVariable, out int publicStreamingPort)) + { + publicStreamingPort = 8409; + } + + Settings.PublicStreamingPort = publicStreamingPort; + return Host.CreateDefaultBuilder(args) .ConfigureServices(services => services.AddSingleton(LoggingLevelSwitches)) .ConfigureWebHostDefaults( webBuilder => webBuilder.UseStartup<Startup>() .UseConfiguration(Configuration) - .UseKestrel(options => - { - options.ListenAnyIP(Settings.UiPort); - - if (Settings.StreamingPort != Settings.UiPort) + .UseKestrel( + options => { - options.ListenAnyIP(Settings.StreamingPort); - } + options.ListenAnyIP(Settings.UiPort); + + if (Settings.StreamingPort != Settings.UiPort) + { + options.ListenAnyIP(Settings.StreamingPort); + } - options.AddServerHeader = false; - }) + options.AddServerHeader = false; + }) .UseContentRoot(BasePath)) .UseSerilog(); } diff --git a/ErsatzTV/Properties/launchSettings.json b/ErsatzTV/Properties/launchSettings.json index b8b4d58b..0a3a74d9 100644 --- a/ErsatzTV/Properties/launchSettings.json +++ b/ErsatzTV/Properties/launchSettings.json @@ -7,7 +7,9 @@ "ASPNETCORE_ENVIRONMENT": "Development", "DOTNET_ENVIRONMENT": "Development", "ETV_STREAMING_PORT": "8409", - "ETV_UI_PORT": "8410" + "ETV_UI_PORT": "8410", + "ETV_PUBLIC_STREAMING_PORT": "8409", + "ETV_PUBLIC_UI_PORT": "8410" } } } diff --git a/ErsatzTV/Startup.cs b/ErsatzTV/Startup.cs index eed819d5..ff0c3b68 100644 --- a/ErsatzTV/Startup.cs +++ b/ErsatzTV/Startup.cs @@ -592,23 +592,11 @@ public class Startup else { app.MapWhen( - ctx => ctx.Request.Host.Port == Settings.UiPort, + ctx => ctx.Request.Host.Port == Settings.UiPort || ctx.Request.Host.Port == Settings.PublicUiPort, uiApp => { uiApp.UseRouting(); - uiApp.UseWhen( - c => c.Request.Path.StartsWithSegments("/iptv"), // && !IPAddress.IsLoopback(c.Connection.RemoteIpAddress ?? IPAddress.None), - a => - { - a.Run( - c => - { - c.Response.StatusCode = 404; - return Task.CompletedTask; - }); - }); - if (OidcHelper.IsEnabled) { uiApp.UseAuthentication(); @@ -627,7 +615,7 @@ public class Startup }); app.MapWhen( - ctx => ctx.Request.Host.Port == Settings.StreamingPort, + ctx => ctx.Request.Host.Port == Settings.StreamingPort || ctx.Request.Host.Port == Settings.PublicStreamingPort, streamingApp => { streamingApp.UseRouting();