diff --git a/www/caddy/Makefile b/www/caddy/Makefile
index 00b7379f0..259bea8b2 100644
--- a/www/caddy/Makefile
+++ b/www/caddy/Makefile
@@ -1,6 +1,5 @@
PLUGIN_NAME= caddy
-PLUGIN_VERSION= 1.7.1
-PLUGIN_REVISION= 1
+PLUGIN_VERSION= 1.7.2
PLUGIN_DEPENDS= caddy-custom
PLUGIN_COMMENT= Modern Reverse Proxy with Automatic HTTPS, Dynamic DNS and Layer4 Routing
PLUGIN_MAINTAINER= cedrik@pischem.com
diff --git a/www/caddy/pkg-descr b/www/caddy/pkg-descr
index 47d8458bb..b6dc9e1bd 100644
--- a/www/caddy/pkg-descr
+++ b/www/caddy/pkg-descr
@@ -13,6 +13,10 @@ DOC: https://docs.opnsense.org/manual/how-tos/caddy.html
Plugin Changelog
================
+1.7.2
+
+* Add: Directive in HTTP Handler can be chosen, "reverse_proxy" and "redir"
+
1.7.1
* Add: Frontend HTTP Version can be selected in General Settings, can be used to disable QUIC protocol
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 6cbba6939..43e3fa997 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
@@ -37,7 +37,7 @@
handle.HandleType
dropdown
-
+
true
@@ -45,7 +45,7 @@
text
any
-
+
true
@@ -69,17 +69,13 @@
header
-
- true
+
- handle.header
-
+ handle.HandleDirective
+
dropdown
- select_multiple
- 5
-
- true
+
header
@@ -89,14 +85,26 @@
handle.HttpVersion
dropdown
+
true
+
+ handle.header
+
+ dropdown
+ select_multiple
+ 5
+
+
+ true
+
handle.HttpKeepalive
text
120
+
true
@@ -113,7 +121,7 @@
true
192.168.1.1
-
+
handle.ToPort
@@ -126,13 +134,14 @@
handle.ToPath
text
-
+
true
handle.PassiveHealthFailDuration
text
+
true
@@ -140,28 +149,28 @@
handle.HttpTlsInsecureSkipVerify
checkbox
-
+
handle.HttpTlsTrustedCaCerts
dropdown
-
+
handle.HttpTlsServerName
text
-
+
handle.HttpNtlm
checkbox
-
+
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 5cba4c1a2..46642786b 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
@@ -39,7 +39,7 @@
reverse.CustomCertificate
dropdown
-
+
@@ -53,7 +53,7 @@
reverse.DnsChallenge
checkbox
-
+
diff --git a/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.xml b/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.xml
index c4ae85caf..c663b3960 100644
--- a/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.xml
+++ b/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.xml
@@ -1,7 +1,7 @@
//Pischem/caddy
Caddy Reverse Proxy
- 1.3.1
+ 1.3.2
@@ -325,6 +325,14 @@
Y
+
+ Y
+ reverse_proxy
+
+ reverse_proxy
+ redir
+
+
Y
,
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 2473da5bf..ee1b2f5ab 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
@@ -313,20 +313,29 @@
}
});
- // Show TLS options based on chosen protocol
$("#handle\\.HttpTls").change(function() {
if ($(this).val() === "0") {
- $(".HttpTls").closest('tr').hide();
+ $(".style_tls").closest('tr').hide();
} else {
- $(".HttpTls").closest('tr').show();
+ $(".style_tls").closest('tr').show();
+ }
+ });
+
+ $("#handle\\.HandleDirective").change(function() {
+ if ($(this).val() === "redir") {
+ $(".style_reverse_proxy").prop('disabled', true);
+ $("#handle\\.header").selectpicker('refresh');
+ } else {
+ $(".style_reverse_proxy").prop('disabled', false);
+ $("#handle\\.header").selectpicker('refresh');
}
});
$("#reverse\\.DisableTls").change(function() {
if ($(this).val() === "1") {
- $(".DisableTls").closest('tr').hide();
+ $(".style_tls").closest('tr').hide();
} else {
- $(".DisableTls").closest('tr').show();
+ $(".style_tls").closest('tr').show();
}
});
@@ -468,6 +477,7 @@
| {{ lang._('Handler') }} |
{{ lang._('Path') }} |
{{ lang._('HTTP Headers') }} |
+ {{ lang._('Directive') }} |
{{ lang._('Protocol') }} |
{{ lang._('Upstream Domain') }} |
{{ lang._('Upstream Port') }} |
diff --git a/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile b/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
index a710e61ed..0fd8fc9fd 100644
--- a/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
+++ b/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
@@ -384,10 +384,11 @@ http://{{ domain }} {
{% if handle.ForwardAuth|default("0") == "1" %}
{% include "OPNsense/Caddy/includeAuthProvider" %}
{% endif %}
- {% if handle.ToPath|default("") != "" %}
+ {% if handle.HandleDirective == "reverse_proxy" and handle.ToPath|default("") != "" %}
rewrite * {{ handle.ToPath }}{uri}
{% endif %}
- reverse_proxy {% for domain in handle.ToDomain.split(',') %}
+ {% if handle.HandleDirective == "reverse_proxy" %}
+ {{ handle.HandleDirective }} {% for domain in handle.ToDomain.split(',') %}
{# Check if the domain is IPv6 and wrap in square brackets if necessary #}
{% set is_ipv6 = (':' in domain and domain.count(':') >= 2) %}
{# For each domain/IP, append the port if it's specified, followed by a space #}
@@ -430,6 +431,18 @@ http://{{ domain }} {
}
{% endif %}
}
+ {% else %}
+ {% set protocol = 'https://' if handle.HttpTls == "1" else 'http://' %}
+ {% set domain = handle.ToDomain.split(',')[0] %}
+ {% set is_ipv6 = (':' in domain and domain.count(':') >= 2) %}
+ {% set formatted_domain = ('[' ~ domain ~ ']') if is_ipv6 else domain %}
+ {% if handle.ToPort %}
+ {% set domain_with_port = formatted_domain ~ ':' ~ handle.ToPort %}
+ {% else %}
+ {% set domain_with_port = formatted_domain %}
+ {% endif %}
+ {{ handle.HandleDirective }} {{ protocol }}{{ domain_with_port }}{{ handle.ToPath|default("{uri}") }}
+ {% endif %}
}
{% endmacro %}