diff --git a/www/caddy/pkg-descr b/www/caddy/pkg-descr index fc2608ebf..7ef7b776b 100644 --- a/www/caddy/pkg-descr +++ b/www/caddy/pkg-descr @@ -30,6 +30,8 @@ Plugin Changelog Add: Run Caddy as "www" user and group, by enabling "Disable Superuser" in General Settings. Cleanup: Validations in general.volt are all appended to their form keys, instead of triggering a Bootstrap Dialog. Change: Description Fields are optional now, reducing the steps needed to create new entries. +Add: Shortcuts to add new Domains and Handlers. +Change: Subdomain Tab only appears when a wildcard domain has been configured. 1.6.0 diff --git a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogHandle.xml b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogHandle.xml index f467f6576..85ac5b0c4 100644 --- a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogHandle.xml +++ b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogHandle.xml @@ -17,12 +17,22 @@ dropdown + + handle.description + + text + + + + header + + true + handle.HandleType dropdown - true handle.HandlePath @@ -30,12 +40,6 @@ text - - handle.description - - text - - header @@ -71,7 +75,7 @@ true 192.168.1.1 - + handle.ToPort @@ -87,6 +91,17 @@ true + + handle.HttpTlsInsecureSkipVerify + + checkbox + + + + header + + true + handle.PassiveHealthFailDuration @@ -128,12 +143,6 @@ checkbox - - handle.HttpTlsInsecureSkipVerify - - checkbox - - handle.HttpTlsTrustedCaCerts diff --git a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogReverseProxy.xml b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogReverseProxy.xml index 643db447d..eb8e1b366 100644 --- a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogReverseProxy.xml +++ b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dialogReverseProxy.xml @@ -10,14 +10,14 @@ text example.com - + reverse.FromPort text 443 - + reverse.description diff --git a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/general.xml b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/general.xml index 4e9a159a7..54cdbba93 100644 --- a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/general.xml +++ b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/general.xml @@ -46,6 +46,7 @@ dropdown + true caddy.general.abort @@ -59,5 +60,6 @@ text 10 + true diff --git a/www/caddy/src/opnsense/mvc/app/views/OPNsense/Caddy/reverse_proxy.volt b/www/caddy/src/opnsense/mvc/app/views/OPNsense/Caddy/reverse_proxy.volt index fb9bc191f..9e2cea7c9 100644 --- a/www/caddy/src/opnsense/mvc/app/views/OPNsense/Caddy/reverse_proxy.volt +++ b/www/caddy/src/opnsense/mvc/app/views/OPNsense/Caddy/reverse_proxy.volt @@ -155,6 +155,7 @@ // Update only the service control UI for 'caddy' showAlert("{{ lang._('Configuration applied successfully.') }}", "{{ lang._('Apply Success') }}"); updateServiceControlUI('caddy'); + checkAndToggleSubdomainsTab(); } else { console.error("{{ lang._('Action was not successful or an error occurred:') }}", data); } @@ -196,7 +197,7 @@ // Control the visibility of selectpicker for filter by domain function toggleSelectPicker(tab) { - if (tab === 'handlesTab' || tab === 'domainsTab') { + if (tab === 'handlesTab' || tab === 'domainsTab' || tab === 'subdomainsTab') { $('.common-filter').show(); } else { $('.common-filter').hide(); @@ -213,6 +214,61 @@ toggleSelectPicker(currentTab); }); + // Add click event listener for "Add Upstream" button + $("#addHandleBtn").on("click", function() { + if ($('#maintabs .active a').attr('href') === "#handlesTab") { + // Directly open the dialog if already in the Handles tab + $("#addReverseHandleBtn").click(); + } else { + // Switch to the "Handlers" tab if not already there + $('#maintabs a[href="#handlesTab"]').tab('show').one('shown.bs.tab', function(e) { + $("#addReverseHandleBtn").click(); + }); + } + }); + + // Add click event listener for "Add Domain" button + $("#addDomainBtn").on("click", function() { + if ($('#maintabs .active a').attr('href') === "#domainsTab") { + $("#addReverseProxyBtn").click(); + } else { + $('#maintabs a[href="#domainsTab"]').tab('show').one('shown.bs.tab', function(e) { + $("#addReverseProxyBtn").click(); + }); + } + }); + + // Check and set the visibility of the Subdomains tab on initial load + checkAndToggleSubdomainsTab(); + + // Function to check and toggle Subdomains tab + function checkAndToggleSubdomainsTab() { + $.ajax({ + url: '/api/caddy/ReverseProxy/getAllReverseDomains', + type: 'GET', + dataType: 'json', + success: function(response) { + let hasWildcard = response.rows.some(domain => domain.domainPort.startsWith('*')); + toggleSubdomainsTab(hasWildcard); + }, + error: function() { + console.error("{{ lang._('Failed to load domain data from getAllReverseDomains') }}"); + } + }); + } + + // Function to show or hide the Subdomains tab + function toggleSubdomainsTab(visible) { + let subdomainsTab = $('#maintabs a[href="#subdomainsTab"]').parent(); + if (visible) { + subdomainsTab.show(); + } else { + subdomainsTab.hide(); + if (subdomainsTab.hasClass('active')) { + $('#maintabs a[href="#domainsTab"]').tab('show'); + } + } + } }); @@ -223,20 +279,30 @@ margin-right: 5px; padding: 0 15px; // Align with the tables } - + .custom-header { + font-weight: 800; + font-size: 16px; + font-style: italic; + }
- - -
+ +
+ +
+ + +
+ @@ -246,7 +312,7 @@
-

{{ lang._('Domains') }}

+

{{ lang._('Domains') }}

@@ -281,9 +347,12 @@
+
+ + +
- -

{{ lang._('Subdomains') }}

+

{{ lang._('Subdomains') }}

@@ -319,7 +388,7 @@
-

{{ lang._('Handlers') }}

+

{{ lang._('Handlers') }}

@@ -367,7 +436,7 @@
-

{{ lang._('Access Lists') }}

+

{{ lang._('Access Lists') }}

@@ -399,7 +468,7 @@
-

{{ lang._('Basic Auth') }}

+

{{ lang._('Basic Auth') }}

@@ -429,7 +498,7 @@
-

{{ lang._('Headers') }}

+

{{ lang._('Headers') }}