From 389c8a82cc462e1e8b641c8fa2908ac9efb3d762 Mon Sep 17 00:00:00 2001 From: andrexlenx <68218650+andrexlenx@users.noreply.github.com> Date: Thu, 11 Jun 2026 14:08:24 +0200 Subject: [PATCH 1/2] feat: add Ionos DNS Provider --- agent/utils/ssl/dns_provider.go | 56 ++++++++++++------- frontend/src/global/mimetype.ts | 8 +++ .../website/ssl/dns-account/create/index.vue | 11 +++- 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/agent/utils/ssl/dns_provider.go b/agent/utils/ssl/dns_provider.go index 11fd5909bd6e..769461f937b0 100644 --- a/agent/utils/ssl/dns_provider.go +++ b/agent/utils/ssl/dns_provider.go @@ -20,6 +20,8 @@ import ( "github.com/go-acme/lego/v5/providers/dns/freemyip" "github.com/go-acme/lego/v5/providers/dns/godaddy" "github.com/go-acme/lego/v5/providers/dns/huaweicloud" + "github.com/go-acme/lego/v5/providers/dns/ionos" + "github.com/go-acme/lego/v5/providers/dns/ionoscloud" "github.com/go-acme/lego/v5/providers/dns/namecheap" "github.com/go-acme/lego/v5/providers/dns/namedotcom" "github.com/go-acme/lego/v5/providers/dns/namesilo" @@ -37,34 +39,35 @@ import ( ) type DnsType string - const ( + AcmeDNS DnsType = "AcmeDNS" AliYun DnsType = "AliYun" AliESA DnsType = "AliESA" - AWSRoute53 DnsType = "AWSRoute53" - CloudFlare DnsType = "CloudFlare" + BaiduCloud DnsType = "BaiduCloud" CloudDns DnsType = "CloudDns" - NameSilo DnsType = "NameSilo" - NameCheap DnsType = "NameCheap" - NameCom DnsType = "NameCom" - Godaddy DnsType = "Godaddy" - TencentCloud DnsType = "TencentCloud" - RainYun DnsType = "RainYun" - Volcengine DnsType = "Volcengine" - HuaweiCloud DnsType = "HuaweiCloud" - FreeMyIP DnsType = "FreeMyIP" - Vercel DnsType = "Vercel" - Spaceship DnsType = "Spaceship" - WestCN DnsType = "WestCN" + CloudFlare DnsType = "CloudFlare" ClouDNS DnsType = "ClouDNS" - RegRu DnsType = "RegRu" - Dynu DnsType = "Dynu" Dynadot DnsType = "Dynadot" - BaiduCloud DnsType = "BaiduCloud" + Dynu DnsType = "Dynu" + FreeMyIP DnsType = "FreeMyIP" + Godaddy DnsType = "Godaddy" + HuaweiCloud DnsType = "HuaweiCloud" + Ionos DnsType = "Ionos" + IonosCloud DnsType = "IonosCloud" + NameCheap DnsType = "NameCheap" + NameCom DnsType = "NameCom" + NameSilo DnsType = "NameSilo" Ovh DnsType = "Ovh" - AcmeDNS DnsType = "AcmeDNS" PorkBun DnsType = "PorkBun" + RainYun DnsType = "RainYun" + RegRu DnsType = "RegRu" + AWSRoute53 DnsType = "AWSRoute53" + Spaceship DnsType = "Spaceship" Technitium DnsType = "Technitium" + TencentCloud DnsType = "TencentCloud" + Vercel DnsType = "Vercel" + Volcengine DnsType = "Volcengine" + WestCN DnsType = "WestCN" ) type DNSParam struct { @@ -76,6 +79,7 @@ type DNSParam struct { APIkey string `json:"apiKey"` APIUser string `json:"apiUser"` APISecret string `json:"apiSecret"` + APIPrefix string `json:"apiPrefix"` SecretID string `json:"secretID"` ClientID string `json:"clientID"` Password string `json:"password"` @@ -219,6 +223,20 @@ func getDNSProviderConfig(dnsType DnsType, params string, httpClient *http.Clien config.PollingInterval = pollingInterval config.TTL = int32(ttl) p, err = huaweicloud.NewDNSProviderConfig(config) + case Ionos: + config := newDNSProviderConfig(ionos.NewDefaultConfig(), httpClient) + config.APIKey = param.APIPrefix + '.' + param.APISecret + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = ionos.NewDNSProviderConfig(config) + case IonosCloud: + config := newDNSProviderConfig(ionoscloud.NewDefaultConfig(), httpClient) + config.APIToken = param.Token + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = ionoscloud.NewDNSProviderConfig(config) case FreeMyIP: config := newDNSProviderConfig(freemyip.NewDefaultConfig(), httpClient) config.Token = param.Token diff --git a/frontend/src/global/mimetype.ts b/frontend/src/global/mimetype.ts index 32cb89e07c22..2e0612264c4b 100644 --- a/frontend/src/global/mimetype.ts +++ b/frontend/src/global/mimetype.ts @@ -285,6 +285,14 @@ export const DNSTypes = [ label: 'Technitium', value: 'Technitium', }, + { + label: 'Ionos', + value: 'Ionos', + }, + { + label: 'Ionos Cloud', + value: 'IonosCloud', + }, ]; export const Fields = [ diff --git a/frontend/src/views/website/ssl/dns-account/create/index.vue b/frontend/src/views/website/ssl/dns-account/create/index.vue index 707dfe0c4eb4..bcd180aaa106 100644 --- a/frontend/src/views/website/ssl/dns-account/create/index.vue +++ b/frontend/src/views/website/ssl/dns-account/create/index.vue @@ -110,11 +110,19 @@ -
+
+
+ + + + + + +
@@ -232,6 +240,7 @@ const rules = ref({ apiUser: [Rules.requiredInput], secretID: [Rules.requiredInput], apiSecret: [Rules.requiredInput], + apiPrefix: [Rules.requiredInput], username: [Rules.requiredInput], password: [Rules.requiredInput], }, From 2b4bb6d818d0d9bc916daa260885c827ed0eedb8 Mon Sep 17 00:00:00 2001 From: Andrea Leone <68218650+andrexlenx@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:59:09 +0200 Subject: [PATCH 2/2] Fix typo string formatting for APIKey in Ionos config --- agent/utils/ssl/dns_provider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/utils/ssl/dns_provider.go b/agent/utils/ssl/dns_provider.go index 769461f937b0..08b9d253dc75 100644 --- a/agent/utils/ssl/dns_provider.go +++ b/agent/utils/ssl/dns_provider.go @@ -225,7 +225,7 @@ func getDNSProviderConfig(dnsType DnsType, params string, httpClient *http.Clien p, err = huaweicloud.NewDNSProviderConfig(config) case Ionos: config := newDNSProviderConfig(ionos.NewDefaultConfig(), httpClient) - config.APIKey = param.APIPrefix + '.' + param.APISecret + config.APIKey = param.APIPrefix + "." + param.APISecret config.PropagationTimeout = propagationTimeout config.PollingInterval = pollingInterval config.TTL = ttl