From c590eef1e27d54a3844f34c8476bd7a64a17936c Mon Sep 17 00:00:00 2001
From: Monviech <79600909+Monviech@users.noreply.github.com>
Date: Mon, 30 Jun 2025 10:06:10 +0200
Subject: [PATCH] www/caddy: Add global servers timeouts options (#4778)
* www/caddy: Add global servers timeouts options
* www/caddy: Bump version and changelog
* www/caddy: Add changelog
---
www/caddy/Makefile | 2 +-
www/caddy/pkg-descr | 6 +++
.../OPNsense/Caddy/forms/general.xml | 40 +++++++++++++++++++
.../mvc/app/models/OPNsense/Caddy/Caddy.xml | 16 ++++++++
.../templates/OPNsense/Caddy/Caddyfile | 20 ++++++++++
5 files changed, 83 insertions(+), 1 deletion(-)
diff --git a/www/caddy/Makefile b/www/caddy/Makefile
index 08f8f247a..5b9504ba7 100644
--- a/www/caddy/Makefile
+++ b/www/caddy/Makefile
@@ -1,5 +1,5 @@
PLUGIN_NAME= caddy
-PLUGIN_VERSION= 2.0.1
+PLUGIN_VERSION= 2.0.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 6eb887b28..9845f3f37 100644
--- a/www/caddy/pkg-descr
+++ b/www/caddy/pkg-descr
@@ -6,6 +6,12 @@ DOC: https://docs.opnsense.org/manual/how-tos/caddy.html
Plugin Changelog
================
+2.0.2
+
+Add: Global server timeout options (opnsense/plugins/pull/4778)
+Cleanup: Change all camelCase to snake_case in api notations (opnsense/plugins/pull/4767,4768,4776)
+Cleanup: Use SimpleActionButton in general.volt (opnsense/plugins/pull/4779)
+
2.0.1
Add: Active health checks to handlers (contributed by zaben903) (opnsense/plugins/pull/4721)
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 849ea61d7..bb7d29b7b 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
@@ -26,12 +26,20 @@
+
+ header
+
+
caddy.general.DisableSuperuser
dropdown
+
+ header
+
+
caddy.general.HttpVersions
@@ -52,6 +60,10 @@
443
+
+ header
+
+
caddy.general.accesslist
@@ -75,6 +87,34 @@
10
+
+ caddy.general.timeout_read_body
+
+ text
+ no timout
+
+
+
+ caddy.general.timeout_read_header
+
+ text
+ no timout
+
+
+
+ caddy.general.timeout_write
+
+ text
+ no timout
+
+
+
+ caddy.general.timeout_idle
+
+ text
+ 300
+
+
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 3bf5aa4c3..a1b829a4a 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
@@ -89,6 +89,22 @@
HTTP/3
+
+ 0
+ Please enter a minimum value of 0 or leave empty for defaults.
+
+
+ 0
+ Please enter a minimum value of 0 or leave empty for defaults.
+
+
+ 0
+ Please enter a minimum value of 0 or leave empty for defaults.
+
+
+ 0
+ Please enter a minimum value of 0 or leave empty for defaults.
+
diff --git a/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile b/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
index 7c30c2f68..997a746f4 100644
--- a/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
+++ b/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
@@ -93,9 +93,29 @@
{% endif %}
{% endfor %}
{% endif %}
+
{% if generalSettings.LogCredentials|default("0") == "1" %}
log_credentials
{% endif %}
+ {% if generalSettings.timeout_read_body or
+ generalSettings.timeout_read_header or
+ generalSettings.timeout_write or
+ generalSettings.timeout_idle %}
+ timeouts {
+ {% if generalSettings.timeout_read_body %}
+ read_body {{ generalSettings.timeout_read_body }}s
+ {% endif %}
+ {% if generalSettings.timeout_read_header %}
+ read_header {{ generalSettings.timeout_read_header }}s
+ {% endif %}
+ {% if generalSettings.timeout_write %}
+ write {{ generalSettings.timeout_write }}s
+ {% endif %}
+ {% if generalSettings.timeout_idle %}
+ idle {{ generalSettings.timeout_idle }}s
+ {% endif %}
+ }
+ {% endif %}
{% if generalSettings.EnableLayer4|default("0") == "1" %}
listener_wrappers {
layer4 {