diff --git a/tools/dns_challenge_update/code-gen/README.md b/tools/dns_challenge_update/code-gen/README.md new file mode 100644 index 0000000..96c4d66 --- /dev/null +++ b/tools/dns_challenge_update/code-gen/README.md @@ -0,0 +1,38 @@ +### DNS Challenge Update Data Structure Code Generator + +This script is designed to automatically pull lego, update the providersdef module with new json file and create a function for automatically create a provider based on the given providers name and config json. + +### Usage + +To update the module, simply run update.sh + +``` +./update.sh +``` + +The updated files will be written into the providersdef folder. Then, you can copy it to the ACME module folder (or later-on a CICD pipeline will be made to do this automatically, but for now you have to manually copy it into the module under `src/mod/`) + + + +### Module Usage + +To use the module, you can call to the following function inside the providersdef + +```go +func GetDNSProviderByJsonConfig(name string, js string)(challenge.Provider, error) + +//For example +providersdef.GetDNSProviderByJsonConfig("gandi", "{\"Username\":\"far\",\"Password\":\"boo\"}") +``` + + + +This should be able to replace the default lego v4 build in one (the one attached below) that requires the use of environment variables + +```go +// NewDNSChallengeProviderByName Factory for DNS providers. +func NewDNSChallengeProviderByName(name string) (challenge.Provider, error) +``` + + + diff --git a/tools/dns_challenge_update/code-gen/extract.go b/tools/dns_challenge_update/code-gen/extract.go new file mode 100644 index 0000000..5d07ff2 --- /dev/null +++ b/tools/dns_challenge_update/code-gen/extract.go @@ -0,0 +1,235 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "regexp" + "strings" +) + +var legoProvidersSourceFolder string = "./lego/providers/dns/" +var outputDir string = "./providersdef" +var defTemplate string = `package providerdef + +import ( + "encoding/json" + "fmt" + + "github.com/go-acme/lego/v4/challenge" +{{imports}} +) + +//name is the DNS provider name, e.g. cloudflare or gandi +//JSON (js) must be in key-value string, e.g. {"Username":"far","Password":"boo"} +func GetDNSProviderByJsonConfig(name string, js string)(challenge.Provider, error){ + switch name { +{{magic}} + default: + return nil, fmt.Errorf("unrecognized DNS provider: %s", name) + } +} +` + +type Field struct { + Title string + Datatype string +} +type ProviderInfo struct { + Name string //Name of this provider + ConfigableFields []*Field //Field that shd be expose to user for filling in + HiddenFields []*Field //Fields that is usable but shd be hidden from user +} + +func fileExists(filePath string) bool { + _, err := os.Stat(filePath) + if err == nil { + return true + } + if os.IsNotExist(err) { + return false + } + // For other errors, you may handle them differently + return false +} + +// This function define the DNS not supported by zoraxy +func getExcludedDNSProviders() []string { + return []string{ + "edgedns", //Too complex data structure + "exec", //Not a DNS provider + "httpreq", //Not a DNS provider + "hurricane", //Multi-credentials arch + "oraclecloud", //Evil company + "acmedns", //Not a DNS provider + "selectelv2", //Not sure why not working with our code generator + } +} + +func isInSlice(str string, slice []string) bool { + for _, s := range slice { + if s == str { + return true + } + } + return false +} + +func isExcludedDNSProvider(providerName string) bool { + return isInSlice(providerName, getExcludedDNSProviders()) +} + +// extractConfigStruct extracts the name of the config struct and its content as plain text from a given source code. +func extractConfigStruct(sourceCode string) (string, string) { + // Regular expression to match the struct declaration. + structRegex := regexp.MustCompile(`type\s+([A-Za-z0-9_]+)\s+struct\s*{([^{}]*)}`) + + // Find the first match of the struct declaration. + match := structRegex.FindStringSubmatch(sourceCode) + if len(match) < 3 { + return "", "" // No match found + } + + // Extract the struct name and its content. + structName := match[1] + structContent := match[2] + + return structName, structContent +} + +func main() { + // A map of provider name to information on what can be filled + extractedProviderList := map[string]*ProviderInfo{} + + //Search all providers + providers, err := filepath.Glob(filepath.Join(legoProvidersSourceFolder, "/*")) + if err != nil { + panic(err) + } + + //Create output folder if not exists + err = os.MkdirAll(outputDir, 0775) + if err != nil { + panic(err) + } + + generatedConvertcode := "" + importList := "" + for _, provider := range providers { + providerName := filepath.Base(provider) + if isExcludedDNSProvider(providerName) { + //Ignore this provider + continue + } + //Check if {provider_name}.go exists + providerDef := filepath.Join(provider, providerName+".go") + if !fileExists(providerDef) { + continue + } + + fmt.Println("Extracting config structure for: " + providerDef) + providerSrc, err := os.ReadFile(providerDef) + if err != nil { + fmt.Println(err.Error()) + return + } + _, strctContent := extractConfigStruct(string(providerSrc)) + + //Filter and write the content to json + /* + Example of stctContent (Note the tab prefix) + + Token string + PropagationTimeout time.Duration + PollingInterval time.Duration + SequenceInterval time.Duration + HTTPClient *http.Client + */ + strctContentLines := strings.Split(strctContent, "\n") + configKeys := []*Field{} + hiddenKeys := []*Field{} + for _, lineDef := range strctContentLines { + fields := strings.Fields(lineDef) + if len(fields) < 2 || strings.HasPrefix(fields[0], "//") { + //Ignore this line + continue + } + + //Filter out the fields that is not user-filled + switch fields[1] { + case "*url.URL": + fallthrough + case "string": + configKeys = append(configKeys, &Field{ + Title: fields[0], + Datatype: fields[1], + }) + case "int": + if fields[0] != "TTL" { + configKeys = append(configKeys, &Field{ + Title: fields[0], + Datatype: fields[1], + }) + } else { + hiddenKeys = append(hiddenKeys, &Field{ + Title: fields[0], + Datatype: fields[1], + }) + } + case "bool": + if fields[0] == "InsecureSkipVerify" || fields[0] == "SSLVerify" || fields[0] == "Debug" { + configKeys = append(configKeys, &Field{ + Title: fields[0], + Datatype: fields[1], + }) + } else { + hiddenKeys = append(hiddenKeys, &Field{ + Title: fields[0], + Datatype: fields[1], + }) + } + default: + //Not used fields + hiddenKeys = append(hiddenKeys, &Field{ + Title: fields[0], + Datatype: fields[1], + }) + } + } + fmt.Println(strctContent) + + extractedProviderList[providerName] = &ProviderInfo{ + Name: providerName, + ConfigableFields: configKeys, + HiddenFields: hiddenKeys, + } + + //Generate the code for it + + //Generate the code for converting incoming json into target config + codeSegment := ` + case "` + providerName + `": + cfg := ` + providerName + `.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return ` + providerName + `.NewDNSProviderConfig(&cfg)` + + generatedConvertcode += codeSegment + importList += ` "github.com/go-acme/lego/v4/providers/dns/` + providerName + "\"\n" + } + + js, err := json.MarshalIndent(extractedProviderList, "", " ") + if err != nil { + panic(err) + } + os.WriteFile(filepath.Join(outputDir, "providers.json"), js, 0775) + + fullCodeSnippet := strings.ReplaceAll(defTemplate, "{{magic}}", generatedConvertcode) + fullCodeSnippet = strings.ReplaceAll(fullCodeSnippet, "{{imports}}", importList) + + os.WriteFile(filepath.Join(outputDir, "providersdef.go"), []byte(fullCodeSnippet), 0775) + fmt.Println("Output written to file") +} diff --git a/tools/dns_challenge_update/code-gen/providersdef/providers.json b/tools/dns_challenge_update/code-gen/providersdef/providers.json new file mode 100644 index 0000000..25e3938 --- /dev/null +++ b/tools/dns_challenge_update/code-gen/providersdef/providers.json @@ -0,0 +1,3950 @@ +{ + "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" + } + ] + }, + "designate": { + "Name": "designate", + "ConfigableFields": [], + "HiddenFields": [ + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + }, + { + "Title": "opts", + "Datatype": "gophercloud.AuthOptions" + } + ] + }, + "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" + } + ] + }, + "mythicbeasts": { + "Name": "mythicbeasts", + "ConfigableFields": [ + { + "Title": "UserName", + "Datatype": "string" + }, + { + "Title": "Password", + "Datatype": "string" + }, + { + "Title": "APIEndpoint", + "Datatype": "*url.URL" + }, + { + "Title": "AuthAPIEndpoint", + "Datatype": "*url.URL" + } + ], + "HiddenFields": [ + { + "Title": "HTTPClient", + "Datatype": "*http.Client" + }, + { + "Title": "PropagationTimeout", + "Datatype": "time.Duration" + }, + { + "Title": "PollingInterval", + "Datatype": "time.Duration" + }, + { + "Title": "TTL", + "Datatype": "int" + } + ] + }, + "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": "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/tools/dns_challenge_update/code-gen/providersdef/providersdef.go b/tools/dns_challenge_update/code-gen/providersdef/providersdef.go new file mode 100644 index 0000000..88f060e --- /dev/null +++ b/tools/dns_challenge_update/code-gen/providersdef/providersdef.go @@ -0,0 +1,995 @@ +package providerdef + +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/designate" + "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/mythicbeasts" + "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 "designate": + cfg := designate.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return designate.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 "mythicbeasts": + cfg := mythicbeasts.Config{} + err := json.Unmarshal([]byte(js), &cfg) + if err != nil { + return nil, err + } + return mythicbeasts.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/tools/dns_challenge_update/code-gen/update.sh b/tools/dns_challenge_update/code-gen/update.sh new file mode 100644 index 0000000..9956643 --- /dev/null +++ b/tools/dns_challenge_update/code-gen/update.sh @@ -0,0 +1,21 @@ +#/bin/bash + +repo_url="https://github.com/go-acme/lego" + +# Check if the folder "./lego" exists +if [ -d "./lego" ]; then + # If the folder exists, change into it and perform a git pull + echo "Folder './lego' exists. Pulling updates..." + cd "./lego" || exit + git pull + cd ../ +else + # If the folder doesn't exist, clone the repository + echo "Folder './lego' does not exist. Cloning the repository..." + git clone "$repo_url" "./lego" || exit +fi + +# Run the extract.go to get all the config from lego source code +go run ./extract.go + +echo "Config generated" \ No newline at end of file diff --git a/providers-scraper-util.js b/tools/dns_challenge_update/providers-scraper-util.js similarity index 100% rename from providers-scraper-util.js rename to tools/dns_challenge_update/providers-scraper-util.js