diff --git a/src/api.go b/src/api.go index da4e6c1..19b3aa3 100644 --- a/src/api.go +++ b/src/api.go @@ -5,6 +5,7 @@ import ( "net/http" "net/http/pprof" + "imuslab.com/zoraxy/mod/acme/acmedns" "imuslab.com/zoraxy/mod/acme/acmewizard" "imuslab.com/zoraxy/mod/auth" "imuslab.com/zoraxy/mod/netstat" @@ -191,6 +192,7 @@ func initAPIs() { authRouter.HandleFunc("/api/acme/autoRenew/listDomains", acmeAutoRenewer.HandleLoadAutoRenewDomains) authRouter.HandleFunc("/api/acme/autoRenew/renewPolicy", acmeAutoRenewer.HandleRenewPolicy) authRouter.HandleFunc("/api/acme/autoRenew/renewNow", acmeAutoRenewer.HandleRenewNow) + authRouter.HandleFunc("/api/acme/dns/providers", acmedns.HandleServeProvidersJson) authRouter.HandleFunc("/api/acme/wizard", acmewizard.HandleGuidedStepCheck) //ACME Wizard //Static Web Server diff --git a/src/mod/acme/acmedns/acmedns.go b/src/mod/acme/acmedns/acmedns.go new file mode 100644 index 0000000..bfad512 --- /dev/null +++ b/src/mod/acme/acmedns/acmedns.go @@ -0,0 +1,982 @@ +package acmedns +/* + THIS MODULE IS GENERATED AUTOMATICALLY + DO NOT EDIT THIS FILE +*/ +import ( + "encoding/json" + "fmt" + + "github.com/go-acme/lego/v4/challenge" + "github.com/go-acme/lego/v4/providers/dns/alidns" + "github.com/go-acme/lego/v4/providers/dns/allinkl" + "github.com/go-acme/lego/v4/providers/dns/arvancloud" + "github.com/go-acme/lego/v4/providers/dns/auroradns" + "github.com/go-acme/lego/v4/providers/dns/autodns" + "github.com/go-acme/lego/v4/providers/dns/azure" + "github.com/go-acme/lego/v4/providers/dns/azuredns" + "github.com/go-acme/lego/v4/providers/dns/bindman" + "github.com/go-acme/lego/v4/providers/dns/bluecat" + "github.com/go-acme/lego/v4/providers/dns/brandit" + "github.com/go-acme/lego/v4/providers/dns/bunny" + "github.com/go-acme/lego/v4/providers/dns/checkdomain" + "github.com/go-acme/lego/v4/providers/dns/civo" + "github.com/go-acme/lego/v4/providers/dns/clouddns" + "github.com/go-acme/lego/v4/providers/dns/cloudflare" + "github.com/go-acme/lego/v4/providers/dns/cloudns" + "github.com/go-acme/lego/v4/providers/dns/cloudru" + "github.com/go-acme/lego/v4/providers/dns/cloudxns" + "github.com/go-acme/lego/v4/providers/dns/conoha" + "github.com/go-acme/lego/v4/providers/dns/constellix" + "github.com/go-acme/lego/v4/providers/dns/cpanel" + "github.com/go-acme/lego/v4/providers/dns/derak" + "github.com/go-acme/lego/v4/providers/dns/desec" + "github.com/go-acme/lego/v4/providers/dns/digitalocean" + "github.com/go-acme/lego/v4/providers/dns/dnshomede" + "github.com/go-acme/lego/v4/providers/dns/dnsimple" + "github.com/go-acme/lego/v4/providers/dns/dnsmadeeasy" + "github.com/go-acme/lego/v4/providers/dns/dnspod" + "github.com/go-acme/lego/v4/providers/dns/dode" + "github.com/go-acme/lego/v4/providers/dns/domeneshop" + "github.com/go-acme/lego/v4/providers/dns/dreamhost" + "github.com/go-acme/lego/v4/providers/dns/duckdns" + "github.com/go-acme/lego/v4/providers/dns/dyn" + "github.com/go-acme/lego/v4/providers/dns/dynu" + "github.com/go-acme/lego/v4/providers/dns/easydns" + "github.com/go-acme/lego/v4/providers/dns/efficientip" + "github.com/go-acme/lego/v4/providers/dns/epik" + "github.com/go-acme/lego/v4/providers/dns/exoscale" + "github.com/go-acme/lego/v4/providers/dns/freemyip" + "github.com/go-acme/lego/v4/providers/dns/gandi" + "github.com/go-acme/lego/v4/providers/dns/gandiv5" + "github.com/go-acme/lego/v4/providers/dns/gcore" + "github.com/go-acme/lego/v4/providers/dns/glesys" + "github.com/go-acme/lego/v4/providers/dns/godaddy" + "github.com/go-acme/lego/v4/providers/dns/googledomains" + "github.com/go-acme/lego/v4/providers/dns/hetzner" + "github.com/go-acme/lego/v4/providers/dns/hostingde" + "github.com/go-acme/lego/v4/providers/dns/hosttech" + "github.com/go-acme/lego/v4/providers/dns/httpnet" + "github.com/go-acme/lego/v4/providers/dns/hyperone" + "github.com/go-acme/lego/v4/providers/dns/ibmcloud" + "github.com/go-acme/lego/v4/providers/dns/iij" + "github.com/go-acme/lego/v4/providers/dns/iijdpf" + "github.com/go-acme/lego/v4/providers/dns/infoblox" + "github.com/go-acme/lego/v4/providers/dns/infomaniak" + "github.com/go-acme/lego/v4/providers/dns/internetbs" + "github.com/go-acme/lego/v4/providers/dns/inwx" + "github.com/go-acme/lego/v4/providers/dns/ionos" + "github.com/go-acme/lego/v4/providers/dns/ipv64" + "github.com/go-acme/lego/v4/providers/dns/iwantmyname" + "github.com/go-acme/lego/v4/providers/dns/joker" + "github.com/go-acme/lego/v4/providers/dns/liara" + "github.com/go-acme/lego/v4/providers/dns/lightsail" + "github.com/go-acme/lego/v4/providers/dns/linode" + "github.com/go-acme/lego/v4/providers/dns/liquidweb" + "github.com/go-acme/lego/v4/providers/dns/loopia" + "github.com/go-acme/lego/v4/providers/dns/luadns" + "github.com/go-acme/lego/v4/providers/dns/mailinabox" + "github.com/go-acme/lego/v4/providers/dns/metaname" + "github.com/go-acme/lego/v4/providers/dns/mydnsjp" + "github.com/go-acme/lego/v4/providers/dns/namecheap" + "github.com/go-acme/lego/v4/providers/dns/namedotcom" + "github.com/go-acme/lego/v4/providers/dns/namesilo" + "github.com/go-acme/lego/v4/providers/dns/nearlyfreespeech" + "github.com/go-acme/lego/v4/providers/dns/netcup" + "github.com/go-acme/lego/v4/providers/dns/netlify" + "github.com/go-acme/lego/v4/providers/dns/nicmanager" + "github.com/go-acme/lego/v4/providers/dns/nifcloud" + "github.com/go-acme/lego/v4/providers/dns/njalla" + "github.com/go-acme/lego/v4/providers/dns/nodion" + "github.com/go-acme/lego/v4/providers/dns/ns1" + "github.com/go-acme/lego/v4/providers/dns/otc" + "github.com/go-acme/lego/v4/providers/dns/ovh" + "github.com/go-acme/lego/v4/providers/dns/pdns" + "github.com/go-acme/lego/v4/providers/dns/plesk" + "github.com/go-acme/lego/v4/providers/dns/porkbun" + "github.com/go-acme/lego/v4/providers/dns/rackspace" + "github.com/go-acme/lego/v4/providers/dns/rcodezero" + "github.com/go-acme/lego/v4/providers/dns/regru" + "github.com/go-acme/lego/v4/providers/dns/rfc2136" + "github.com/go-acme/lego/v4/providers/dns/rimuhosting" + "github.com/go-acme/lego/v4/providers/dns/route53" + "github.com/go-acme/lego/v4/providers/dns/safedns" + "github.com/go-acme/lego/v4/providers/dns/sakuracloud" + "github.com/go-acme/lego/v4/providers/dns/scaleway" + "github.com/go-acme/lego/v4/providers/dns/selectel" + "github.com/go-acme/lego/v4/providers/dns/servercow" + "github.com/go-acme/lego/v4/providers/dns/shellrent" + "github.com/go-acme/lego/v4/providers/dns/simply" + "github.com/go-acme/lego/v4/providers/dns/sonic" + "github.com/go-acme/lego/v4/providers/dns/stackpath" + "github.com/go-acme/lego/v4/providers/dns/tencentcloud" + "github.com/go-acme/lego/v4/providers/dns/transip" + "github.com/go-acme/lego/v4/providers/dns/ultradns" + "github.com/go-acme/lego/v4/providers/dns/variomedia" + "github.com/go-acme/lego/v4/providers/dns/vegadns" + "github.com/go-acme/lego/v4/providers/dns/vercel" + "github.com/go-acme/lego/v4/providers/dns/versio" + "github.com/go-acme/lego/v4/providers/dns/vinyldns" + "github.com/go-acme/lego/v4/providers/dns/vkcloud" + "github.com/go-acme/lego/v4/providers/dns/vscale" + "github.com/go-acme/lego/v4/providers/dns/vultr" + "github.com/go-acme/lego/v4/providers/dns/webnames" + "github.com/go-acme/lego/v4/providers/dns/websupport" + "github.com/go-acme/lego/v4/providers/dns/wedos" + "github.com/go-acme/lego/v4/providers/dns/yandex" + "github.com/go-acme/lego/v4/providers/dns/yandex360" + "github.com/go-acme/lego/v4/providers/dns/yandexcloud" + "github.com/go-acme/lego/v4/providers/dns/zoneee" + "github.com/go-acme/lego/v4/providers/dns/zonomi" + +) + +//name is the DNS provider name, e.g. cloudflare or gandi +//JSON (js) must be in key-value string that match ConfigableFields Title in providers.json, e.g. {"Username":"far","Password":"boo"} +func GetDNSProviderByJsonConfig(name string, js string)(challenge.Provider, error){ + switch name { + + case "alidns": + cfg := alidns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return alidns.NewDNSProviderConfig(&cfg) + case "allinkl": + cfg := allinkl.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return allinkl.NewDNSProviderConfig(&cfg) + case "arvancloud": + cfg := arvancloud.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return arvancloud.NewDNSProviderConfig(&cfg) + case "auroradns": + cfg := auroradns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return auroradns.NewDNSProviderConfig(&cfg) + case "autodns": + cfg := autodns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return autodns.NewDNSProviderConfig(&cfg) + case "azure": + cfg := azure.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return azure.NewDNSProviderConfig(&cfg) + case "azuredns": + cfg := azuredns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return azuredns.NewDNSProviderConfig(&cfg) + case "bindman": + cfg := bindman.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return bindman.NewDNSProviderConfig(&cfg) + case "bluecat": + cfg := bluecat.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return bluecat.NewDNSProviderConfig(&cfg) + case "brandit": + cfg := brandit.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return brandit.NewDNSProviderConfig(&cfg) + case "bunny": + cfg := bunny.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return bunny.NewDNSProviderConfig(&cfg) + case "checkdomain": + cfg := checkdomain.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return checkdomain.NewDNSProviderConfig(&cfg) + case "civo": + cfg := civo.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return civo.NewDNSProviderConfig(&cfg) + case "clouddns": + cfg := clouddns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return clouddns.NewDNSProviderConfig(&cfg) + case "cloudflare": + cfg := cloudflare.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return cloudflare.NewDNSProviderConfig(&cfg) + case "cloudns": + cfg := cloudns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return cloudns.NewDNSProviderConfig(&cfg) + case "cloudru": + cfg := cloudru.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return cloudru.NewDNSProviderConfig(&cfg) + case "cloudxns": + cfg := cloudxns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return cloudxns.NewDNSProviderConfig(&cfg) + case "conoha": + cfg := conoha.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return conoha.NewDNSProviderConfig(&cfg) + case "constellix": + cfg := constellix.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return constellix.NewDNSProviderConfig(&cfg) + case "cpanel": + cfg := cpanel.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return cpanel.NewDNSProviderConfig(&cfg) + case "derak": + cfg := derak.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return derak.NewDNSProviderConfig(&cfg) + case "desec": + cfg := desec.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return desec.NewDNSProviderConfig(&cfg) + case "digitalocean": + cfg := digitalocean.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return digitalocean.NewDNSProviderConfig(&cfg) + case "dnshomede": + cfg := dnshomede.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return dnshomede.NewDNSProviderConfig(&cfg) + case "dnsimple": + cfg := dnsimple.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return dnsimple.NewDNSProviderConfig(&cfg) + case "dnsmadeeasy": + cfg := dnsmadeeasy.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return dnsmadeeasy.NewDNSProviderConfig(&cfg) + case "dnspod": + cfg := dnspod.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return dnspod.NewDNSProviderConfig(&cfg) + case "dode": + cfg := dode.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return dode.NewDNSProviderConfig(&cfg) + case "domeneshop": + cfg := domeneshop.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return domeneshop.NewDNSProviderConfig(&cfg) + case "dreamhost": + cfg := dreamhost.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return dreamhost.NewDNSProviderConfig(&cfg) + case "duckdns": + cfg := duckdns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return duckdns.NewDNSProviderConfig(&cfg) + case "dyn": + cfg := dyn.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return dyn.NewDNSProviderConfig(&cfg) + case "dynu": + cfg := dynu.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return dynu.NewDNSProviderConfig(&cfg) + case "easydns": + cfg := easydns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return easydns.NewDNSProviderConfig(&cfg) + case "efficientip": + cfg := efficientip.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return efficientip.NewDNSProviderConfig(&cfg) + case "epik": + cfg := epik.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return epik.NewDNSProviderConfig(&cfg) + case "exoscale": + cfg := exoscale.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return exoscale.NewDNSProviderConfig(&cfg) + case "freemyip": + cfg := freemyip.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return freemyip.NewDNSProviderConfig(&cfg) + case "gandi": + cfg := gandi.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return gandi.NewDNSProviderConfig(&cfg) + case "gandiv5": + cfg := gandiv5.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return gandiv5.NewDNSProviderConfig(&cfg) + case "gcore": + cfg := gcore.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return gcore.NewDNSProviderConfig(&cfg) + case "glesys": + cfg := glesys.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return glesys.NewDNSProviderConfig(&cfg) + case "godaddy": + cfg := godaddy.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return godaddy.NewDNSProviderConfig(&cfg) + case "googledomains": + cfg := googledomains.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return googledomains.NewDNSProviderConfig(&cfg) + case "hetzner": + cfg := hetzner.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return hetzner.NewDNSProviderConfig(&cfg) + case "hostingde": + cfg := hostingde.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return hostingde.NewDNSProviderConfig(&cfg) + case "hosttech": + cfg := hosttech.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return hosttech.NewDNSProviderConfig(&cfg) + case "httpnet": + cfg := httpnet.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return httpnet.NewDNSProviderConfig(&cfg) + case "hyperone": + cfg := hyperone.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return hyperone.NewDNSProviderConfig(&cfg) + case "ibmcloud": + cfg := ibmcloud.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return ibmcloud.NewDNSProviderConfig(&cfg) + case "iij": + cfg := iij.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return iij.NewDNSProviderConfig(&cfg) + case "iijdpf": + cfg := iijdpf.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return iijdpf.NewDNSProviderConfig(&cfg) + case "infoblox": + cfg := infoblox.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return infoblox.NewDNSProviderConfig(&cfg) + case "infomaniak": + cfg := infomaniak.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return infomaniak.NewDNSProviderConfig(&cfg) + case "internetbs": + cfg := internetbs.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return internetbs.NewDNSProviderConfig(&cfg) + case "inwx": + cfg := inwx.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return inwx.NewDNSProviderConfig(&cfg) + case "ionos": + cfg := ionos.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return ionos.NewDNSProviderConfig(&cfg) + case "ipv64": + cfg := ipv64.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return ipv64.NewDNSProviderConfig(&cfg) + case "iwantmyname": + cfg := iwantmyname.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return iwantmyname.NewDNSProviderConfig(&cfg) + case "joker": + cfg := joker.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return joker.NewDNSProviderConfig(&cfg) + case "liara": + cfg := liara.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return liara.NewDNSProviderConfig(&cfg) + case "lightsail": + cfg := lightsail.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return lightsail.NewDNSProviderConfig(&cfg) + case "linode": + cfg := linode.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return linode.NewDNSProviderConfig(&cfg) + case "liquidweb": + cfg := liquidweb.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return liquidweb.NewDNSProviderConfig(&cfg) + case "loopia": + cfg := loopia.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return loopia.NewDNSProviderConfig(&cfg) + case "luadns": + cfg := luadns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return luadns.NewDNSProviderConfig(&cfg) + case "mailinabox": + cfg := mailinabox.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return mailinabox.NewDNSProviderConfig(&cfg) + case "metaname": + cfg := metaname.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return metaname.NewDNSProviderConfig(&cfg) + case "mydnsjp": + cfg := mydnsjp.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return mydnsjp.NewDNSProviderConfig(&cfg) + case "namecheap": + cfg := namecheap.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return namecheap.NewDNSProviderConfig(&cfg) + case "namedotcom": + cfg := namedotcom.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return namedotcom.NewDNSProviderConfig(&cfg) + case "namesilo": + cfg := namesilo.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return namesilo.NewDNSProviderConfig(&cfg) + case "nearlyfreespeech": + cfg := nearlyfreespeech.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return nearlyfreespeech.NewDNSProviderConfig(&cfg) + case "netcup": + cfg := netcup.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return netcup.NewDNSProviderConfig(&cfg) + case "netlify": + cfg := netlify.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return netlify.NewDNSProviderConfig(&cfg) + case "nicmanager": + cfg := nicmanager.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return nicmanager.NewDNSProviderConfig(&cfg) + case "nifcloud": + cfg := nifcloud.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return nifcloud.NewDNSProviderConfig(&cfg) + case "njalla": + cfg := njalla.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return njalla.NewDNSProviderConfig(&cfg) + case "nodion": + cfg := nodion.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return nodion.NewDNSProviderConfig(&cfg) + case "ns1": + cfg := ns1.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return ns1.NewDNSProviderConfig(&cfg) + case "otc": + cfg := otc.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return otc.NewDNSProviderConfig(&cfg) + case "ovh": + cfg := ovh.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return ovh.NewDNSProviderConfig(&cfg) + case "pdns": + cfg := pdns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return pdns.NewDNSProviderConfig(&cfg) + case "plesk": + cfg := plesk.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return plesk.NewDNSProviderConfig(&cfg) + case "porkbun": + cfg := porkbun.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return porkbun.NewDNSProviderConfig(&cfg) + case "rackspace": + cfg := rackspace.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return rackspace.NewDNSProviderConfig(&cfg) + case "rcodezero": + cfg := rcodezero.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return rcodezero.NewDNSProviderConfig(&cfg) + case "regru": + cfg := regru.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return regru.NewDNSProviderConfig(&cfg) + case "rfc2136": + cfg := rfc2136.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return rfc2136.NewDNSProviderConfig(&cfg) + case "rimuhosting": + cfg := rimuhosting.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return rimuhosting.NewDNSProviderConfig(&cfg) + case "route53": + cfg := route53.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return route53.NewDNSProviderConfig(&cfg) + case "safedns": + cfg := safedns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return safedns.NewDNSProviderConfig(&cfg) + case "sakuracloud": + cfg := sakuracloud.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return sakuracloud.NewDNSProviderConfig(&cfg) + case "scaleway": + cfg := scaleway.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return scaleway.NewDNSProviderConfig(&cfg) + case "selectel": + cfg := selectel.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return selectel.NewDNSProviderConfig(&cfg) + case "servercow": + cfg := servercow.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return servercow.NewDNSProviderConfig(&cfg) + case "shellrent": + cfg := shellrent.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return shellrent.NewDNSProviderConfig(&cfg) + case "simply": + cfg := simply.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return simply.NewDNSProviderConfig(&cfg) + case "sonic": + cfg := sonic.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return sonic.NewDNSProviderConfig(&cfg) + case "stackpath": + cfg := stackpath.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return stackpath.NewDNSProviderConfig(&cfg) + case "tencentcloud": + cfg := tencentcloud.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return tencentcloud.NewDNSProviderConfig(&cfg) + case "transip": + cfg := transip.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return transip.NewDNSProviderConfig(&cfg) + case "ultradns": + cfg := ultradns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return ultradns.NewDNSProviderConfig(&cfg) + case "variomedia": + cfg := variomedia.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return variomedia.NewDNSProviderConfig(&cfg) + case "vegadns": + cfg := vegadns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return vegadns.NewDNSProviderConfig(&cfg) + case "vercel": + cfg := vercel.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return vercel.NewDNSProviderConfig(&cfg) + case "versio": + cfg := versio.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return versio.NewDNSProviderConfig(&cfg) + case "vinyldns": + cfg := vinyldns.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return vinyldns.NewDNSProviderConfig(&cfg) + case "vkcloud": + cfg := vkcloud.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return vkcloud.NewDNSProviderConfig(&cfg) + case "vscale": + cfg := vscale.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return vscale.NewDNSProviderConfig(&cfg) + case "vultr": + cfg := vultr.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return vultr.NewDNSProviderConfig(&cfg) + case "webnames": + cfg := webnames.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return webnames.NewDNSProviderConfig(&cfg) + case "websupport": + cfg := websupport.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return websupport.NewDNSProviderConfig(&cfg) + case "wedos": + cfg := wedos.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return wedos.NewDNSProviderConfig(&cfg) + case "yandex": + cfg := yandex.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return yandex.NewDNSProviderConfig(&cfg) + case "yandex360": + cfg := yandex360.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return yandex360.NewDNSProviderConfig(&cfg) + case "yandexcloud": + cfg := yandexcloud.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return yandexcloud.NewDNSProviderConfig(&cfg) + case "zoneee": + cfg := zoneee.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return zoneee.NewDNSProviderConfig(&cfg) + case "zonomi": + cfg := zonomi.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return zonomi.NewDNSProviderConfig(&cfg) + default: + return nil, fmt.Errorf("unrecognized DNS provider: %s", name) + } +} diff --git a/src/mod/acme/acmedns/acmedns_test.go b/src/mod/acme/acmedns/acmedns_test.go new file mode 100644 index 0000000..ae86799 --- /dev/null +++ b/src/mod/acme/acmedns/acmedns_test.go @@ -0,0 +1,27 @@ +package acmedns_test + +import ( + "fmt" + "testing" + + "imuslab.com/zoraxy/mod/acme/acmedns" +) + +// Test if the structure of ACME DNS config can be reflected from lego source code definations +func TestACMEDNSConfigStructureReflector(t *testing.T) { + providers := []string{ + "gandi", + "cloudflare", + "azure", + } + + for _, provider := range providers { + strcture, err := acmedns.GetProviderConfigStructure(provider) + if err != nil { + panic(err) + } + + fmt.Println(strcture) + } + +} diff --git a/src/mod/acme/acmedns/providers.json b/src/mod/acme/acmedns/providers.json new file mode 100644 index 0000000..87819ab --- /dev/null +++ b/src/mod/acme/acmedns/providers.json @@ -0,0 +1,3893 @@ +{ + "alidns": { + "Name": "alidns", + "ConfigableFields": [ + { + "Title": "RAMRole", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "SecretKey", + "Datatype": "string" + }, + { + "Title": "SecurityToken", + "Datatype": "string" + }, + { + "Title": "RegionID", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPTimeout", + "Datatype": "time.Duration" + } + ] + }, + "allinkl": { + "Name": "allinkl", + "ConfigableFields": [ + { + "Title": "Login", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "arvancloud": { + "Name": "arvancloud", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "auroradns": { + "Name": "auroradns", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "Secret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "autodns": { + "Name": "autodns", + "ConfigableFields": [ + { + "Title": "Endpoint", + "Datatype": "*url.URL" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "Context", + "Datatype": "int" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "azure": { + "Name": "azure", + "ConfigableFields": [ + { + "Title": "ClientID", + "Datatype": "string" + }, + { + "Title": "ClientSecret", + "Datatype": "string" + }, + { + "Title": "TenantID", + "Datatype": "string" + }, + { + "Title": "SubscriptionID", + "Datatype": "string" + }, + { + "Title": "ResourceGroup", + "Datatype": "string" + }, + { + "Title": "MetadataEndpoint", + "Datatype": "string" + }, + { + "Title": "ResourceManagerEndpoint", + "Datatype": "string" + }, + { + "Title": "ActiveDirectoryEndpoint", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PrivateZone", + "Datatype": "bool" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "azuredns": { + "Name": "azuredns", + "ConfigableFields": [ + { + "Title": "SubscriptionID", + "Datatype": "string" + }, + { + "Title": "ResourceGroup", + "Datatype": "string" + }, + { + "Title": "ClientID", + "Datatype": "string" + }, + { + "Title": "ClientSecret", + "Datatype": "string" + }, + { + "Title": "TenantID", + "Datatype": "string" + }, + { + "Title": "OIDCToken", + "Datatype": "string" + }, + { + "Title": "OIDCTokenFilePath", + "Datatype": "string" + }, + { + "Title": "OIDCRequestURL", + "Datatype": "string" + }, + { + "Title": "OIDCRequestToken", + "Datatype": "string" + }, + { + "Title": "AuthMethod", + "Datatype": "string" + }, + { + "Title": "ServiceDiscoveryFilter", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PrivateZone", + "Datatype": "bool" + }, + { + "Title": "Environment", + "Datatype": "cloud.Configuration" + }, + { + "Title": "AuthMSITimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "bindman": { + "Name": "bindman", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "bluecat": { + "Name": "bluecat", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "UserName", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "ConfigName", + "Datatype": "string" + }, + { + "Title": "DNSView", + "Datatype": "string" + }, + { + "Title": "Debug", + "Datatype": "bool" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "brandit": { + "Name": "brandit", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "APIUsername", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "bunny": { + "Name": "bunny", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "checkdomain": { + "Name": "checkdomain", + "ConfigableFields": [ + { + "Title": "Endpoint", + "Datatype": "*url.URL" + }, + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "civo": { + "Name": "civo", + "ConfigableFields": [ + { + "Title": "ProjectID", + "Datatype": "string" + }, + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "clouddns": { + "Name": "clouddns", + "ConfigableFields": [ + { + "Title": "ClientID", + "Datatype": "string" + }, + { + "Title": "Email", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "cloudflare": { + "Name": "cloudflare", + "ConfigableFields": [ + { + "Title": "AuthEmail", + "Datatype": "string" + }, + { + "Title": "AuthKey", + "Datatype": "string" + }, + { + "Title": "AuthToken", + "Datatype": "string" + }, + { + "Title": "ZoneToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "cloudns": { + "Name": "cloudns", + "ConfigableFields": [ + { + "Title": "AuthID", + "Datatype": "string" + }, + { + "Title": "SubAuthID", + "Datatype": "string" + }, + { + "Title": "AuthPassword", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "cloudru": { + "Name": "cloudru", + "ConfigableFields": [ + { + "Title": "ServiceInstanceID", + "Datatype": "string" + }, + { + "Title": "KeyID", + "Datatype": "string" + }, + { + "Title": "Secret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "cloudxns": { + "Name": "cloudxns", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "SecretKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "conoha": { + "Name": "conoha", + "ConfigableFields": [ + { + "Title": "Region", + "Datatype": "string" + }, + { + "Title": "TenantID", + "Datatype": "string" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "constellix": { + "Name": "constellix", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "SecretKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "cpanel": { + "Name": "cpanel", + "ConfigableFields": [ + { + "Title": "Mode", + "Datatype": "string" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Token", + "Datatype": "string" + }, + { + "Title": "BaseURL", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "derak": { + "Name": "derak", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "WebsiteID", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "desec": { + "Name": "desec", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "digitalocean": { + "Name": "digitalocean", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "AuthToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "dnshomede": { + "Name": "dnshomede", + "ConfigableFields": [], + "HiddenFields": [ + { + "Title": "Credentials", + "Datatype": "map[string]string" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "dnsimple": { + "Name": "dnsimple", + "ConfigableFields": [ + { + "Title": "Debug", + "Datatype": "bool" + }, + { + "Title": "AccessToken", + "Datatype": "string" + }, + { + "Title": "BaseURL", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "dnsmadeeasy": { + "Name": "dnsmadeeasy", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "APISecret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "Sandbox", + "Datatype": "bool" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "dnspod": { + "Name": "dnspod", + "ConfigableFields": [ + { + "Title": "LoginToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "dode": { + "Name": "dode", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "domeneshop": { + "Name": "domeneshop", + "ConfigableFields": [ + { + "Title": "APIToken", + "Datatype": "string" + }, + { + "Title": "APISecret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "dreamhost": { + "Name": "dreamhost", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "duckdns": { + "Name": "duckdns", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "dyn": { + "Name": "dyn", + "ConfigableFields": [ + { + "Title": "CustomerName", + "Datatype": "string" + }, + { + "Title": "UserName", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "dynu": { + "Name": "dynu", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "easydns": { + "Name": "easydns", + "ConfigableFields": [ + { + "Title": "Endpoint", + "Datatype": "*url.URL" + }, + { + "Title": "Token", + "Datatype": "string" + }, + { + "Title": "Key", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + } + ] + }, + "efficientip": { + "Name": "efficientip", + "ConfigableFields": [ + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "Hostname", + "Datatype": "string" + }, + { + "Title": "DNSName", + "Datatype": "string" + }, + { + "Title": "ViewName", + "Datatype": "string" + }, + { + "Title": "InsecureSkipVerify", + "Datatype": "bool" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "epik": { + "Name": "epik", + "ConfigableFields": [ + { + "Title": "Signature", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "exoscale": { + "Name": "exoscale", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "APISecret", + "Datatype": "string" + }, + { + "Title": "Endpoint", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "HTTPTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int64" + } + ] + }, + "freemyip": { + "Name": "freemyip", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "gandi": { + "Name": "gandi", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "gandiv5": { + "Name": "gandiv5", + "ConfigableFields": [ + { + "Title": "fieldName", + "Datatype": "string" + }, + { + "Title": "authZone", + "Datatype": "string" + } + ], + "HiddenFields": [] + }, + "gcore": { + "Name": "gcore", + "ConfigableFields": [ + { + "Title": "APIToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "glesys": { + "Name": "glesys", + "ConfigableFields": [ + { + "Title": "APIUser", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "godaddy": { + "Name": "godaddy", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "APISecret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "googledomains": { + "Name": "googledomains", + "ConfigableFields": [ + { + "Title": "AccessToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "hetzner": { + "Name": "hetzner", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "hostingde": { + "Name": "hostingde", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "ZoneName", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "hosttech": { + "Name": "hosttech", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "httpnet": { + "Name": "httpnet", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "ZoneName", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "hyperone": { + "Name": "hyperone", + "ConfigableFields": [ + { + "Title": "APIEndpoint", + "Datatype": "string" + }, + { + "Title": "LocationID", + "Datatype": "string" + }, + { + "Title": "PassportLocation", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "ibmcloud": { + "Name": "ibmcloud", + "ConfigableFields": [ + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "Debug", + "Datatype": "bool" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPTimeout", + "Datatype": "time.Duration" + } + ] + }, + "iij": { + "Name": "iij", + "ConfigableFields": [ + { + "Title": "AccessKey", + "Datatype": "string" + }, + { + "Title": "SecretKey", + "Datatype": "string" + }, + { + "Title": "DoServiceCode", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "iijdpf": { + "Name": "iijdpf", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + }, + { + "Title": "ServiceCode", + "Datatype": "string" + }, + { + "Title": "Endpoint", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "infoblox": { + "Name": "infoblox", + "ConfigableFields": [ + { + "Title": "Host", + "Datatype": "string" + }, + { + "Title": "Port", + "Datatype": "string" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "DNSView", + "Datatype": "string" + }, + { + "Title": "WapiVersion", + "Datatype": "string" + }, + { + "Title": "SSLVerify", + "Datatype": "bool" + }, + { + "Title": "HTTPTimeout", + "Datatype": "int" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "infomaniak": { + "Name": "infomaniak", + "ConfigableFields": [ + { + "Title": "APIEndpoint", + "Datatype": "string" + }, + { + "Title": "AccessToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "internetbs": { + "Name": "internetbs", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "inwx": { + "Name": "inwx", + "ConfigableFields": [ + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "SharedSecret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "Sandbox", + "Datatype": "bool" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "ionos": { + "Name": "ionos", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "ipv64": { + "Name": "ipv64", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + } + ] + }, + "iwantmyname": { + "Name": "iwantmyname", + "ConfigableFields": [ + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "joker": { + "Name": "joker", + "ConfigableFields": [ + { + "Title": "Debug", + "Datatype": "bool" + }, + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "APIMode", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "liara": { + "Name": "liara", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "lightsail": { + "Name": "lightsail", + "ConfigableFields": [ + { + "Title": "DNSZone", + "Datatype": "string" + }, + { + "Title": "Region", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + } + ] + }, + "linode": { + "Name": "linode", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPTimeout", + "Datatype": "time.Duration" + } + ] + }, + "liquidweb": { + "Name": "liquidweb", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "Zone", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPTimeout", + "Datatype": "time.Duration" + } + ] + }, + "loopia": { + "Name": "loopia", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "APIUser", + "Datatype": "string" + }, + { + "Title": "APIPassword", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "luadns": { + "Name": "luadns", + "ConfigableFields": [ + { + "Title": "APIUsername", + "Datatype": "string" + }, + { + "Title": "APIToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "mailinabox": { + "Name": "mailinabox", + "ConfigableFields": [ + { + "Title": "Email", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "BaseURL", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + } + ] + }, + "metaname": { + "Name": "metaname", + "ConfigableFields": [ + { + "Title": "AccountReference", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "mydnsjp": { + "Name": "mydnsjp", + "ConfigableFields": [ + { + "Title": "MasterID", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "namecheap": { + "Name": "namecheap", + "ConfigableFields": [ + { + "Title": "domain", + "Datatype": "string" + }, + { + "Title": "key", + "Datatype": "string" + }, + { + "Title": "keyFqdn", + "Datatype": "string" + }, + { + "Title": "keyValue", + "Datatype": "string" + }, + { + "Title": "tld", + "Datatype": "string" + }, + { + "Title": "sld", + "Datatype": "string" + }, + { + "Title": "host", + "Datatype": "string" + } + ], + "HiddenFields": [] + }, + "namedotcom": { + "Name": "namedotcom", + "ConfigableFields": [ + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "APIToken", + "Datatype": "string" + }, + { + "Title": "Server", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "namesilo": { + "Name": "namesilo", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "nearlyfreespeech": { + "Name": "nearlyfreespeech", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "Login", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "netcup": { + "Name": "netcup", + "ConfigableFields": [ + { + "Title": "Key", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "Customer", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "netlify": { + "Name": "netlify", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "nicmanager": { + "Name": "nicmanager", + "ConfigableFields": [ + { + "Title": "Login", + "Datatype": "string" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Email", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "OTPSecret", + "Datatype": "string" + }, + { + "Title": "Mode", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "nifcloud": { + "Name": "nifcloud", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "AccessKey", + "Datatype": "string" + }, + { + "Title": "SecretKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "njalla": { + "Name": "njalla", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "nodion": { + "Name": "nodion", + "ConfigableFields": [ + { + "Title": "APIToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "ns1": { + "Name": "ns1", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "otc": { + "Name": "otc", + "ConfigableFields": [ + { + "Title": "IdentityEndpoint", + "Datatype": "string" + }, + { + "Title": "DomainName", + "Datatype": "string" + }, + { + "Title": "ProjectName", + "Datatype": "string" + }, + { + "Title": "UserName", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "ovh": { + "Name": "ovh", + "ConfigableFields": [ + { + "Title": "FieldType", + "Datatype": "string" + }, + { + "Title": "SubDomain", + "Datatype": "string" + }, + { + "Title": "Target", + "Datatype": "string" + }, + { + "Title": "Zone", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "ID", + "Datatype": "int64" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "pdns": { + "Name": "pdns", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "Host", + "Datatype": "*url.URL" + }, + { + "Title": "ServerName", + "Datatype": "string" + }, + { + "Title": "APIVersion", + "Datatype": "int" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "plesk": { + "Name": "plesk", + "ConfigableFields": [ + { + "Title": "baseURL", + "Datatype": "string" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "porkbun": { + "Name": "porkbun", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "SecretAPIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "rackspace": { + "Name": "rackspace", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "APIUser", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "rcodezero": { + "Name": "rcodezero", + "ConfigableFields": [ + { + "Title": "APIToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "regru": { + "Name": "regru", + "ConfigableFields": [ + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "TLSCert", + "Datatype": "string" + }, + { + "Title": "TLSKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "rfc2136": { + "Name": "rfc2136", + "ConfigableFields": [ + { + "Title": "Nameserver", + "Datatype": "string" + }, + { + "Title": "TSIGAlgorithm", + "Datatype": "string" + }, + { + "Title": "TSIGKey", + "Datatype": "string" + }, + { + "Title": "TSIGSecret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "DNSTimeout", + "Datatype": "time.Duration" + } + ] + }, + "rimuhosting": { + "Name": "rimuhosting", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "route53": { + "Name": "route53", + "ConfigableFields": [ + { + "Title": "AccessKeyID", + "Datatype": "string" + }, + { + "Title": "SecretAccessKey", + "Datatype": "string" + }, + { + "Title": "SessionToken", + "Datatype": "string" + }, + { + "Title": "Region", + "Datatype": "string" + }, + { + "Title": "HostedZoneID", + "Datatype": "string" + }, + { + "Title": "MaxRetries", + "Datatype": "int" + }, + { + "Title": "AssumeRoleArn", + "Datatype": "string" + }, + { + "Title": "ExternalID", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "WaitForRecordSetsChanged", + "Datatype": "bool" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "Client", + "Datatype": "*route53.Client" + } + ] + }, + "safedns": { + "Name": "safedns", + "ConfigableFields": [ + { + "Title": "AuthToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "sakuracloud": { + "Name": "sakuracloud", + "ConfigableFields": [ + { + "Title": "Token", + "Datatype": "string" + }, + { + "Title": "Secret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "scaleway": { + "Name": "scaleway", + "ConfigableFields": [ + { + "Title": "ProjectID", + "Datatype": "string" + }, + { + "Title": "Token", + "Datatype": "string" + }, + { + "Title": "AccessKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "selectel": { + "Name": "selectel", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "servercow": { + "Name": "servercow", + "ConfigableFields": [ + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "shellrent": { + "Name": "shellrent", + "ConfigableFields": [ + { + "Title": "domainID", + "Datatype": "int" + }, + { + "Title": "recordID", + "Datatype": "int" + } + ], + "HiddenFields": [] + }, + "simply": { + "Name": "simply", + "ConfigableFields": [ + { + "Title": "AccountName", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "sonic": { + "Name": "sonic", + "ConfigableFields": [ + { + "Title": "UserID", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "stackpath": { + "Name": "stackpath", + "ConfigableFields": [ + { + "Title": "ClientID", + "Datatype": "string" + }, + { + "Title": "ClientSecret", + "Datatype": "string" + }, + { + "Title": "StackID", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + } + ] + }, + "tencentcloud": { + "Name": "tencentcloud", + "ConfigableFields": [ + { + "Title": "SecretID", + "Datatype": "string" + }, + { + "Title": "SecretKey", + "Datatype": "string" + }, + { + "Title": "Region", + "Datatype": "string" + }, + { + "Title": "SessionToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPTimeout", + "Datatype": "time.Duration" + } + ] + }, + "transip": { + "Name": "transip", + "ConfigableFields": [ + { + "Title": "AccountName", + "Datatype": "string" + }, + { + "Title": "PrivateKeyPath", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int64" + } + ] + }, + "ultradns": { + "Name": "ultradns", + "ConfigableFields": [], + "HiddenFields": [ + { + "Title": "config", + "Datatype": "*Config" + }, + { + "Title": "client", + "Datatype": "*client.Client" + } + ] + }, + "variomedia": { + "Name": "variomedia", + "ConfigableFields": [ + { + "Title": "APIToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "vegadns": { + "Name": "vegadns", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "APISecret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "vercel": { + "Name": "vercel", + "ConfigableFields": [ + { + "Title": "AuthToken", + "Datatype": "string" + }, + { + "Title": "TeamID", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "versio": { + "Name": "versio", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "*url.URL" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "vinyldns": { + "Name": "vinyldns", + "ConfigableFields": [ + { + "Title": "AccessKey", + "Datatype": "string" + }, + { + "Title": "SecretKey", + "Datatype": "string" + }, + { + "Title": "Host", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + } + ] + }, + "vkcloud": { + "Name": "vkcloud", + "ConfigableFields": [ + { + "Title": "ProjectID", + "Datatype": "string" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "DNSEndpoint", + "Datatype": "string" + }, + { + "Title": "IdentityEndpoint", + "Datatype": "string" + }, + { + "Title": "DomainName", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "vscale": { + "Name": "vscale", + "ConfigableFields": [ + { + "Title": "BaseURL", + "Datatype": "string" + }, + { + "Title": "Token", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "vultr": { + "Name": "vultr", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + }, + { + "Title": "HTTPTimeout", + "Datatype": "time.Duration" + } + ] + }, + "webnames": { + "Name": "webnames", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "websupport": { + "Name": "websupport", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + }, + { + "Title": "Secret", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "SequenceInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "wedos": { + "Name": "wedos", + "ConfigableFields": [ + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "yandex": { + "Name": "yandex", + "ConfigableFields": [ + { + "Title": "PddToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "yandex360": { + "Name": "yandex360", + "ConfigableFields": [ + { + "Title": "OAuthToken", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "OrgID", + "Datatype": "int64" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "yandexcloud": { + "Name": "yandexcloud", + "ConfigableFields": [ + { + "Title": "IamToken", + "Datatype": "string" + }, + { + "Title": "FolderID", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "zoneee": { + "Name": "zoneee", + "ConfigableFields": [ + { + "Title": "Endpoint", + "Datatype": "*url.URL" + }, + { + "Title": "Username", + "Datatype": "string" + }, + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + }, + "zonomi": { + "Name": "zonomi", + "ConfigableFields": [ + { + "Title": "APIKey", + "Datatype": "string" + } + ], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + } + ] + } +} \ No newline at end of file diff --git a/src/mod/acme/acmedns/providerutils.go b/src/mod/acme/acmedns/providerutils.go new file mode 100644 index 0000000..6506bb9 --- /dev/null +++ b/src/mod/acme/acmedns/providerutils.go @@ -0,0 +1,80 @@ +package acmedns + +import ( + _ "embed" + "encoding/json" + "errors" + "net/http" + + "imuslab.com/zoraxy/mod/utils" +) + +//go:embed providers.json +var providers []byte //A list of providers generated by acmedns code-generator + +type ConfigTemplate struct { + Name string `json:"Name"` + ConfigableFields []struct { + Title string `json:"Title"` + Datatype string `json:"Datatype"` + } `json:"ConfigableFields"` + HiddenFields []struct { + Title string `json:"Title"` + Datatype string `json:"Datatype"` + } `json:"HiddenFields"` +} + +// Return a map of string => datatype +func GetProviderConfigStructure(providerName string) (map[string]string, error) { + //Load the target config template from embedded providers.json + configTemplateMap := map[string]ConfigTemplate{} + err := json.Unmarshal(providers, &configTemplateMap) + if err != nil { + return map[string]string{}, err + } + + targetConfigTemplate, ok := configTemplateMap[providerName] + if !ok { + return map[string]string{}, errors.New("provider not supported") + } + + results := map[string]string{} + for _, field := range targetConfigTemplate.ConfigableFields { + results[field.Title] = field.Datatype + } + + return results, nil +} + +// HandleServeProvidersJson return the list of supported providers as json +func HandleServeProvidersJson(w http.ResponseWriter, r *http.Request) { + providerName, _ := utils.GetPara(r, "name") + if providerName == "" { + //Send the current list of providers + configTemplateMap := map[string]ConfigTemplate{} + err := json.Unmarshal(providers, &configTemplateMap) + if err != nil { + utils.SendErrorResponse(w, "failed to load DNS provider") + return + } + + //Parse the provider names into an array + providers := []string{} + for providerName, _ := range configTemplateMap { + providers = append(providers, providerName) + } + + js, _ := json.Marshal(providers) + utils.SendJSONResponse(w, string(js)) + return + } + //Get the config for that provider + confTemplate, err := GetProviderConfigStructure(providerName) + if err != nil { + utils.SendErrorResponse(w, err.Error()) + return + } + + js, _ := json.Marshal(confTemplate) + utils.SendJSONResponse(w, string(js)) +} diff --git a/src/web/snippet/acme.html b/src/web/snippet/acme.html index ea20692..e1dadbe 100644 --- a/src/web/snippet/acme.html +++ b/src/web/snippet/acme.html @@ -122,153 +122,30 @@