mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-06-03 06:07:20 +02:00
Added backend generated dns providers arch
- Added acmedns - Added auto dns credential form generator
This commit is contained in:
parent
55bc939a37
commit
3454a9b975
@ -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
|
||||
|
982
src/mod/acme/acmedns/acmedns.go
Normal file
982
src/mod/acme/acmedns/acmedns.go
Normal file
@ -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)
|
||||
}
|
||||
}
|
27
src/mod/acme/acmedns/acmedns_test.go
Normal file
27
src/mod/acme/acmedns/acmedns_test.go
Normal file
@ -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)
|
||||
}
|
||||
|
||||
}
|
3893
src/mod/acme/acmedns/providers.json
Normal file
3893
src/mod/acme/acmedns/providers.json
Normal file
File diff suppressed because it is too large
Load Diff
80
src/mod/acme/acmedns/providerutils.go
Normal file
80
src/mod/acme/acmedns/providerutils.go
Normal file
@ -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))
|
||||
}
|
@ -122,153 +122,30 @@
|
||||
</div>
|
||||
<div class="field dnsChallengeOnly" style="display:none;">
|
||||
<label>DNS Provider</label>
|
||||
<div class="ui selection dropdown" id="dnsProvider">
|
||||
<input type="hidden" name="dnsProvider">
|
||||
<div class="ui search selection dropdown" id="dnsProvider">
|
||||
<input type="hidden" name="dnsProvider" value="">
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="default text">Please Choose...</div>
|
||||
<div class="menu">
|
||||
<!-- List of supported DNS providers with acme-lego 4.16 -->
|
||||
<!-- The file proivders-scraper-util.js can be used to generate the list of providers -->
|
||||
<div class="item" data-value="edgedns">Akamai EdgeDNS</div>
|
||||
<div class="item" data-value="alidns">Alibaba Cloud DNS</div>
|
||||
<div class="item" data-value="allinkl">all-inkl</div>
|
||||
<div class="item" data-value="lightsail">Amazon Lightsail</div>
|
||||
<div class="item" data-value="route53">Amazon Route 53</div>
|
||||
<div class="item" data-value="arvancloud">ArvanCloud</div>
|
||||
<div class="item" data-value="auroradns">Aurora DNS</div>
|
||||
<div class="item" data-value="autodns">Autodns</div>
|
||||
<div class="item" data-value="azure">Azure (deprecated)</div>
|
||||
<div class="item" data-value="azuredns">Azure DNS</div>
|
||||
<div class="item" data-value="bindman">Bindman</div>
|
||||
<div class="item" data-value="bluecat">Bluecat</div>
|
||||
<div class="item" data-value="brandit">Brandit</div>
|
||||
<div class="item" data-value="bunny">Bunny</div>
|
||||
<div class="item" data-value="checkdomain">Checkdomain</div>
|
||||
<div class="item" data-value="civo">Civo</div>
|
||||
<div class="item" data-value="cloudru">Cloud.ru</div>
|
||||
<div class="item" data-value="clouddns">CloudDNS</div>
|
||||
<div class="item" data-value="cloudflare">Cloudflare</div>
|
||||
<div class="item" data-value="cloudns">ClouDNS</div>
|
||||
<div class="item" data-value="cloudxns">CloudXNS</div>
|
||||
<div class="item" data-value="conoha">ConoHa</div>
|
||||
<div class="item" data-value="constellix">Constellix</div>
|
||||
<div class="item" data-value="cpanel">CPanel/WHM</div>
|
||||
<div class="item" data-value="derak">Derak Cloud</div>
|
||||
<div class="item" data-value="desec">deSEC.io</div>
|
||||
<div class="item" data-value="designate">Designate DNSaaS for Openstack</div>
|
||||
<div class="item" data-value="digitalocean">Digital Ocean</div>
|
||||
<div class="item" data-value="dnsmadeeasy">DNS Made Easy</div>
|
||||
<div class="item" data-value="dnshomede">dnsHome.de</div>
|
||||
<div class="item" data-value="dnsimple">DNSimple</div>
|
||||
<div class="item" data-value="dnspod">DNSPod (deprecated)</div>
|
||||
<div class="item" data-value="dode">Domain Offensive (do.de)</div>
|
||||
<div class="item" data-value="domeneshop">Domeneshop</div>
|
||||
<div class="item" data-value="dreamhost">DreamHost</div>
|
||||
<div class="item" data-value="duckdns">Duck DNS</div>
|
||||
<div class="item" data-value="dyn">Dyn</div>
|
||||
<div class="item" data-value="dynu">Dynu</div>
|
||||
<div class="item" data-value="easydns">EasyDNS</div>
|
||||
<div class="item" data-value="efficientip">Efficient IP</div>
|
||||
<div class="item" data-value="epik">Epik</div>
|
||||
<div class="item" data-value="exoscale">Exoscale</div>
|
||||
<div class="item" data-value="exec">External program</div>
|
||||
<div class="item" data-value="freemyip">freemyip.com</div>
|
||||
<div class="item" data-value="gcore">G-Core</div>
|
||||
<div class="item" data-value="gandi">Gandi</div>
|
||||
<div class="item" data-value="gandiv5">Gandi Live DNS (v5)</div>
|
||||
<div class="item" data-value="glesys">Glesys</div>
|
||||
<div class="item" data-value="godaddy">Go Daddy</div>
|
||||
<div class="item" data-value="gcloud">Google Cloud</div>
|
||||
<div class="item" data-value="googledomains">Google Domains</div>
|
||||
<div class="item" data-value="hetzner">Hetzner</div>
|
||||
<div class="item" data-value="hostingde">Hosting.de</div>
|
||||
<div class="item" data-value="hosttech">Hosttech</div>
|
||||
<div class="item" data-value="httpreq">HTTP request</div>
|
||||
<div class="item" data-value="httpnet">http.net</div>
|
||||
<div class="item" data-value="hurricane">Hurricane Electric DNS</div>
|
||||
<div class="item" data-value="hyperone">HyperOne</div>
|
||||
<div class="item" data-value="ibmcloud">IBM Cloud (SoftLayer)</div>
|
||||
<div class="item" data-value="iijdpf">IIJ DNS Platform Service</div>
|
||||
<div class="item" data-value="infoblox">Infoblox</div>
|
||||
<div class="item" data-value="infomaniak">Infomaniak</div>
|
||||
<div class="item" data-value="iij">Internet Initiative Japan</div>
|
||||
<div class="item" data-value="internetbs">Internet.bs</div>
|
||||
<div class="item" data-value="inwx">INWX</div>
|
||||
<div class="item" data-value="ionos">Ionos</div>
|
||||
<div class="item" data-value="ipv64">IPv64</div>
|
||||
<div class="item" data-value="iwantmyname">iwantmyname</div>
|
||||
<div class="item" data-value="joker">Joker</div>
|
||||
<div class="item" data-value="acme-dns">Joohoi's ACME-DNS</div>
|
||||
<div class="item" data-value="liara">Liara</div>
|
||||
<div class="item" data-value="linode">Linode (v4)</div>
|
||||
<div class="item" data-value="liquidweb">Liquid Web</div>
|
||||
<div class="item" data-value="loopia">Loopia</div>
|
||||
<div class="item" data-value="luadns">LuaDNS</div>
|
||||
<div class="item" data-value="mailinabox">Mail-in-a-Box</div>
|
||||
<div class="item" data-value="metaname">Metaname</div>
|
||||
<div class="item" data-value="mydnsjp">MyDNS.jp</div>
|
||||
<div class="item" data-value="mythicbeasts">MythicBeasts</div>
|
||||
<div class="item" data-value="namedotcom">Name.com</div>
|
||||
<div class="item" data-value="namecheap">Namecheap</div>
|
||||
<div class="item" data-value="namesilo">Namesilo</div>
|
||||
<div class="item" data-value="nearlyfreespeech">NearlyFreeSpeech.NET</div>
|
||||
<div class="item" data-value="netcup">Netcup</div>
|
||||
<div class="item" data-value="netlify">Netlify</div>
|
||||
<div class="item" data-value="nicmanager">Nicmanager</div>
|
||||
<div class="item" data-value="nifcloud">NIFCloud</div>
|
||||
<div class="item" data-value="njalla">Njalla</div>
|
||||
<div class="item" data-value="nodion">Nodion</div>
|
||||
<div class="item" data-value="ns1">NS1</div>
|
||||
<div class="item" data-value="otc">Open Telekom Cloud</div>
|
||||
<div class="item" data-value="oraclecloud">Oracle Cloud</div>
|
||||
<div class="item" data-value="ovh">OVH</div>
|
||||
<div class="item" data-value="plesk">plesk.com</div>
|
||||
<div class="item" data-value="porkbun">Porkbun</div>
|
||||
<div class="item" data-value="pdns">PowerDNS</div>
|
||||
<div class="item" data-value="rackspace">Rackspace</div>
|
||||
<div class="item" data-value="rcodezero">RcodeZero</div>
|
||||
<div class="item" data-value="regru">reg.ru</div>
|
||||
<div class="item" data-value="rfc2136">RFC2136</div>
|
||||
<div class="item" data-value="rimuhosting">RimuHosting</div>
|
||||
<div class="item" data-value="sakuracloud">Sakura Cloud</div>
|
||||
<div class="item" data-value="scaleway">Scaleway</div>
|
||||
<div class="item" data-value="selectel">Selectel</div>
|
||||
<div class="item" data-value="servercow">Servercow</div>
|
||||
<div class="item" data-value="shellrent">Shellrent</div>
|
||||
<div class="item" data-value="simply">Simply.com</div>
|
||||
<div class="item" data-value="sonic">Sonic</div>
|
||||
<div class="item" data-value="stackpath">Stackpath</div>
|
||||
<div class="item" data-value="tencentcloud">Tencent Cloud DNS</div>
|
||||
<div class="item" data-value="transip">TransIP</div>
|
||||
<div class="item" data-value="safedns">UKFast SafeDNS</div>
|
||||
<div class="item" data-value="ultradns">Ultradns</div>
|
||||
<div class="item" data-value="variomedia">Variomedia</div>
|
||||
<div class="item" data-value="vegadns">VegaDNS</div>
|
||||
<div class="item" data-value="vercel">Vercel</div>
|
||||
<div class="item" data-value="versio">Versio.[nl|eu|uk]</div>
|
||||
<div class="item" data-value="vinyldns">VinylDNS</div>
|
||||
<div class="item" data-value="vkcloud">VK Cloud</div>
|
||||
<div class="item" data-value="vscale">Vscale</div>
|
||||
<div class="item" data-value="vultr">Vultr</div>
|
||||
<div class="item" data-value="webnames">Webnames</div>
|
||||
<div class="item" data-value="websupport">Websupport</div>
|
||||
<div class="item" data-value="wedos">WEDOS</div>
|
||||
<div class="item" data-value="yandex360">Yandex 360</div>
|
||||
<div class="item" data-value="yandexcloud">Yandex Cloud</div>
|
||||
<div class="item" data-value="yandex">Yandex PDD</div>
|
||||
<div class="item" data-value="zoneee">Zone.ee</div>
|
||||
<div class="item" data-value="zonomi">Zonomi</div>
|
||||
<div class="default text">Pick a DNS Provider</div>
|
||||
<div class="menu" id="dnsProviderList">
|
||||
<!-- Auto populate moved to acmedns module and initDNSProviderList() -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field dnsChallengeOnly" style="display:none;">
|
||||
<label>Credentials File Content</label>
|
||||
<textarea id="dnsCredentials" placeholder=""></textarea>
|
||||
<small>For more information on the supported DNS Providers and their attirbutes look <a href="https://go-acme.github.io/lego/dns/" target="_blank">here</a>! </small>
|
||||
<div class="ui negative message">
|
||||
<i class="icon exclamation triangle"></i>
|
||||
These credentials will be stored as plaintext in the database and in environment variables!
|
||||
<div class="ui divider"></div>
|
||||
<p>Required Configurations</p>
|
||||
<div id="dnsProviderAPIFields">
|
||||
|
||||
</div>
|
||||
<!--
|
||||
<label>Credentials File Content</label>
|
||||
<textarea id="dnsCredentials" placeholder=""></textarea>
|
||||
<small>For more information on the supported DNS Providers and their attirbutes look <a href="https://go-acme.github.io/lego/dns/" target="_blank">here</a>! </small>
|
||||
<div class="ui negative message">
|
||||
<i class="icon exclamation triangle"></i>
|
||||
These credentials will be stored as plaintext in the database and in environment variables!
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
<div class="field" id="caInput" style="display:none;">
|
||||
<label>ACME Server URL</label>
|
||||
@ -483,6 +360,7 @@
|
||||
obtainCertificate();
|
||||
});
|
||||
|
||||
//On CA change in dropdown
|
||||
$("input[name=ca]").on('change', function() {
|
||||
if(this.value == "Custom ACME Server") {
|
||||
$("#caInput").show();
|
||||
@ -490,421 +368,71 @@
|
||||
$("#hmacInput").show();
|
||||
$("#skipTLS").show();
|
||||
$("#dnsChallenge").hide();
|
||||
$(".dnsChallengeOnly").hide();
|
||||
} else if (this.value == "ZeroSSL") {
|
||||
$("#kidInput").show();
|
||||
$("#hmacInput").show();
|
||||
$("#dnsChallenge").hide();
|
||||
$(".dnsChallengeOnly").hide();
|
||||
$("#skipTLS").hide();
|
||||
} else if (this.value == "Buypass") {
|
||||
$("#kidInput").show();
|
||||
$("#hmacInput").show();
|
||||
$("#dnsChallenge").hide()
|
||||
$("#dnsChallenge").hide();
|
||||
$(".dnsChallengeOnly").hide();
|
||||
$("#skipTLS").hide();
|
||||
}else {
|
||||
$("#caInput").hide();
|
||||
$("#skipTLS").hide();
|
||||
$("#kidInput").hide();
|
||||
$("#hmacInput").hide();
|
||||
$("#dnsChallenge").show();
|
||||
if ($("#useDnsChallenge")[0].checked){
|
||||
$(".dnsChallengeOnly").show();
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
//On DNS provider dropdown change
|
||||
$("input[name=dnsProvider]").on('change', function() {
|
||||
// The file proivders-scraper-util.js can be used to generate the list of providers
|
||||
switch(this.value){
|
||||
case "edgedns":
|
||||
$("#dnsCredentials").val("AKAMAI_ACCESS_TOKEN=\nAKAMAI_CLIENT_SECRET=\nAKAMAI_CLIENT_TOKEN=\nAKAMAI_EDGERC=\nAKAMAI_EDGERC_SECTION=\nAKAMAI_HOST=");
|
||||
break;
|
||||
case "alidns":
|
||||
$("#dnsCredentials").val("ALICLOUD_ACCESS_KEY=\nALICLOUD_RAM_ROLE=\nALICLOUD_SECRET_KEY=\nALICLOUD_SECURITY_TOKEN=");
|
||||
break;
|
||||
case "allinkl":
|
||||
$("#dnsCredentials").val("ALL_INKL_LOGIN=\nALL_INKL_PASSWORD=");
|
||||
break;
|
||||
case "lightsail":
|
||||
$("#dnsCredentials").val("AWS_ACCESS_KEY_ID=\nAWS_ACCESS_KEY_ID_FILE=\nAWS_SHARED_CREDENTIALS_FILE=\nAWS_SECRET_ACCESS_KEY=\nAWS_SECRET_ACCESS_KEY_FILE=\nAWS_SHARED_CREDENTIALS_FILE=\nDNS_ZONE=");
|
||||
break;
|
||||
case "route53":
|
||||
$("#dnsCredentials").val("AWS_ACCESS_KEY_ID=\nAWS_ACCESS_KEY_ID_FILE=\nAWS_SHARED_CREDENTIALS_FILE=\nAWS_ASSUME_ROLE_ARN=\nAWS_ASSUME_ROLE_ARN_FILE=\nAWS_EXTERNAL_ID=\nAWS_EXTERNAL_ID_FILE=\nAWS_HOSTED_ZONE_ID=\nAWS_PROFILE=\nAWS_PROFILE_FILE=\nAWS_REGION=\nAWS_REGION_FILE=\nAWS_SDK_LOAD_CONFIG=\nAWS_SDK_LOAD_CONFIG_FILE=\nAWS_SECRET_ACCESS_KEY=\nAWS_SECRET_ACCESS_KEY_FILE=\nAWS_SHARED_CREDENTIALS_FILE=");
|
||||
break;
|
||||
case "arvancloud":
|
||||
$("#dnsCredentials").val("ARVANCLOUD_API_KEY=");
|
||||
break;
|
||||
case "auroradns":
|
||||
$("#dnsCredentials").val("AURORA_API_KEY=\nAURORA_SECRET=");
|
||||
break;
|
||||
case "autodns":
|
||||
$("#dnsCredentials").val("AUTODNS_API_PASSWORD=\nAUTODNS_API_USER=");
|
||||
break;
|
||||
case "azure":
|
||||
$("#dnsCredentials").val("AZURE_CLIENT_ID=\nAZURE_CLIENT_SECRET=\nAZURE_ENVIRONMENT=\nAZURE_RESOURCE_GROUP=\nAZURE_SUBSCRIPTION_ID=\nAZURE_TENANT_ID=\ninstance metadata service=");
|
||||
break;
|
||||
case "azuredns":
|
||||
$("#dnsCredentials").val("AZURE_CLIENT_CERTIFICATE_PATH=\nAZURE_CLIENT_ID=\nAZURE_CLIENT_SECRET=\nAZURE_TENANT_ID=");
|
||||
break;
|
||||
case "bindman":
|
||||
$("#dnsCredentials").val("BINDMAN_MANAGER_ADDRESS=");
|
||||
break;
|
||||
case "bluecat":
|
||||
$("#dnsCredentials").val("BLUECAT_CONFIG_NAME=\nBLUECAT_DNS_VIEW=\nBLUECAT_PASSWORD=\nBLUECAT_SERVER_URL=\nBLUECAT_USER_NAME=");
|
||||
break;
|
||||
case "brandit":
|
||||
$("#dnsCredentials").val("BRANDIT_API_KEY=\nBRANDIT_API_USERNAME=");
|
||||
break;
|
||||
case "bunny":
|
||||
$("#dnsCredentials").val("BUNNY_API_KEY=");
|
||||
break;
|
||||
case "checkdomain":
|
||||
$("#dnsCredentials").val("CHECKDOMAIN_TOKEN=");
|
||||
break;
|
||||
case "civo":
|
||||
$("#dnsCredentials").val("CIVO_TOKEN=");
|
||||
break;
|
||||
case "cloudru":
|
||||
$("#dnsCredentials").val("CLOUDRU_KEY_ID=\nCLOUDRU_SECRET=\nCLOUDRU_SERVICE_INSTANCE_ID=");
|
||||
break;
|
||||
case "clouddns":
|
||||
$("#dnsCredentials").val("CLOUDDNS_CLIENT_ID=\nCLOUDDNS_EMAIL=\nCLOUDDNS_PASSWORD=");
|
||||
break;
|
||||
case "cloudflare":
|
||||
$("#dnsCredentials").val("CF_API_EMAIL=\nCF_API_KEY=\nCF_DNS_API_TOKEN=\nCF_ZONE_API_TOKEN=\nCLOUDFLARE_API_KEY=\nCLOUDFLARE_DNS_API_TOKEN=\nCLOUDFLARE_EMAIL=\nCLOUDFLARE_ZONE_API_TOKEN=");
|
||||
break;
|
||||
case "cloudns":
|
||||
$("#dnsCredentials").val("CLOUDNS_AUTH_ID=\nCLOUDNS_AUTH_PASSWORD=");
|
||||
break;
|
||||
case "cloudxns":
|
||||
$("#dnsCredentials").val("CLOUDXNS_API_KEY=\nCLOUDXNS_SECRET_KEY=");
|
||||
break;
|
||||
case "conoha":
|
||||
$("#dnsCredentials").val("CONOHA_API_PASSWORD=\nCONOHA_API_USERNAME=\nCONOHA_TENANT_ID=");
|
||||
break;
|
||||
case "constellix":
|
||||
$("#dnsCredentials").val("CONSTELLIX_API_KEY=\nCONSTELLIX_SECRET_KEY=");
|
||||
break;
|
||||
case "cpanel":
|
||||
$("#dnsCredentials").val("CPANEL_BASE_URL=\nCPANEL_TOKEN=\nCPANEL_USERNAME=");
|
||||
break;
|
||||
case "derak":
|
||||
$("#dnsCredentials").val("DERAK_API_KEY=");
|
||||
break;
|
||||
case "desec":
|
||||
$("#dnsCredentials").val("DESEC_TOKEN=");
|
||||
break;
|
||||
case "designate":
|
||||
$("#dnsCredentials").val("OS_APPLICATION_CREDENTIAL_ID=\nOS_APPLICATION_CREDENTIAL_NAME=\nOS_APPLICATION_CREDENTIAL_SECRET=\nOS_AUTH_URL=\nOS_PASSWORD=\nOS_PROJECT_NAME=\nOS_REGION_NAME=\nOS_USERNAME=\nOS_USER_ID=");
|
||||
break;
|
||||
case "digitalocean":
|
||||
$("#dnsCredentials").val("DO_AUTH_TOKEN=");
|
||||
break;
|
||||
case "dnsmadeeasy":
|
||||
$("#dnsCredentials").val("DNSMADEEASY_API_KEY=\nDNSMADEEASY_API_SECRET=");
|
||||
break;
|
||||
case "dnshomede":
|
||||
$("#dnsCredentials").val("DNSHOMEDE_CREDENTIALS=");
|
||||
break;
|
||||
case "dnsimple":
|
||||
$("#dnsCredentials").val("DNSIMPLE_OAUTH_TOKEN=");
|
||||
break;
|
||||
case "dnspod":
|
||||
$("#dnsCredentials").val("DNSPOD_API_KEY=");
|
||||
break;
|
||||
case "dode":
|
||||
$("#dnsCredentials").val("DODE_TOKEN=");
|
||||
break;
|
||||
case "domeneshop":
|
||||
$("#dnsCredentials").val("DOMENESHOP_API_SECRET=\nDOMENESHOP_API_TOKEN=");
|
||||
break;
|
||||
case "dreamhost":
|
||||
$("#dnsCredentials").val("DREAMHOST_API_KEY=");
|
||||
break;
|
||||
case "duckdns":
|
||||
$("#dnsCredentials").val("DUCKDNS_TOKEN=");
|
||||
break;
|
||||
case "dyn":
|
||||
$("#dnsCredentials").val("DYN_CUSTOMER_NAME=\nDYN_PASSWORD=\nDYN_USER_NAME=");
|
||||
break;
|
||||
case "dynu":
|
||||
$("#dnsCredentials").val("DYNU_API_KEY=");
|
||||
break;
|
||||
case "easydns":
|
||||
$("#dnsCredentials").val("EASYDNS_KEY=\nEASYDNS_TOKEN=");
|
||||
break;
|
||||
case "efficientip":
|
||||
$("#dnsCredentials").val("EFFICIENTIP_DNS_NAME=\nEFFICIENTIP_HOSTNAME=\nEFFICIENTIP_PASSWORD=\nEFFICIENTIP_USERNAME=");
|
||||
break;
|
||||
case "epik":
|
||||
$("#dnsCredentials").val("EPIK_SIGNATURE=");
|
||||
break;
|
||||
case "exoscale":
|
||||
$("#dnsCredentials").val("EXOSCALE_API_KEY=\nEXOSCALE_API_SECRET=");
|
||||
break;
|
||||
case "exec":
|
||||
$("#dnsCredentials").val("EXEC_MODE=\nRAW=\nEXEC_PATH=");
|
||||
break;
|
||||
case "freemyip":
|
||||
$("#dnsCredentials").val("FREEMYIP_TOKEN=");
|
||||
break;
|
||||
case "gcore":
|
||||
$("#dnsCredentials").val("GCORE_PERMANENT_API_TOKEN=");
|
||||
break;
|
||||
case "gandi":
|
||||
$("#dnsCredentials").val("GANDI_API_KEY=");
|
||||
break;
|
||||
case "gandiv5":
|
||||
$("#dnsCredentials").val("GANDIV5_API_KEY=\nGANDIV5_PERSONAL_ACCESS_TOKEN=");
|
||||
break;
|
||||
case "glesys":
|
||||
$("#dnsCredentials").val("GLESYS_API_KEY=\nGLESYS_API_USER=");
|
||||
break;
|
||||
case "godaddy":
|
||||
$("#dnsCredentials").val("GODADDY_API_KEY=\nGODADDY_API_SECRET=");
|
||||
break;
|
||||
case "gcloud":
|
||||
$("#dnsCredentials").val("Application Default Credentials=\nGCE_PROJECT=\nGCE_SERVICE_ACCOUNT=\nGCE_SERVICE_ACCOUNT_FILE=");
|
||||
break;
|
||||
case "googledomains":
|
||||
$("#dnsCredentials").val("GOOGLE_DOMAINS_ACCESS_TOKEN=");
|
||||
break;
|
||||
case "hetzner":
|
||||
$("#dnsCredentials").val("HETZNER_API_KEY=");
|
||||
break;
|
||||
case "hostingde":
|
||||
$("#dnsCredentials").val("HOSTINGDE_API_KEY=");
|
||||
break;
|
||||
case "hosttech":
|
||||
$("#dnsCredentials").val("HOSTTECH_API_KEY=\nHOSTTECH_PASSWORD=");
|
||||
break;
|
||||
case "httpreq":
|
||||
$("#dnsCredentials").val("HTTPREQ_ENDPOINT=\nHTTPREQ_MODE=\nRAW=");
|
||||
break;
|
||||
case "httpnet":
|
||||
$("#dnsCredentials").val("HTTPNET_API_KEY=");
|
||||
break;
|
||||
case "hurricane":
|
||||
$("#dnsCredentials").val("HURRICANE_TOKENS=");
|
||||
break;
|
||||
case "hyperone":
|
||||
$("#dnsCredentials").val("HYPERONE_API_URL=\nHYPERONE_LOCATION_ID=\nHYPERONE_PASSPORT_LOCATION=\nHYPERONE_POLLING_INTERVAL=\nHYPERONE_PROPAGATION_TIMEOUT=\nHYPERONE_TTL=");
|
||||
break;
|
||||
case "ibmcloud":
|
||||
$("#dnsCredentials").val("SOFTLAYER_API_KEY=\nSOFTLAYER_USERNAME=");
|
||||
break;
|
||||
case "iijdpf":
|
||||
$("#dnsCredentials").val("IIJ_DPF_API_TOKEN=\nIIJ_DPF_DPM_SERVICE_CODE=");
|
||||
break;
|
||||
case "infoblox":
|
||||
$("#dnsCredentials").val("INFOBLOX_HOST=\nINFOBLOX_PASSWORD=\nINFOBLOX_USERNAME=");
|
||||
break;
|
||||
case "infomaniak":
|
||||
$("#dnsCredentials").val("INFOMANIAK_ACCESS_TOKEN=");
|
||||
break;
|
||||
case "iij":
|
||||
$("#dnsCredentials").val("IIJ_API_ACCESS_KEY=\nIIJ_API_SECRET_KEY=\nIIJ_DO_SERVICE_CODE=");
|
||||
break;
|
||||
case "internetbs":
|
||||
$("#dnsCredentials").val("INTERNET_BS_API_KEY=\nINTERNET_BS_PASSWORD=");
|
||||
break;
|
||||
case "inwx":
|
||||
$("#dnsCredentials").val("INWX_PASSWORD=\nINWX_USERNAME=");
|
||||
break;
|
||||
case "ionos":
|
||||
$("#dnsCredentials").val("IONOS_API_KEY=\n<prefix>.<secret>=");
|
||||
break;
|
||||
case "ipv64":
|
||||
$("#dnsCredentials").val("IPV64_API_KEY=");
|
||||
break;
|
||||
case "iwantmyname":
|
||||
$("#dnsCredentials").val("IWANTMYNAME_PASSWORD=\nIWANTMYNAME_USERNAME=");
|
||||
break;
|
||||
case "joker":
|
||||
$("#dnsCredentials").val("JOKER_API_KEY=\nJOKER_API_MODE=\nJOKER_PASSWORD=\nJOKER_USERNAME=");
|
||||
break;
|
||||
case "acme-dns":
|
||||
$("#dnsCredentials").val("ACME_DNS_API_BASE=\nACME_DNS_STORAGE_PATH=");
|
||||
break;
|
||||
case "liara":
|
||||
$("#dnsCredentials").val("LIARA_API_KEY=");
|
||||
break;
|
||||
case "linode":
|
||||
$("#dnsCredentials").val("LINODE_TOKEN=");
|
||||
break;
|
||||
case "liquidweb":
|
||||
$("#dnsCredentials").val("LWAPI_PASSWORD=\nLWAPI_USERNAME=");
|
||||
break;
|
||||
case "loopia":
|
||||
$("#dnsCredentials").val("LOOPIA_API_PASSWORD=\nLOOPIA_API_USER=");
|
||||
break;
|
||||
case "luadns":
|
||||
$("#dnsCredentials").val("LUADNS_API_TOKEN=\nLUADNS_API_USERNAME=");
|
||||
break;
|
||||
case "mailinabox":
|
||||
$("#dnsCredentials").val("MAILINABOX_BASE_URL=\nMAILINABOX_EMAIL=\nMAILINABOX_PASSWORD=");
|
||||
break;
|
||||
case "metaname":
|
||||
$("#dnsCredentials").val("METANAME_ACCOUNT_REFERENCE=\nMETANAME_API_KEY=");
|
||||
break;
|
||||
case "mydnsjp":
|
||||
$("#dnsCredentials").val("MYDNSJP_MASTER_ID=\nMYDNSJP_PASSWORD=");
|
||||
break;
|
||||
case "mythicbeasts":
|
||||
$("#dnsCredentials").val("MYTHICBEASTS_PASSWORD=\nMYTHICBEASTS_USERNAME=");
|
||||
break;
|
||||
case "namedotcom":
|
||||
$("#dnsCredentials").val("NAMECOM_API_TOKEN=\nNAMECOM_USERNAME=");
|
||||
break;
|
||||
case "namecheap":
|
||||
$("#dnsCredentials").val("NAMECHEAP_API_KEY=\nNAMECHEAP_API_USER=");
|
||||
break;
|
||||
case "namesilo":
|
||||
$("#dnsCredentials").val("NAMESILO_API_KEY=");
|
||||
break;
|
||||
case "nearlyfreespeech":
|
||||
$("#dnsCredentials").val("NEARLYFREESPEECH_API_KEY=\nNEARLYFREESPEECH_LOGIN=");
|
||||
break;
|
||||
case "netcup":
|
||||
$("#dnsCredentials").val("NETCUP_API_KEY=\nNETCUP_API_PASSWORD=\nNETCUP_CUSTOMER_NUMBER=");
|
||||
break;
|
||||
case "netlify":
|
||||
$("#dnsCredentials").val("NETLIFY_TOKEN=");
|
||||
break;
|
||||
case "nicmanager":
|
||||
$("#dnsCredentials").val("NICMANAGER_API_EMAIL=\nNICMANAGER_API_LOGIN=\nNICMANAGER_API_PASSWORD=\nNICMANAGER_API_USERNAME=");
|
||||
break;
|
||||
case "nifcloud":
|
||||
$("#dnsCredentials").val("NIFCLOUD_ACCESS_KEY_ID=\nNIFCLOUD_SECRET_ACCESS_KEY=");
|
||||
break;
|
||||
case "njalla":
|
||||
$("#dnsCredentials").val("NJALLA_TOKEN=");
|
||||
break;
|
||||
case "nodion":
|
||||
$("#dnsCredentials").val("NODION_API_TOKEN=");
|
||||
break;
|
||||
case "ns1":
|
||||
$("#dnsCredentials").val("NS1_API_KEY=");
|
||||
break;
|
||||
case "otc":
|
||||
$("#dnsCredentials").val("OTC_DOMAIN_NAME=\nOTC_IDENTITY_ENDPOINT=\nOTC_PASSWORD=\nOTC_PROJECT_NAME=\nOTC_USER_NAME=");
|
||||
break;
|
||||
case "oraclecloud":
|
||||
$("#dnsCredentials").val("OCI_COMPARTMENT_OCID=\nOCI_PRIVKEY_FILE=\nOCI_PRIVKEY_PASS=\nOCI_PUBKEY_FINGERPRINT=\nOCI_REGION=\nOCI_TENANCY_OCID=\nOCI_USER_OCID=");
|
||||
break;
|
||||
case "ovh":
|
||||
$("#dnsCredentials").val("OVH_APPLICATION_KEY=\nOVH_APPLICATION_SECRET=\nOVH_CONSUMER_KEY=\nOVH_ENDPOINT=");
|
||||
break;
|
||||
case "plesk":
|
||||
$("#dnsCredentials").val("PLESK_PASSWORD=\nPLESK_SERVER_BASE_URL=\nPLESK_USERNAME=");
|
||||
break;
|
||||
case "porkbun":
|
||||
$("#dnsCredentials").val("PORKBUN_API_KEY=\nPORKBUN_SECRET_API_KEY=");
|
||||
break;
|
||||
case "pdns":
|
||||
$("#dnsCredentials").val("PDNS_API_KEY=\nPDNS_API_URL=");
|
||||
break;
|
||||
case "rackspace":
|
||||
$("#dnsCredentials").val("RACKSPACE_API_KEY=\nRACKSPACE_USER=");
|
||||
break;
|
||||
case "rcodezero":
|
||||
$("#dnsCredentials").val("RCODEZERO_API_TOKEN=");
|
||||
break;
|
||||
case "regru":
|
||||
$("#dnsCredentials").val("REGRU_PASSWORD=\nREGRU_USERNAME=");
|
||||
break;
|
||||
case "rfc2136":
|
||||
$("#dnsCredentials").val("RFC2136_NAMESERVER=\nRFC2136_TSIG_ALGORITHM=\nRFC2136_TSIG*=\nRFC2136_TSIG_KEY=\nRFC2136_TSIG*=\nRFC2136_TSIG_SECRET=\n RFC2136_TSIG*=");
|
||||
break;
|
||||
case "rimuhosting":
|
||||
$("#dnsCredentials").val("RIMUHOSTING_API_KEY=");
|
||||
break;
|
||||
case "sakuracloud":
|
||||
$("#dnsCredentials").val("SAKURACLOUD_ACCESS_TOKEN=\nSAKURACLOUD_ACCESS_TOKEN_SECRET=");
|
||||
break;
|
||||
case "scaleway":
|
||||
$("#dnsCredentials").val("SCW_PROJECT_ID=\nSCW_SECRET_KEY=");
|
||||
break;
|
||||
case "selectel":
|
||||
$("#dnsCredentials").val("SELECTEL_API_TOKEN=");
|
||||
break;
|
||||
case "selectelv2":
|
||||
$("#dnsCredentials").val("SELECTELV2_ACCOUNT_ID=\nSELECTELV2_PASSWORD=\nSELECTELV2_PROJECT_ID=\nSELECTELV2_USERNAME=");
|
||||
break;
|
||||
case "servercow":
|
||||
$("#dnsCredentials").val("SERVERCOW_PASSWORD=\nSERVERCOW_USERNAME=");
|
||||
break;
|
||||
case "shellrent":
|
||||
$("#dnsCredentials").val("SHELLRENT_TOKEN=\nSHELLRENT_USERNAME=");
|
||||
break;
|
||||
case "simply":
|
||||
$("#dnsCredentials").val("SIMPLY_ACCOUNT_NAME=\nSIMPLY_API_KEY=");
|
||||
break;
|
||||
case "sonic":
|
||||
$("#dnsCredentials").val("SONIC_API_KEY=\nSONIC_USER_ID=");
|
||||
break;
|
||||
case "stackpath":
|
||||
$("#dnsCredentials").val("STACKPATH_CLIENT_ID=\nSTACKPATH_CLIENT_SECRET=\nSTACKPATH_STACK_ID=");
|
||||
break;
|
||||
case "tencentcloud":
|
||||
$("#dnsCredentials").val("TENCENTCLOUD_SECRET_ID=\nTENCENTCLOUD_SECRET_KEY=");
|
||||
break;
|
||||
case "transip":
|
||||
$("#dnsCredentials").val("TRANSIP_ACCOUNT_NAME=\nTRANSIP_PRIVATE_KEY_PATH=");
|
||||
break;
|
||||
case "safedns":
|
||||
$("#dnsCredentials").val("SAFEDNS_AUTH_TOKEN=");
|
||||
break;
|
||||
case "ultradns":
|
||||
$("#dnsCredentials").val("ULTRADNS_PASSWORD=\nULTRADNS_USERNAME=");
|
||||
break;
|
||||
case "variomedia":
|
||||
$("#dnsCredentials").val("VARIOMEDIA_API_TOKEN=");
|
||||
break;
|
||||
case "vegadns":
|
||||
$("#dnsCredentials").val("SECRET_VEGADNS_KEY=\nSECRET_VEGADNS_SECRET=\nVEGADNS_URL=");
|
||||
break;
|
||||
case "vercel":
|
||||
$("#dnsCredentials").val("VERCEL_API_TOKEN=");
|
||||
break;
|
||||
case "versio":
|
||||
$("#dnsCredentials").val("VERSIO_PASSWORD=\nVERSIO_USERNAME=");
|
||||
break;
|
||||
case "vinyldns":
|
||||
$("#dnsCredentials").val("VINYLDNS_ACCESS_KEY=\nVINYLDNS_HOST=\nVINYLDNS_SECRET_KEY=");
|
||||
break;
|
||||
case "vkcloud":
|
||||
$("#dnsCredentials").val("VK_CLOUD_PASSWORD=\nVK_CLOUD_PROJECT_ID=\nVK_CLOUD_USERNAME=");
|
||||
break;
|
||||
case "vscale":
|
||||
$("#dnsCredentials").val("VSCALE_API_TOKEN=");
|
||||
break;
|
||||
case "vultr":
|
||||
$("#dnsCredentials").val("VULTR_API_KEY=");
|
||||
break;
|
||||
case "webnames":
|
||||
$("#dnsCredentials").val("WEBNAMES_API_KEY=");
|
||||
break;
|
||||
case "httpreq":
|
||||
$("#dnsCredentials").val("HTTPREQ_ENDPOINT=\nHTTPREQ_MODE=\nRAW=");
|
||||
break;
|
||||
case "websupport":
|
||||
$("#dnsCredentials").val("WEBSUPPORT_API_KEY=\nWEBSUPPORT_SECRET=");
|
||||
break;
|
||||
case "wedos":
|
||||
$("#dnsCredentials").val("WEDOS_USERNAME=\nWEDOS_WAPI_PASSWORD=");
|
||||
break;
|
||||
case "yandex360":
|
||||
$("#dnsCredentials").val("YANDEX360_OAUTH_TOKEN=\nYANDEX360_ORG_ID=");
|
||||
break;
|
||||
case "yandexcloud":
|
||||
$("#dnsCredentials").val("YANDEX_CLOUD_FOLDER_ID=\nYANDEX_CLOUD_IAM_TOKEN=\ndns.admin=");
|
||||
break;
|
||||
case "yandex":
|
||||
$("#dnsCredentials").val("YANDEX_PDD_TOKEN=");
|
||||
break;
|
||||
case "zoneee":
|
||||
$("#dnsCredentials").val("ZONEEE_API_KEY=\nZONEEE_API_USER=");
|
||||
break;
|
||||
case "zonomi":
|
||||
$("#dnsCredentials").val("ZONOMI_API_KEY=");
|
||||
break;
|
||||
}
|
||||
})
|
||||
let newProviderName = $("#dnsProvider").find("input").val();
|
||||
$.get("/api/acme/dns/providers?name=" + newProviderName, function(data){
|
||||
console.log("Loaded required config", data);
|
||||
$("#dnsProviderAPIFields").html("");
|
||||
//Generate a form for this config
|
||||
let booleanFieldsHTML = "";
|
||||
for (const [key, datatype] of Object.entries(data)) {
|
||||
if (datatype == "int"){
|
||||
$("#dnsProviderAPIFields").append(`<div class="ui fluid labeled dnsConfigField input" key="${key}" style="margin-top: 0.2em;">
|
||||
<div class="ui basic blue label" style="font-weight: 300;">
|
||||
${key}
|
||||
</div>
|
||||
<input type="number" value="300">
|
||||
</div>`);
|
||||
}else if (datatype == "bool"){
|
||||
booleanFieldsHTML += (`<div class="ui checkbox dnsConfigField" key="${key}" style="margin-top: 1em !important; padding-left: 0.4em;">
|
||||
<input type="checkbox">
|
||||
<label>${key}</label>
|
||||
</div>`);
|
||||
}else{
|
||||
//Default to string
|
||||
$("#dnsProviderAPIFields").append(`<div class="ui fluid labeled input dnsConfigField" key="${key}" style="margin-top: 0.2em;">
|
||||
<div class="ui basic label" style="font-weight: 300;">
|
||||
${key}
|
||||
</div>
|
||||
<input type="text">
|
||||
</div>`);
|
||||
}
|
||||
}
|
||||
|
||||
//Append the boolean fields at the bottom, if exists
|
||||
$("#dnsProviderAPIFields").append(booleanFieldsHTML);
|
||||
if (booleanFieldsHTML != ""){
|
||||
$(".dnsConfigField.checkbox").checkbox();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Get filename form domains and input
|
||||
function getFilename() {
|
||||
@ -987,29 +515,52 @@
|
||||
});
|
||||
}
|
||||
|
||||
//Read DNS credential from form and generate a key value structure that looks like
|
||||
// the old DNSCredential TextArea input
|
||||
|
||||
function readDnsCredentials(){
|
||||
let dnsCredentials = "";
|
||||
$(".dnsConfigField").each(function(){
|
||||
let thisKey = $(this).attr("key");
|
||||
if ($(this).hasClass("checkbox")){
|
||||
//Boolean option
|
||||
let checked = $(this).find("input")[0].checked;
|
||||
dnsCredentials += `${thisKey}=${checked?"true":"false"}\n`
|
||||
}else{
|
||||
//String or int options
|
||||
let value = $(this).find("input").val().trim();
|
||||
dnsCredentials += `${thisKey}=${value}\n`
|
||||
}
|
||||
});
|
||||
dnsCredentials = dnsCredentials.trim();
|
||||
return dnsCredentials;
|
||||
}
|
||||
|
||||
// Update DNS values for autorenewal
|
||||
function updateCertificateDNS() {
|
||||
var dns = $("#useDnsChallenge")[0].checked;
|
||||
var dnsProvider = "";
|
||||
var dnsCredentials = "";
|
||||
|
||||
if (dns) {
|
||||
dnsProvider = $("#dnsProvider").dropdown("get value");
|
||||
dnsCredentials = $("#dnsCredentials").val();
|
||||
if (!dns) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(dnsProvider == "") {
|
||||
parent.msgbox("DNS Provider cannot be empty", false, 5000);
|
||||
$("#obtainButton").removeClass("loading").removeClass("disabled");
|
||||
return;
|
||||
}
|
||||
dnsProvider = $("#dnsProvider").dropdown("get value");
|
||||
|
||||
|
||||
if(dnsCredentials == "") {
|
||||
parent.msgbox("DNS Credentials cannot be empty", false, 5000);
|
||||
$("#obtainButton").removeClass("loading").removeClass("disabled");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
//dnsCredentials = $("#dnsCredentials").val();
|
||||
dnsCredentials = readDnsCredentials();
|
||||
|
||||
if(dnsProvider == "") {
|
||||
parent.msgbox("DNS Provider cannot be empty", false, 5000);
|
||||
$("#obtainButton").removeClass("loading").removeClass("disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if(dnsCredentials == "") {
|
||||
parent.msgbox("DNS Credentials cannot be empty", false, 5000);
|
||||
$("#obtainButton").removeClass("loading").removeClass("disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1234,7 +785,35 @@
|
||||
}
|
||||
}
|
||||
|
||||
//Clear up the input field when page load
|
||||
//Load the json map and create the dropdown for DNS provider names
|
||||
let dnsProviderNameMap = {};
|
||||
function initDNSProviderList(){
|
||||
$.get("dnsnames.json", function(namemap){
|
||||
dnsProviderNameMap = namemap;
|
||||
//Load a list of supported DNS provider from backend
|
||||
$("#dnsProviderList").html("");
|
||||
$.get("/api/acme/dns/providers", function(providerList){
|
||||
providerList.sort();
|
||||
providerList.forEach(providerid => {
|
||||
let providerName = providerid;
|
||||
if (dnsProviderNameMap[providerid] != undefined){
|
||||
providerName = dnsProviderNameMap[providerid];
|
||||
}
|
||||
$("#dnsProviderList").append(`<div class="item" data-value="${providerid}">${providerName}</div>`);
|
||||
});
|
||||
$("#dnsProvider").dropdown();
|
||||
setTimeout(function(){
|
||||
//The dropdown is large, it takes some time to load
|
||||
$("#dnsProvider").dropdown("set selected", "cloudflare");
|
||||
}, 300)
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
initDNSProviderList();
|
||||
|
||||
|
||||
//Clear up the input field when page load
|
||||
$("#filenameInput").val("");
|
||||
</script>
|
||||
</body>
|
||||
|
132
src/web/snippet/dnsnames.json
Normal file
132
src/web/snippet/dnsnames.json
Normal file
@ -0,0 +1,132 @@
|
||||
{
|
||||
"edgedns": "Akamai EdgeDNS",
|
||||
"alidns": "Alibaba Cloud DNS",
|
||||
"allinkl": "all-inkl",
|
||||
"lightsail": "Amazon Lightsail",
|
||||
"route53": "Amazon Route 53",
|
||||
"arvancloud": "ArvanCloud",
|
||||
"auroradns": "Aurora DNS",
|
||||
"autodns": "Autodns",
|
||||
"azure": "Azure (deprecated)",
|
||||
"azuredns": "Azure DNS",
|
||||
"bindman": "Bindman",
|
||||
"bluecat": "Bluecat",
|
||||
"brandit": "Brandit",
|
||||
"bunny": "Bunny",
|
||||
"checkdomain": "Checkdomain",
|
||||
"civo": "Civo",
|
||||
"cloudru": "Cloud.ru",
|
||||
"clouddns": "CloudDNS",
|
||||
"cloudflare": "Cloudflare",
|
||||
"cloudns": "ClouDNS",
|
||||
"cloudxns": "CloudXNS",
|
||||
"conoha": "ConoHa",
|
||||
"constellix": "Constellix",
|
||||
"cpanel": "CPanel/WHM",
|
||||
"derak": "Derak Cloud",
|
||||
"desec": "deSEC.io",
|
||||
"designate": "Designate DNSaaS for Openstack",
|
||||
"digitalocean": "Digital Ocean",
|
||||
"dnsmadeeasy": "DNS Made Easy",
|
||||
"dnshomede": "dnsHome.de",
|
||||
"dnsimple": "DNSimple",
|
||||
"dnspod": "DNSPod (deprecated)",
|
||||
"dode": "Domain Offensive (do.de)",
|
||||
"domeneshop": "Domeneshop",
|
||||
"dreamhost": "DreamHost",
|
||||
"duckdns": "Duck DNS",
|
||||
"dyn": "Dyn",
|
||||
"dynu": "Dynu",
|
||||
"easydns": "EasyDNS",
|
||||
"efficientip": "Efficient IP",
|
||||
"epik": "Epik",
|
||||
"exoscale": "Exoscale",
|
||||
"exec": "External program",
|
||||
"freemyip": "freemyip.com",
|
||||
"gcore": "G-Core",
|
||||
"gandi": "Gandi",
|
||||
"gandiv5": "Gandi Live DNS (v5)",
|
||||
"glesys": "Glesys",
|
||||
"godaddy": "Go Daddy",
|
||||
"gcloud": "Google Cloud",
|
||||
"googledomains": "Google Domains",
|
||||
"hetzner": "Hetzner",
|
||||
"hostingde": "Hosting.de",
|
||||
"hosttech": "Hosttech",
|
||||
"httpreq": "HTTP request",
|
||||
"httpnet": "http.net",
|
||||
"hurricane": "Hurricane Electric DNS",
|
||||
"hyperone": "HyperOne",
|
||||
"ibmcloud": "IBM Cloud (SoftLayer)",
|
||||
"iijdpf": "IIJ DNS Platform Service",
|
||||
"infoblox": "Infoblox",
|
||||
"infomaniak": "Infomaniak",
|
||||
"iij": "Internet Initiative Japan",
|
||||
"internetbs": "Internet.bs",
|
||||
"inwx": "INWX",
|
||||
"ionos": "Ionos",
|
||||
"ipv64": "IPv64",
|
||||
"iwantmyname": "iwantmyname",
|
||||
"joker": "Joker",
|
||||
"acme-dns": "Joohoi's ACME-DNS",
|
||||
"liara": "Liara",
|
||||
"linode": "Linode (v4)",
|
||||
"liquidweb": "Liquid Web",
|
||||
"loopia": "Loopia",
|
||||
"luadns": "LuaDNS",
|
||||
"mailinabox": "Mail-in-a-Box",
|
||||
"metaname": "Metaname",
|
||||
"mydnsjp": "MyDNS.jp",
|
||||
"mythicbeasts": "MythicBeasts",
|
||||
"namedotcom": "Name.com",
|
||||
"namecheap": "Namecheap",
|
||||
"namesilo": "Namesilo",
|
||||
"nearlyfreespeech": "NearlyFreeSpeech.NET",
|
||||
"netcup": "Netcup",
|
||||
"netlify": "Netlify",
|
||||
"nicmanager": "Nicmanager",
|
||||
"nifcloud": "NIFCloud",
|
||||
"njalla": "Njalla",
|
||||
"nodion": "Nodion",
|
||||
"ns1": "NS1",
|
||||
"otc": "Open Telekom Cloud",
|
||||
"oraclecloud": "Oracle Cloud",
|
||||
"ovh": "OVH",
|
||||
"plesk": "plesk.com",
|
||||
"porkbun": "Porkbun",
|
||||
"pdns": "PowerDNS",
|
||||
"rackspace": "Rackspace",
|
||||
"rcodezero": "RcodeZero",
|
||||
"regru": "reg.ru",
|
||||
"rfc2136": "RFC2136",
|
||||
"rimuhosting": "RimuHosting",
|
||||
"sakuracloud": "Sakura Cloud",
|
||||
"scaleway": "Scaleway",
|
||||
"selectel": "Selectel",
|
||||
"servercow": "Servercow",
|
||||
"shellrent": "Shellrent",
|
||||
"simply": "Simply.com",
|
||||
"sonic": "Sonic",
|
||||
"stackpath": "Stackpath",
|
||||
"tencentcloud": "Tencent Cloud DNS",
|
||||
"transip": "TransIP",
|
||||
"safedns": "UKFast SafeDNS",
|
||||
"ultradns": "Ultradns",
|
||||
"variomedia": "Variomedia",
|
||||
"vegadns": "VegaDNS",
|
||||
"vercel": "Vercel",
|
||||
"versio": "Versio.[nl|eu|uk]",
|
||||
"vinyldns": "VinylDNS",
|
||||
"vkcloud": "VK Cloud",
|
||||
"vscale": "Vscale",
|
||||
"vultr": "Vultr",
|
||||
"webnames": "Webnames",
|
||||
"websupport": "Websupport",
|
||||
"wedos": "WEDOS",
|
||||
"yandex360": "Yandex 360",
|
||||
"yandexcloud": "Yandex Cloud",
|
||||
"yandex": "Yandex PDD",
|
||||
"zoneee": "Zone.ee",
|
||||
"zonomi": "Zonomi"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user