From cade49d89dc0a1064253932ba109c55680476e28 Mon Sep 17 00:00:00 2001 From: Duy Dao Date: Wed, 16 Jul 2025 07:16:23 +0700 Subject: [PATCH] feat: enhance Caddy reverse proxy configuration with aggregated ports display --- .../CaddyReverseProxiesPage.razor.cs | 23 +++++++++++++++++-- .../CaddyReverseProxyItem.razor | 15 +++++++++++- .../Models/Caddy/CaddyConfigurationInfo.cs | 5 ++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs index c333ae9..7e2b251 100644 --- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs +++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs @@ -84,9 +84,28 @@ public partial class CaddyReverseProxiesPage : ComponentBase private void Refresh() { var notSearching = string.IsNullOrWhiteSpace(_debouncedText); - _availableCaddyConfigurations = [..CaddyService.GetExistingCaddyConfigurations() + var configurations = CaddyService.GetExistingCaddyConfigurations() .Where(conf => notSearching || conf.FileName.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase) || conf.ReverseProxyHostname.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase)) - .OrderBy(conf => conf.FileName)]; + .OrderBy(conf => conf.FileName) + .ToList(); + + // Optimize by grouping by ReverseProxyHostname and computing once per group + var hostnameToAggregatedPorts = configurations + .GroupBy(c => c.ReverseProxyHostname) + .ToDictionary( + g => g.Key, + g => g.SelectMany(c => c.ReverseProxyPorts) + .Distinct() + .OrderBy(p => p) + .ToList() + ); + + foreach (var config in configurations) + { + config.AggregatedReverseProxyPorts = hostnameToAggregatedPorts[config.ReverseProxyHostname]; + } + + _availableCaddyConfigurations = [..configurations]; StateHasChanged(); } diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor index e830624..928b381 100644 --- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor +++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor @@ -7,7 +7,20 @@ @ConfigurationInfo.FileName - @ConfigurationInfo.ReverseProxyHostname + + + @ConfigurationInfo.ReverseProxyHostname + + + @if (ConfigurationInfo.AggregatedReverseProxyPorts?.Count > 0) + { + @foreach (var port in ConfigurationInfo.AggregatedReverseProxyPorts.OrderBy(p => p)) + { + ⏵ @port + } + } + + public string FileName { get; set; } = string.Empty; + + /// + /// Aggregated ports for the reverse proxy hostname from all configurations. + /// + public List AggregatedReverseProxyPorts { get; set; } = []; } \ No newline at end of file