From 2f625afc1995edd47cde0b7ea00efc9c7630bbdc Mon Sep 17 00:00:00 2001
From: Monviech <79600909+Monviech@users.noreply.github.com>
Date: Mon, 10 Jun 2024 08:23:10 +0200
Subject: [PATCH] www/caddy: Change "check_interval" and "ttl" to seconds, add
"update_only" option (#4038)
* www/caddy: Change TTL of DNS Records set by dynamic DNS. TTL can be left empty to use system defaults, or a value in seconds.
* Add changelog.
* Change DynDnsCheckInterval to DynDnsInterval, using seconds. Field is allowed to be empty, it uses the system default of 1800s (30m) from the module if undefined. Improve help text. Add validation range to model.
* Add new Update Only field to Dynamic Dns. Add validations to model that were forgot in last commit.
* Update parameter comments in Caddyfile.
* Forgot to change fieldname in form controller.
---
www/caddy/pkg-descr | 2 ++
.../OPNsense/Caddy/forms/dynamicdns.xml | 19 +++++++++-----
.../mvc/app/models/OPNsense/Caddy/Caddy.xml | 25 ++++++++-----------
.../templates/OPNsense/Caddy/Caddyfile | 19 ++++++++------
4 files changed, 38 insertions(+), 27 deletions(-)
diff --git a/www/caddy/pkg-descr b/www/caddy/pkg-descr
index e0b12623d..85d66a474 100644
--- a/www/caddy/pkg-descr
+++ b/www/caddy/pkg-descr
@@ -33,6 +33,8 @@ Plugin Changelog
* Add: Error message when Auto HTTPS is enabled, and ACME email field is empty, for caddy v2.8.4
* Cleanup: Fix crash of searchAction when reverseUuids is null
* Cleanup: basicauth directive is now basic_auth in the Caddyfile template, for caddy v2.8.4
+* Change: Dynamic DNS "TTL" and "Check Interval" have been changed to seconds. Existing values have been reset to use the defaults of the implementation.
+* Add: Dynamic DNS now supports "Update Only", only updating existing records without creating new ones.
* Fix: The subdomain port field has been removed, since it is unsupported. Subdomains track their ports from their parent wildcard domain.
* Add: DNS Providers: dnsmadeeasy, bunny, civo, scaleway, acmeproxy, inwx, namedotcom, easydns, infomaniak, directadmin, hosttech, vultr
* Remove: DNS Providers: godaddy
diff --git a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dynamicdns.xml b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dynamicdns.xml
index 3304ac080..e465103ba 100644
--- a/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dynamicdns.xml
+++ b/www/caddy/src/opnsense/mvc/app/controllers/OPNsense/Caddy/forms/dynamicdns.xml
@@ -6,16 +6,23 @@
- caddy.general.DynDnsCheckInterval
-
- text
-
+ caddy.general.DynDnsUpdateOnly
+
+ checkbox
+
- caddy.general.DynDnsTTL
+ caddy.general.DynDnsInterval
+
+ text
+ 1800
+
+
+
+ caddy.general.DynDnsTtltext
-
+ header
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 d65186476..eab9054cd 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/caddyA GUI model for configuring a reverse proxy in the Caddy web server.
- 1.2.1
+ 1.2.2
@@ -108,13 +108,11 @@
Please enter a valid URL, starting with http or https.
-
- 5
+ 1
- 1440
- Please enter a valid number from 1 to 1440 minutes.
- Y
-
+ 2147483647
+ Please enter a valid number from 1 to 2147483647 seconds or leave empty for default.
+
IPv4+IPv6
@@ -122,13 +120,12 @@
IPv6 only
-
- 1
- 1
- 24
- Please enter a valid number from 1 to 24 hours.
- Y
-
+
+ 0
+ 2147483647
+ Please enter a valid number from 0 to 2147483647 seconds or leave empty for default.
+
+
diff --git a/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile b/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
index 63598f962..6640f0c4e 100644
--- a/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
+++ b/www/caddy/src/opnsense/service/templates/OPNsense/Caddy/Caddyfile
@@ -101,10 +101,11 @@
# - @param dnsOptionalField1 to 4 (string): Optional configuration field for the DNS provider.
# - @param dynDnsSimpleHttp (string): URL for a simple HTTP-based service to discover the server's public IP.
# - @param dynDnsInterface (string): Network interface(s) to use for IP discovery.
- # - @param dynDnsCheckInterval (integer): Interval in minutes to check for IP changes.
+ # - @param dynDnsCheckInterval (integer): Interval in seconds to check for IP changes. Can be empty for defaults.
# - @param dynDnsIpVersions (string): The IP version(s) (IPv4, IPv6) for the DDNS update.
- # - @param dynDnsTTL (integer): Time-To-Live for the DNS records, in hours.
+ # - @param dynDnsTtl (integer): Time-To-Live for the DNS records, in seconds. Can be empty for defaults.
# - @param dynDnsDomains (list): Domains and subdomains list for which DDNS updates are enabled.
+ # - @param dynDnsUpdateOnly (boolean): If set, only updates DNS records, not creating new ones.
#}
{% set dnsProvider = helpers.toList('Pischem.caddy.general.TlsDnsProvider') | first %}
{% set dnsApiKey = generalSettings.TlsDnsApiKey %}
@@ -115,9 +116,10 @@
{% set dnsOptionalField4 = generalSettings.TlsDnsOptionalField4 %}
{% set dynDnsSimpleHttp = generalSettings.DynDnsSimpleHttp %}
{% set dynDnsInterface = generalSettings.DynDnsInterface %}
- {% set dynDnsCheckInterval = generalSettings.DynDnsCheckInterval %}
+ {% set dynDnsUpdateOnly = generalSettings.DynDnsUpdateOnly %}
+ {% set dynDnsCheckInterval = generalSettings.DynDnsInterval %}
{% set dynDnsIpVersions = generalSettings.DynDnsIpVersions %}
- {% set dynDnsTTL = generalSettings.DynDnsTTL %}
+ {% set dynDnsTtl = generalSettings.DynDnsTtl %}
{% set dynDnsDomains = [] %}
{% for reverse in helpers.toList('Pischem.caddy.reverseproxy.reverse') %}
@@ -330,13 +332,16 @@
ip_source interface {{ physicalInterfaceNames | join(',') }}
{% endif %}
{% if dynDnsCheckInterval %}
- check_interval {{ dynDnsCheckInterval }}m
+ check_interval {{ dynDnsCheckInterval }}s
{% endif %}
{% if dynDnsIpVersions %}
versions {{ dynDnsIpVersions }}
{% endif %}
- {% if dynDnsTTL %}
- ttl {{ dynDnsTTL }}h
+ {% if dynDnsTtl %}
+ ttl {{ dynDnsTtl }}s
+ {% endif %}
+ {% if dynDnsUpdateOnly|default("0") == "1" %}
+ update_only
{% endif %}
}
{% endif %}