From 248c7e7fbf4b710af8c897e4988bc850379d2d50 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Sun, 30 Jun 2024 20:01:38 +0200 Subject: [PATCH] dns/ddclient - add (optional) descriptive name for account selection to native backend, closes https://github.com/opnsense/plugins/issues/3553 --- dns/ddclient/Makefile | 4 ++-- dns/ddclient/pkg-descr | 5 +++++ .../models/OPNsense/DynDNS/FieldTypes/ServiceField.php | 5 ++--- .../opnsense/scripts/ddclient/lib/account/__init__.py | 2 +- .../src/opnsense/scripts/ddclient/lib/account/azure.py | 2 +- .../scripts/ddclient/lib/account/cloudflare.py | 10 ++-------- .../src/opnsense/scripts/ddclient/lib/poller.py | 9 +++++++-- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/dns/ddclient/Makefile b/dns/ddclient/Makefile index fcf1873f7..21c94f61a 100644 --- a/dns/ddclient/Makefile +++ b/dns/ddclient/Makefile @@ -1,6 +1,6 @@ PLUGIN_NAME= ddclient -PLUGIN_VERSION= 1.21 -PLUGIN_REVISION= 2 +PLUGIN_VERSION= 1.22 +#PLUGIN_REVISION= 1 PLUGIN_DEPENDS= ddclient py${PLUGIN_PYTHON}-boto3 PLUGIN_COMMENT= Dynamic DNS client PLUGIN_MAINTAINER= ad@opnsense.org diff --git a/dns/ddclient/pkg-descr b/dns/ddclient/pkg-descr index a54d3b570..8f61187af 100644 --- a/dns/ddclient/pkg-descr +++ b/dns/ddclient/pkg-descr @@ -6,6 +6,11 @@ WWW: https://github.com/ddclient/ddclient Plugin Changelog ================ +1.22 + +* Add gandi support +* Optionally support descriptive values for account selection when using native backend + 1.21 * Add Netcup support (contributed by Ingo Lafrenz) diff --git a/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/FieldTypes/ServiceField.php b/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/FieldTypes/ServiceField.php index 891423c1b..46798b5fa 100644 --- a/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/FieldTypes/ServiceField.php +++ b/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/FieldTypes/ServiceField.php @@ -42,9 +42,8 @@ class ServiceField extends BaseListField if ((string)$this->getParentModel()->general->backend == 'opnsense') { $supported = json_decode((new Backend())->configdRun("ddclient opnbackend supported"), true); if (!empty($supported)) { - foreach ($supported as $srv) { - self::$internalCacheOptionList[$srv] = $srv; - } + self::$internalCacheOptionList = $supported; + asort(self::$internalCacheOptionList, SORT_NATURAL | SORT_FLAG_CASE); } } } diff --git a/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/__init__.py b/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/__init__.py index a5cb502ea..4c3716b95 100755 --- a/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/__init__.py +++ b/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/__init__.py @@ -61,7 +61,7 @@ class BaseAccount: @staticmethod def known_services(): - return [] + return {} @property def id(self): diff --git a/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/azure.py b/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/azure.py index 64a635ab0..e368b0f61 100755 --- a/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/azure.py +++ b/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/azure.py @@ -82,7 +82,7 @@ class Azure(BaseAccount): @staticmethod def known_services(): - return Azure._services + return {'azure': 'Microsoft Azure'} @staticmethod def match(account): diff --git a/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/cloudflare.py b/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/cloudflare.py index f5bd716ba..6620e2431 100755 --- a/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/cloudflare.py +++ b/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/cloudflare.py @@ -42,7 +42,7 @@ class Cloudflare(BaseAccount): @staticmethod def known_services(): - return Cloudflare._services.keys() + return {'cloudflare': 'Cloudflare'} @staticmethod def match(account): @@ -51,13 +51,7 @@ class Cloudflare(BaseAccount): def execute(self): if super().execute(): # IPv4/IPv6 - recordType = None - if str(self.current_address).find(':') > 1: - #IPv6 - recordType = "AAAA" - else: - #IPv4 - recordType = "A" + recordType = "AAAA" if str(self.current_address).find(':') > 1 else "A" # get ZoneID url = "https://%s/client/v4/zones" % self._services[self.settings.get('service')] diff --git a/dns/ddclient/src/opnsense/scripts/ddclient/lib/poller.py b/dns/ddclient/src/opnsense/scripts/ddclient/lib/poller.py index d338ce569..bb1d4900b 100755 --- a/dns/ddclient/src/opnsense/scripts/ddclient/lib/poller.py +++ b/dns/ddclient/src/opnsense/scripts/ddclient/lib/poller.py @@ -63,9 +63,14 @@ class AccountFactory: return handler(account) def known_services(self): - all_services = [] + all_services = {} for handler in self._account_classes: - all_services += handler.known_services() + data = handler.known_services() + if type(data) is dict: + all_services.update(data) + else: + for item in data: + all_services[item] = item return all_services