diff --git a/Makefile b/Makefile index 245001aaf..d2772bcb4 100644 --- a/Makefile +++ b/Makefile @@ -39,16 +39,16 @@ checks: .PHONY: patch minor major detach patch: - go run ./internal/releaser/ release -m patch + go run ./internal/generators/releaser/ release -m patch minor: - go run ./internal/releaser/ release -m minor + go run ./internal/generators/releaser/ release -m minor major: - go run ./internal/releaser/ release -m major + go run ./internal/generators/releaser/ release -m major detach: - go run ./internal/releaser/ detach + go run ./internal/generators/releaser/ detach # Docs .PHONY: docs-build docs-serve docs-themes diff --git a/cmd/cmd_register.go b/cmd/cmd_register.go index 70b2aa815..48fa77f44 100644 --- a/cmd/cmd_register.go +++ b/cmd/cmd_register.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v5/lego" "github.com/go-acme/lego/v5/log" "github.com/go-acme/lego/v5/registration" + "github.com/go-acme/lego/v5/registration/zerossl" "github.com/urfave/cli/v3" ) @@ -94,6 +95,8 @@ func registerAccount(ctx context.Context, cmd *cli.Command, client *lego.Client) Kid: kid, HmacEncoded: hmacEncoded, }) + } else if zerossl.IsZeroSSL(cmd.String(flgServer)) { + return registration.RegisterWithZeroSSL(ctx, client.Registration, cmd.String(flgEmail)) } return client.Registration.Register(ctx, registration.RegisterOptions{TermsOfServiceAgreed: true}) diff --git a/cmd/flags.go b/cmd/flags.go index 62e73ded9..60ec49d60 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -1,15 +1,19 @@ package cmd import ( + "context" "fmt" + "log/slog" "os" "path/filepath" + "strings" "time" "github.com/go-acme/lego/v5/acme" "github.com/go-acme/lego/v5/certificate" "github.com/go-acme/lego/v5/cmd/internal/storage" "github.com/go-acme/lego/v5/lego" + "github.com/go-acme/lego/v5/log" "github.com/urfave/cli/v3" "software.sslmate.com/src/go-pkcs12" ) @@ -160,12 +164,23 @@ const ( func createACMEClientFlags() []cli.Flag { return []cli.Flag{ &cli.StringFlag{ - Name: flgServer, - Aliases: []string{"s"}, - Sources: cli.EnvVars(envServer), - Usage: "CA hostname (and optionally :port). The server certificate must be trusted in order to avoid further modifications to the client.", - Value: lego.LEDirectoryProduction, - Required: true, + // NOTE(ldez): if Required is true, then the default value is not display in the help. + Name: flgServer, + Aliases: []string{"s"}, + Sources: cli.EnvVars(envServer), + Usage: fmt.Sprintf("CA (ACME server). It can be either a URL or a shortcode."+ + "\n\t(available shortcodes: %s)", strings.Join(lego.GetAllCodes(), ", ")), + Value: lego.DirectoryURLLetsEncrypt, + Action: func(ctx context.Context, cmd *cli.Command, s string) error { + directoryURL, err := lego.GetDirectoryURL(s) + if err != nil { + log.Debug("Server shortcode not found. Use the value as URL.", slog.String("value", s), log.ErrorAttr(err)) + + directoryURL = s + } + + return cmd.Set(flgServer, directoryURL) + }, }, &cli.BoolFlag{ Category: categoryAdvanced, diff --git a/docs/data/zz_cli_help.toml b/docs/data/zz_cli_help.toml index ffdde74e5..fe4dee42e 100644 --- a/docs/data/zz_cli_help.toml +++ b/docs/data/zz_cli_help.toml @@ -39,7 +39,8 @@ OPTIONS: --email string, -m string Email used for registration and recovery contact. [$LEGO_EMAIL] --help, -h show help --key-type string, -k string Key type to use for private keys. Supported: rsa2048, rsa3072, rsa4096, rsa8192, ec256, ec384. (default: "ec256") - --server string, -s string CA hostname (and optionally :port). The server certificate must be trusted in order to avoid further modifications to the client. [$LEGO_SERVER] + --server string, -s string CA (ACME server). It can be either a URL or a shortcode. + (available shortcodes: actalis, digicert, freessl, globalsign, googletrust, googletrust-staging, letsencrypt, letsencrypt-staging, litessl, peeringhub, sslcomecc, sslcomrsa, sectigo, sectigoev, sectigoov, zerossl) (default: "https://acme-v02.api.letsencrypt.org/directory") [$LEGO_SERVER] Flags related to External Account Binding: @@ -127,7 +128,8 @@ OPTIONS: --email string, -m string Email used for registration and recovery contact. [$LEGO_EMAIL] --help, -h show help --key-type string, -k string Key type to use for private keys. Supported: rsa2048, rsa3072, rsa4096, rsa8192, ec256, ec384. (default: "ec256") - --server string, -s string CA hostname (and optionally :port). The server certificate must be trusted in order to avoid further modifications to the client. [$LEGO_SERVER] + --server string, -s string CA (ACME server). It can be either a URL or a shortcode. + (available shortcodes: actalis, digicert, freessl, globalsign, googletrust, googletrust-staging, letsencrypt, letsencrypt-staging, litessl, peeringhub, sslcomecc, sslcomrsa, sectigo, sectigoev, sectigoov, zerossl) (default: "https://acme-v02.api.letsencrypt.org/directory") [$LEGO_SERVER] Flags related to ACME Renewal Information (ARI) Extension: @@ -222,7 +224,8 @@ OPTIONS: --keep, -k Keep the certificates after the revocation instead of archiving them. --key-type string, -k string Key type to use for private keys. Supported: rsa2048, rsa3072, rsa4096, rsa8192, ec256, ec384. (default: "ec256") --reason uint Identifies the reason for the certificate revocation. See https://www.rfc-editor.org/rfc/rfc5280.html#section-5.3.1. Valid values are: 0 (unspecified), 1 (keyCompromise), 2 (cACompromise), 3 (affiliationChanged), 4 (superseded), 5 (cessationOfOperation), 6 (certificateHold), 8 (removeFromCRL), 9 (privilegeWithdrawn), or 10 (aACompromise). (default: 0) - --server string, -s string CA hostname (and optionally :port). The server certificate must be trusted in order to avoid further modifications to the client. [$LEGO_SERVER] + --server string, -s string CA (ACME server). It can be either a URL or a shortcode. + (available shortcodes: actalis, digicert, freessl, globalsign, googletrust, googletrust-staging, letsencrypt, letsencrypt-staging, litessl, peeringhub, sslcomecc, sslcomrsa, sectigo, sectigoev, sectigoov, zerossl) (default: "https://acme-v02.api.letsencrypt.org/directory") [$LEGO_SERVER] Flags related to External Account Binding: diff --git a/providers/dns/internal/errutils/client.go b/internal/errutils/client.go similarity index 100% rename from providers/dns/internal/errutils/client.go rename to internal/errutils/client.go diff --git a/internal/generators/ca/ca.go.tmpl b/internal/generators/ca/ca.go.tmpl new file mode 100644 index 000000000..f9aa7841f --- /dev/null +++ b/internal/generators/ca/ca.go.tmpl @@ -0,0 +1,42 @@ +// Code generated by 'make generate-dns'; DO NOT EDIT. + +package lego + +import ( + "fmt" + "strings" +) + +const ( +{{- range . }} + // Code{{ ToVarName .Code }} is the CA code for {{ .Name }}. + // {{ .DocumentationURL }} + Code{{ ToVarName .Code }} = "{{ ToLower .Code }}" +{{ end }}) + +const ( +{{- range . }} + // DirectoryURL{{ ToVarName .Code }} is the directory URL for {{ .Name }}. + // {{ .DocumentationURL }} + DirectoryURL{{ ToVarName .Code }} = "{{ .DirectoryURL }}" +{{ end }}) + +// GetDirectoryURL returns the directory URL for the given CA code. +func GetDirectoryURL(code string) (string, error) { + switch strings.ToLower(code) { + {{- range . }} + case Code{{ ToVarName .Code }}: + return DirectoryURL{{ ToVarName .Code }}, nil + {{ end }} + default: + return "", fmt.Errorf("unknown ACME server code: %q", code) + } +} + +func GetAllCodes() []string { + return []string{ +{{- range . }} + Code{{ ToVarName .Code }}, +{{- end }} + } +} diff --git a/internal/generators/ca/cas.json b/internal/generators/ca/cas.json new file mode 100644 index 000000000..a5702745b --- /dev/null +++ b/internal/generators/ca/cas.json @@ -0,0 +1,114 @@ +[ + { + "name": "Actalis", + "type": "production", + "code": "Actalis", + "directoryURL": "https://acme-api.actalis.com/acme/directory", + "documentationURL": "https://guide.actalis.com/ssl/activation/acme" + }, + { + "name": "Digicert", + "type": "production", + "code": "Digicert", + "directoryURL": "https://one.digicert.com/mpki/api/v1/acme/v2/directory", + "documentationURL": "https://docs.digicert.com/en/trust-lifecycle-manager/automate-management-of-certificates/acme-automation-service/third-party-acme-integration/install-and-configure-third-party-acme-clients.html" + }, + { + "name": "FreeSSL", + "type": "production", + "code": "FreeSSL", + "directoryURL": "https://acmepro.freessl.cn/v2/DV", + "documentationURL": "https://freessl.cn/" + }, + { + "name": "GlobalSign", + "type": "production", + "code": "GlobalSign", + "directoryURL": "https://emea.acme.atlas.globalsign.com/directory", + "documentationURL": "https://docs.globalsign.com/solutions/services/acme/issuing-certificates-http-validation" + }, + { + "name": "Google Trust", + "type": "production", + "code": "GoogleTrust", + "directoryURL": "https://dv.acme-v02.api.pki.goog/directory", + "documentationURL": "https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial#register-acme" + }, + { + "name": "Google Trust staging", + "type": "staging", + "code": "GoogleTrust-Staging", + "directoryURL": " https://dv.acme-v02.test-api.pki.goog/directory", + "documentationURL": "https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial#register-acme" + }, + { + "name": "Let's Encrypt", + "type": "production", + "code": "LetsEncrypt", + "directoryURL": "https://acme-v02.api.letsencrypt.org/directory", + "documentationURL": "https://letsencrypt.org/docs/" + }, + { + "name": "Let's Encrypt staging", + "type": "staging", + "code": "LetsEncrypt-Staging", + "directoryURL": "https://acme-staging-v02.api.letsencrypt.org/directory", + "documentationURL": "https://letsencrypt.org/docs/staging-environment/" + }, + { + "name": "LiteSSL", + "type": "production", + "code": "LiteSSL", + "directoryURL": "https://acme.litessl.com/acme/v2/directory", + "documentationURL": "https://litessl.cn/" + }, + { + "name": "PeeringHub", + "type": "production", + "code": "PeeringHub", + "directoryURL": "https://stica.peeringhub.io/acme", + "documentationURL": "https://doc.peeringhub.io/guides/generating-certificate/acme-protocol-reference/list-server-directory" + }, + { + "name": "SSL.com ECDSA", + "type": "production", + "code": "SSLComECC", + "directoryURL": "https://acme.ssl.com/sslcom-dv-ecc", + "documentationURL": "https://www.ssl.com/guide/ssl-tls-certificate-issuance-and-revocation-with-acme/" + }, + { + "name": "SSL.com RSA", + "type": "production", + "code": "SSLComRSA", + "directoryURL": "https://acme.ssl.com/sslcom-dv-rsa", + "documentationURL": "https://www.ssl.com/guide/ssl-tls-certificate-issuance-and-revocation-with-acme/" + }, + { + "name": "Sectigo DV (Domain Validation)", + "type": "production", + "code": "Sectigo", + "directoryURL": "https://acme.sectigo.com/v2/DV", + "documentationURL": "https://docs.sectigo.com/caas/caas-api-guide/create-acme-accounts" + }, + { + "name": "Sectigo EV (Extended Validation)", + "type": "production", + "code": "SectigoEV", + "directoryURL": "https://acme.sectigo.com/v2/EV", + "documentationURL": "https://docs.sectigo.com/" + }, + { + "name": "Sectigo OV (Organization Validation) ", + "type": "production", + "code": "SectigoOV", + "directoryURL": "https://acme.sectigo.com/v2/OV", + "documentationURL": "https://docs.sectigo.com/caas/caas-api-guide/getting-started-ov" + }, + { + "name": "ZeroSSL", + "type": "production", + "code": "ZeroSSL", + "directoryURL": "https://acme.zerossl.com/v2/DV90", + "documentationURL": "https://zerossl.com/documentation/acme/" + } +] diff --git a/internal/generators/ca/generator.go b/internal/generators/ca/generator.go new file mode 100644 index 000000000..f4ba5a0c2 --- /dev/null +++ b/internal/generators/ca/generator.go @@ -0,0 +1,100 @@ +package main + +//go:generate go run . + +import ( + "bytes" + _ "embed" + "encoding/json" + "go/format" + "log" + "os" + "path/filepath" + "slices" + "strings" + "text/template" + "unicode" +) + +const ( + root = "../../../" + + inputPath = "cas.json" + outputPath = "lego/zz_gen_ca.go" +) + +//go:embed ca.go.tmpl +var srcTemplate string + +type Entry struct { + Name string `json:"name"` + Type string `json:"type"` + Code string `json:"code"` + DirectoryURL string `json:"directoryURL"` + DocumentationURL string `json:"documentationURL"` +} + +func main() { + err := generate() + if err != nil { + log.Fatal(err) + } +} + +func generate() error { + output, err := os.Create(filepath.Join(root, outputPath)) + if err != nil { + return err + } + + defer func() { _ = output.Close() }() + + input, err := os.Open(inputPath) + if err != nil { + return err + } + + defer func() { _ = input.Close() }() + + var entries []Entry + + slices.SortFunc(entries, func(a, b Entry) int { + return strings.Compare(a.Code, b.Code) + }) + + err = json.NewDecoder(input).Decode(&entries) + if err != nil { + return err + } + + b := &bytes.Buffer{} + + err = template.Must( + template.New("ca").Funcs(map[string]any{ + "ToLower": strings.ToLower, + "ToVarName": toVarName, + }).Parse(srcTemplate), + ).Execute(b, entries) + if err != nil { + return err + } + + // gofmt + source, err := format.Source(b.Bytes()) + if err != nil { + return err + } + + _, err = output.Write(source) + if err != nil { + return err + } + + return nil +} + +func toVarName(s string) string { + return strings.Join(strings.FieldsFunc(s, func(r rune) bool { + return !unicode.IsLetter(r) && !unicode.IsDigit(r) + }), "") +} diff --git a/internal/clihelp/generator.go b/internal/generators/clihelp/generator.go similarity index 97% rename from internal/clihelp/generator.go rename to internal/generators/clihelp/generator.go index 48fd10708..9bb5a71c6 100644 --- a/internal/clihelp/generator.go +++ b/internal/generators/clihelp/generator.go @@ -15,7 +15,7 @@ import ( "github.com/urfave/cli/v3" ) -const outputFile = "../../docs/data/zz_cli_help.toml" +const outputFile = "../../../docs/data/zz_cli_help.toml" const baseTemplate = `# THIS FILE IS AUTO-GENERATED. PLEASE DO NOT EDIT. diff --git a/internal/dns/descriptors/descriptors.go b/internal/generators/dns/descriptors/descriptors.go similarity index 100% rename from internal/dns/descriptors/descriptors.go rename to internal/generators/dns/descriptors/descriptors.go diff --git a/internal/dns/docs/generator.go b/internal/generators/dns/docs/generator.go similarity index 97% rename from internal/dns/docs/generator.go rename to internal/generators/dns/docs/generator.go index 100b1b603..48b835963 100644 --- a/internal/dns/docs/generator.go +++ b/internal/generators/dns/docs/generator.go @@ -17,14 +17,14 @@ import ( "strings" "text/template" - "github.com/go-acme/lego/v5/internal/dns/descriptors" + "github.com/go-acme/lego/v5/internal/generators/dns/descriptors" ) //go:embed templates var templateFS embed.FS const ( - root = "../../../" + root = "../../../../" cliOutput = root + "cmd/zz_gen_cmd_dnshelp.go" docOutput = root + "docs/content/dns" diff --git a/internal/dns/docs/templates/dns.go.tmpl b/internal/generators/dns/docs/templates/dns.go.tmpl similarity index 100% rename from internal/dns/docs/templates/dns.go.tmpl rename to internal/generators/dns/docs/templates/dns.go.tmpl diff --git a/internal/dns/docs/templates/dns.md.tmpl b/internal/generators/dns/docs/templates/dns.md.tmpl similarity index 100% rename from internal/dns/docs/templates/dns.md.tmpl rename to internal/generators/dns/docs/templates/dns.md.tmpl diff --git a/internal/dns/docs/templates/readme.md.tmpl b/internal/generators/dns/docs/templates/readme.md.tmpl similarity index 100% rename from internal/dns/docs/templates/readme.md.tmpl rename to internal/generators/dns/docs/templates/readme.md.tmpl diff --git a/internal/dns/providers/dns_providers.go.tmpl b/internal/generators/dns/providers/dns_providers.go.tmpl similarity index 100% rename from internal/dns/providers/dns_providers.go.tmpl rename to internal/generators/dns/providers/dns_providers.go.tmpl diff --git a/internal/dns/providers/generator.go b/internal/generators/dns/providers/generator.go similarity index 92% rename from internal/dns/providers/generator.go rename to internal/generators/dns/providers/generator.go index df1434566..ef33a17ba 100644 --- a/internal/dns/providers/generator.go +++ b/internal/generators/dns/providers/generator.go @@ -13,11 +13,11 @@ import ( "strings" "text/template" - "github.com/go-acme/lego/v5/internal/dns/descriptors" + "github.com/go-acme/lego/v5/internal/generators/dns/descriptors" ) const ( - root = "../../../" + root = "../../../../" outputPath = "providers/dns/zz_gen_dns_providers.go" ) diff --git a/internal/releaser/generator.go b/internal/generators/releaser/generator.go similarity index 96% rename from internal/releaser/generator.go rename to internal/generators/releaser/generator.go index 51b12afb3..b14433157 100644 --- a/internal/releaser/generator.go +++ b/internal/generators/releaser/generator.go @@ -12,7 +12,7 @@ import ( const ( dnsTemplate = "templates/dns.go.tmpl" - dnsTargetFile = "./providers/dns/internal/useragent/useragent.go" + dnsTargetFile = "./internal/useragent/useragent.go" ) const ( diff --git a/internal/releaser/releaser.go b/internal/generators/releaser/releaser.go similarity index 100% rename from internal/releaser/releaser.go rename to internal/generators/releaser/releaser.go diff --git a/internal/releaser/templates/dns.go.tmpl b/internal/generators/releaser/templates/dns.go.tmpl similarity index 100% rename from internal/releaser/templates/dns.go.tmpl rename to internal/generators/releaser/templates/dns.go.tmpl diff --git a/internal/releaser/templates/sender.go.tmpl b/internal/generators/releaser/templates/sender.go.tmpl similarity index 100% rename from internal/releaser/templates/sender.go.tmpl rename to internal/generators/releaser/templates/sender.go.tmpl diff --git a/internal/releaser/templates/version.go.tmpl b/internal/generators/releaser/templates/version.go.tmpl similarity index 100% rename from internal/releaser/templates/version.go.tmpl rename to internal/generators/releaser/templates/version.go.tmpl diff --git a/providers/dns/internal/useragent/useragent.go b/internal/useragent/useragent.go similarity index 100% rename from providers/dns/internal/useragent/useragent.go rename to internal/useragent/useragent.go diff --git a/lego/client_config.go b/lego/client_config.go index 6c634bec6..8679ad505 100644 --- a/lego/client_config.go +++ b/lego/client_config.go @@ -32,12 +32,6 @@ const ( // authenticate an ACME server with an HTTPS certificate not issued by a CA in // the system-wide trusted root list. caServerNameEnvVar = "LEGO_CA_SERVER_NAME" - - // LEDirectoryProduction URL to the Let's Encrypt production. - LEDirectoryProduction = "https://acme-v02.api.letsencrypt.org/directory" - - // LEDirectoryStaging URL to the Let's Encrypt staging. - LEDirectoryStaging = "https://acme-staging-v02.api.letsencrypt.org/directory" ) type Config struct { @@ -50,7 +44,7 @@ type Config struct { func NewConfig(user registration.User) *Config { return &Config{ - CADirURL: LEDirectoryProduction, + CADirURL: DirectoryURLLetsEncrypt, User: user, HTTPClient: createDefaultHTTPClient(), Certificate: CertificateConfig{ diff --git a/lego/zz_gen_ca.go b/lego/zz_gen_ca.go new file mode 100644 index 000000000..70039aff5 --- /dev/null +++ b/lego/zz_gen_ca.go @@ -0,0 +1,217 @@ +// Code generated by 'make generate-dns'; DO NOT EDIT. + +package lego + +import ( + "fmt" + "strings" +) + +const ( + // CodeActalis is the CA code for Actalis. + // https://guide.actalis.com/ssl/activation/acme + CodeActalis = "actalis" + + // CodeDigicert is the CA code for Digicert. + // https://docs.digicert.com/en/trust-lifecycle-manager/automate-management-of-certificates/acme-automation-service/third-party-acme-integration/install-and-configure-third-party-acme-clients.html + CodeDigicert = "digicert" + + // CodeFreeSSL is the CA code for FreeSSL. + // https://freessl.cn/ + CodeFreeSSL = "freessl" + + // CodeGlobalSign is the CA code for GlobalSign. + // https://docs.globalsign.com/solutions/services/acme/issuing-certificates-http-validation + CodeGlobalSign = "globalsign" + + // CodeGoogleTrust is the CA code for Google Trust. + // https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial#register-acme + CodeGoogleTrust = "googletrust" + + // CodeGoogleTrustStaging is the CA code for Google Trust staging. + // https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial#register-acme + CodeGoogleTrustStaging = "googletrust-staging" + + // CodeLetsEncrypt is the CA code for Let's Encrypt. + // https://letsencrypt.org/docs/ + CodeLetsEncrypt = "letsencrypt" + + // CodeLetsEncryptStaging is the CA code for Let's Encrypt staging. + // https://letsencrypt.org/docs/staging-environment/ + CodeLetsEncryptStaging = "letsencrypt-staging" + + // CodeLiteSSL is the CA code for LiteSSL. + // https://litessl.cn/ + CodeLiteSSL = "litessl" + + // CodePeeringHub is the CA code for PeeringHub. + // https://doc.peeringhub.io/guides/generating-certificate/acme-protocol-reference/list-server-directory + CodePeeringHub = "peeringhub" + + // CodeSSLComECC is the CA code for SSL.com ECDSA. + // https://www.ssl.com/guide/ssl-tls-certificate-issuance-and-revocation-with-acme/ + CodeSSLComECC = "sslcomecc" + + // CodeSSLComRSA is the CA code for SSL.com RSA. + // https://www.ssl.com/guide/ssl-tls-certificate-issuance-and-revocation-with-acme/ + CodeSSLComRSA = "sslcomrsa" + + // CodeSectigo is the CA code for Sectigo DV (Domain Validation). + // https://docs.sectigo.com/caas/caas-api-guide/create-acme-accounts + CodeSectigo = "sectigo" + + // CodeSectigoEV is the CA code for Sectigo EV (Extended Validation). + // https://docs.sectigo.com/ + CodeSectigoEV = "sectigoev" + + // CodeSectigoOV is the CA code for Sectigo OV (Organization Validation) . + // https://docs.sectigo.com/caas/caas-api-guide/getting-started-ov + CodeSectigoOV = "sectigoov" + + // CodeZeroSSL is the CA code for ZeroSSL. + // https://zerossl.com/documentation/acme/ + CodeZeroSSL = "zerossl" +) + +const ( + // DirectoryURLActalis is the directory URL for Actalis. + // https://guide.actalis.com/ssl/activation/acme + DirectoryURLActalis = "https://acme-api.actalis.com/acme/directory" + + // DirectoryURLDigicert is the directory URL for Digicert. + // https://docs.digicert.com/en/trust-lifecycle-manager/automate-management-of-certificates/acme-automation-service/third-party-acme-integration/install-and-configure-third-party-acme-clients.html + DirectoryURLDigicert = "https://one.digicert.com/mpki/api/v1/acme/v2/directory" + + // DirectoryURLFreeSSL is the directory URL for FreeSSL. + // https://freessl.cn/ + DirectoryURLFreeSSL = "https://acmepro.freessl.cn/v2/DV" + + // DirectoryURLGlobalSign is the directory URL for GlobalSign. + // https://docs.globalsign.com/solutions/services/acme/issuing-certificates-http-validation + DirectoryURLGlobalSign = "https://emea.acme.atlas.globalsign.com/directory" + + // DirectoryURLGoogleTrust is the directory URL for Google Trust. + // https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial#register-acme + DirectoryURLGoogleTrust = "https://dv.acme-v02.api.pki.goog/directory" + + // DirectoryURLGoogleTrustStaging is the directory URL for Google Trust staging. + // https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial#register-acme + DirectoryURLGoogleTrustStaging = " https://dv.acme-v02.test-api.pki.goog/directory" + + // DirectoryURLLetsEncrypt is the directory URL for Let's Encrypt. + // https://letsencrypt.org/docs/ + DirectoryURLLetsEncrypt = "https://acme-v02.api.letsencrypt.org/directory" + + // DirectoryURLLetsEncryptStaging is the directory URL for Let's Encrypt staging. + // https://letsencrypt.org/docs/staging-environment/ + DirectoryURLLetsEncryptStaging = "https://acme-staging-v02.api.letsencrypt.org/directory" + + // DirectoryURLLiteSSL is the directory URL for LiteSSL. + // https://litessl.cn/ + DirectoryURLLiteSSL = "https://acme.litessl.com/acme/v2/directory" + + // DirectoryURLPeeringHub is the directory URL for PeeringHub. + // https://doc.peeringhub.io/guides/generating-certificate/acme-protocol-reference/list-server-directory + DirectoryURLPeeringHub = "https://stica.peeringhub.io/acme" + + // DirectoryURLSSLComECC is the directory URL for SSL.com ECDSA. + // https://www.ssl.com/guide/ssl-tls-certificate-issuance-and-revocation-with-acme/ + DirectoryURLSSLComECC = "https://acme.ssl.com/sslcom-dv-ecc" + + // DirectoryURLSSLComRSA is the directory URL for SSL.com RSA. + // https://www.ssl.com/guide/ssl-tls-certificate-issuance-and-revocation-with-acme/ + DirectoryURLSSLComRSA = "https://acme.ssl.com/sslcom-dv-rsa" + + // DirectoryURLSectigo is the directory URL for Sectigo DV (Domain Validation). + // https://docs.sectigo.com/caas/caas-api-guide/create-acme-accounts + DirectoryURLSectigo = "https://acme.sectigo.com/v2/DV" + + // DirectoryURLSectigoEV is the directory URL for Sectigo EV (Extended Validation). + // https://docs.sectigo.com/ + DirectoryURLSectigoEV = "https://acme.sectigo.com/v2/EV" + + // DirectoryURLSectigoOV is the directory URL for Sectigo OV (Organization Validation) . + // https://docs.sectigo.com/caas/caas-api-guide/getting-started-ov + DirectoryURLSectigoOV = "https://acme.sectigo.com/v2/OV" + + // DirectoryURLZeroSSL is the directory URL for ZeroSSL. + // https://zerossl.com/documentation/acme/ + DirectoryURLZeroSSL = "https://acme.zerossl.com/v2/DV90" +) + +// GetDirectoryURL returns the directory URL for the given CA code. +func GetDirectoryURL(code string) (string, error) { + switch strings.ToLower(code) { + case CodeActalis: + return DirectoryURLActalis, nil + + case CodeDigicert: + return DirectoryURLDigicert, nil + + case CodeFreeSSL: + return DirectoryURLFreeSSL, nil + + case CodeGlobalSign: + return DirectoryURLGlobalSign, nil + + case CodeGoogleTrust: + return DirectoryURLGoogleTrust, nil + + case CodeGoogleTrustStaging: + return DirectoryURLGoogleTrustStaging, nil + + case CodeLetsEncrypt: + return DirectoryURLLetsEncrypt, nil + + case CodeLetsEncryptStaging: + return DirectoryURLLetsEncryptStaging, nil + + case CodeLiteSSL: + return DirectoryURLLiteSSL, nil + + case CodePeeringHub: + return DirectoryURLPeeringHub, nil + + case CodeSSLComECC: + return DirectoryURLSSLComECC, nil + + case CodeSSLComRSA: + return DirectoryURLSSLComRSA, nil + + case CodeSectigo: + return DirectoryURLSectigo, nil + + case CodeSectigoEV: + return DirectoryURLSectigoEV, nil + + case CodeSectigoOV: + return DirectoryURLSectigoOV, nil + + case CodeZeroSSL: + return DirectoryURLZeroSSL, nil + + default: + return "", fmt.Errorf("unknown ACME server code: %q", code) + } +} + +func GetAllCodes() []string { + return []string{ + CodeActalis, + CodeDigicert, + CodeFreeSSL, + CodeGlobalSign, + CodeGoogleTrust, + CodeGoogleTrustStaging, + CodeLetsEncrypt, + CodeLetsEncryptStaging, + CodeLiteSSL, + CodePeeringHub, + CodeSSLComECC, + CodeSSLComRSA, + CodeSectigo, + CodeSectigoEV, + CodeSectigoOV, + CodeZeroSSL, + } +} diff --git a/providers/dns/acmedns/internal/http_storage.go b/providers/dns/acmedns/internal/http_storage.go index 7445bdc87..6243a8867 100644 --- a/providers/dns/acmedns/internal/http_storage.go +++ b/providers/dns/acmedns/internal/http_storage.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/nrdcg/goacmedns" "github.com/nrdcg/goacmedns/storage" ) diff --git a/providers/dns/allinkl/internal/client.go b/providers/dns/allinkl/internal/client.go index fd2c5a423..069f2ef2a 100644 --- a/providers/dns/allinkl/internal/client.go +++ b/providers/dns/allinkl/internal/client.go @@ -11,7 +11,7 @@ import ( "sync" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/go-viper/mapstructure/v2" ) diff --git a/providers/dns/allinkl/internal/identity.go b/providers/dns/allinkl/internal/identity.go index ed3f6793e..428e5c706 100644 --- a/providers/dns/allinkl/internal/identity.go +++ b/providers/dns/allinkl/internal/identity.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // authEndpoint represents the Identity API endpoint to call. diff --git a/providers/dns/alwaysdata/internal/client.go b/providers/dns/alwaysdata/internal/client.go index ce1343660..acde249ef 100644 --- a/providers/dns/alwaysdata/internal/client.go +++ b/providers/dns/alwaysdata/internal/client.go @@ -12,8 +12,8 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://api.alwaysdata.com/v1" diff --git a/providers/dns/anexia/internal/client.go b/providers/dns/anexia/internal/client.go index f63a9a38e..0e6bf3eb5 100644 --- a/providers/dns/anexia/internal/client.go +++ b/providers/dns/anexia/internal/client.go @@ -11,8 +11,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://engine.anexia-it.com" diff --git a/providers/dns/arvancloud/internal/client.go b/providers/dns/arvancloud/internal/client.go index bd9b795f6..27316d689 100644 --- a/providers/dns/arvancloud/internal/client.go +++ b/providers/dns/arvancloud/internal/client.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // defaultBaseURL represents the API endpoint to call. diff --git a/providers/dns/autodns/internal/client.go b/providers/dns/autodns/internal/client.go index 2abd045d4..bceba937c 100644 --- a/providers/dns/autodns/internal/client.go +++ b/providers/dns/autodns/internal/client.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultEndpoint default API endpoint. diff --git a/providers/dns/axelname/internal/client.go b/providers/dns/axelname/internal/client.go index b557bbfd7..ff1af6c94 100644 --- a/providers/dns/axelname/internal/client.go +++ b/providers/dns/axelname/internal/client.go @@ -9,7 +9,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/azure/azure.go b/providers/dns/azure/azure.go index bc85fd108..0cb565d3e 100644 --- a/providers/dns/azure/azure.go +++ b/providers/dns/azure/azure.go @@ -16,8 +16,8 @@ import ( aazure "github.com/Azure/go-autorest/autorest/azure" "github.com/Azure/go-autorest/autorest/azure/auth" "github.com/go-acme/lego/v5/challenge" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/go-acme/lego/v5/platform/config/env" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" ) // Environment variables names. diff --git a/providers/dns/beget/internal/client.go b/providers/dns/beget/internal/client.go index a5a681165..d904f0ee3 100644 --- a/providers/dns/beget/internal/client.go +++ b/providers/dns/beget/internal/client.go @@ -9,7 +9,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.beget.com/api/" diff --git a/providers/dns/binarylane/internal/client.go b/providers/dns/binarylane/internal/client.go index 62b40e4bb..f618acda8 100644 --- a/providers/dns/binarylane/internal/client.go +++ b/providers/dns/binarylane/internal/client.go @@ -12,7 +12,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.binarylane.com.au/v2/" diff --git a/providers/dns/bluecat/internal/client.go b/providers/dns/bluecat/internal/client.go index c564f39cb..caf6f9ec4 100644 --- a/providers/dns/bluecat/internal/client.go +++ b/providers/dns/bluecat/internal/client.go @@ -13,7 +13,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // Object types. diff --git a/providers/dns/bluecat/internal/identity.go b/providers/dns/bluecat/internal/identity.go index a7259b7da..64f45670a 100644 --- a/providers/dns/bluecat/internal/identity.go +++ b/providers/dns/bluecat/internal/identity.go @@ -7,7 +7,7 @@ import ( "net/http" "strings" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) type token string diff --git a/providers/dns/bookmyname/internal/client.go b/providers/dns/bookmyname/internal/client.go index 979444ff3..a499ace44 100644 --- a/providers/dns/bookmyname/internal/client.go +++ b/providers/dns/bookmyname/internal/client.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/brandit/internal/client.go b/providers/dns/brandit/internal/client.go index d13219d79..31764f71d 100644 --- a/providers/dns/brandit/internal/client.go +++ b/providers/dns/brandit/internal/client.go @@ -15,7 +15,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://portal.brandit.com/api/v3/" diff --git a/providers/dns/bunny/bunny.go b/providers/dns/bunny/bunny.go index 76e50613f..9f9c60ade 100644 --- a/providers/dns/bunny/bunny.go +++ b/providers/dns/bunny/bunny.go @@ -11,10 +11,10 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v5/providers/dns/internal/ptr" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" "github.com/nrdcg/bunny-go" "golang.org/x/net/publicsuffix" ) diff --git a/providers/dns/checkdomain/internal/client.go b/providers/dns/checkdomain/internal/client.go index 00910e37f..b45f0efc6 100644 --- a/providers/dns/checkdomain/internal/client.go +++ b/providers/dns/checkdomain/internal/client.go @@ -14,7 +14,7 @@ import ( "sync" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/civo/internal/client.go b/providers/dns/civo/internal/client.go index f58b9d204..f82d6c220 100644 --- a/providers/dns/civo/internal/client.go +++ b/providers/dns/civo/internal/client.go @@ -19,8 +19,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" "golang.org/x/oauth2" ) diff --git a/providers/dns/clouddns/internal/client.go b/providers/dns/clouddns/internal/client.go index ffd2f51e1..3c2ee9612 100644 --- a/providers/dns/clouddns/internal/client.go +++ b/providers/dns/clouddns/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const apiBaseURL = "https://admin.vshosting.cloud/clouddns" diff --git a/providers/dns/cloudflare/internal/client.go b/providers/dns/cloudflare/internal/client.go index e6afe1d2d..10a2913c9 100644 --- a/providers/dns/cloudflare/internal/client.go +++ b/providers/dns/cloudflare/internal/client.go @@ -17,9 +17,9 @@ import ( "net/url" "time" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" ) const defaultBaseURL = "https://api.cloudflare.com/client/v4" diff --git a/providers/dns/cloudns/internal/client.go b/providers/dns/cloudns/internal/client.go index 1dd084150..d92ca8ce5 100644 --- a/providers/dns/cloudns/internal/client.go +++ b/providers/dns/cloudns/internal/client.go @@ -12,7 +12,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.cloudns.net/dns/" diff --git a/providers/dns/cloudru/internal/client.go b/providers/dns/cloudru/internal/client.go index 8a1931120..44a39500f 100644 --- a/providers/dns/cloudru/internal/client.go +++ b/providers/dns/cloudru/internal/client.go @@ -12,7 +12,7 @@ import ( "sync" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // Default API endpoints. diff --git a/providers/dns/cloudru/internal/identity.go b/providers/dns/cloudru/internal/identity.go index 5b3385290..ca2b23504 100644 --- a/providers/dns/cloudru/internal/identity.go +++ b/providers/dns/cloudru/internal/identity.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) type token string diff --git a/providers/dns/conoha/internal/client.go b/providers/dns/conoha/internal/client.go index bd84bc4be..ab8fc06f0 100644 --- a/providers/dns/conoha/internal/client.go +++ b/providers/dns/conoha/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const dnsServiceBaseURL = "https://dns-service.%s.conoha.io" diff --git a/providers/dns/conoha/internal/identity.go b/providers/dns/conoha/internal/identity.go index def0ee2bf..73ccc7a3d 100644 --- a/providers/dns/conoha/internal/identity.go +++ b/providers/dns/conoha/internal/identity.go @@ -9,7 +9,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const identityBaseURL = "https://identity.%s.conoha.io" diff --git a/providers/dns/conohav3/internal/client.go b/providers/dns/conohav3/internal/client.go index 62ce0c3a1..9b9790ef7 100644 --- a/providers/dns/conohav3/internal/client.go +++ b/providers/dns/conohav3/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const dnsServiceBaseURL = "https://dns-service.%s.conoha.io" diff --git a/providers/dns/conohav3/internal/identity.go b/providers/dns/conohav3/internal/identity.go index c204b3017..2da297e67 100644 --- a/providers/dns/conohav3/internal/identity.go +++ b/providers/dns/conohav3/internal/identity.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const identityBaseURL = "https://identity.%s.conoha.io" diff --git a/providers/dns/constellix/internal/client.go b/providers/dns/constellix/internal/client.go index 8409d0b6c..d9c7caf3b 100644 --- a/providers/dns/constellix/internal/client.go +++ b/providers/dns/constellix/internal/client.go @@ -8,7 +8,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const ( diff --git a/providers/dns/corenetworks/internal/client.go b/providers/dns/corenetworks/internal/client.go index 0d7e40cfc..4b499ce21 100644 --- a/providers/dns/corenetworks/internal/client.go +++ b/providers/dns/corenetworks/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://beta.api.core-networks.de" diff --git a/providers/dns/cpanel/internal/cpanel/client.go b/providers/dns/cpanel/internal/cpanel/client.go index 1bc57a03b..26d6fa11c 100644 --- a/providers/dns/cpanel/internal/cpanel/client.go +++ b/providers/dns/cpanel/internal/cpanel/client.go @@ -10,8 +10,8 @@ import ( "strconv" "time" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/go-acme/lego/v5/providers/dns/cpanel/internal/shared" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" ) const statusFailed = 0 diff --git a/providers/dns/cpanel/internal/whm/client.go b/providers/dns/cpanel/internal/whm/client.go index 40ffa83dd..bef405963 100644 --- a/providers/dns/cpanel/internal/whm/client.go +++ b/providers/dns/cpanel/internal/whm/client.go @@ -10,8 +10,8 @@ import ( "strconv" "time" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/go-acme/lego/v5/providers/dns/cpanel/internal/shared" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" ) const statusFailed = 0 diff --git a/providers/dns/ddnss/internal/client.go b/providers/dns/ddnss/internal/client.go index 9f828ad7a..1e4994c59 100644 --- a/providers/dns/ddnss/internal/client.go +++ b/providers/dns/ddnss/internal/client.go @@ -10,8 +10,8 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" "golang.org/x/net/html" ) diff --git a/providers/dns/derak/internal/client.go b/providers/dns/derak/internal/client.go index 8c7752f82..f16ce0fca 100644 --- a/providers/dns/derak/internal/client.go +++ b/providers/dns/derak/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/digitalocean/internal/client.go b/providers/dns/digitalocean/internal/client.go index 264399ff0..7ee3e8911 100644 --- a/providers/dns/digitalocean/internal/client.go +++ b/providers/dns/digitalocean/internal/client.go @@ -12,7 +12,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/directadmin/internal/client.go b/providers/dns/directadmin/internal/client.go index 2c5c7afe2..d1d70f327 100644 --- a/providers/dns/directadmin/internal/client.go +++ b/providers/dns/directadmin/internal/client.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/dnsexit/internal/client.go b/providers/dns/dnsexit/internal/client.go index a09353c22..888e44f05 100644 --- a/providers/dns/dnsexit/internal/client.go +++ b/providers/dns/dnsexit/internal/client.go @@ -11,8 +11,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://api.dnsexit.com/dns/" diff --git a/providers/dns/dnshomede/internal/client.go b/providers/dns/dnshomede/internal/client.go index f5070060d..b93d4b72b 100644 --- a/providers/dns/dnshomede/internal/client.go +++ b/providers/dns/dnshomede/internal/client.go @@ -11,7 +11,7 @@ import ( "sync" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const ( diff --git a/providers/dns/dnsimple/dnsimple.go b/providers/dns/dnsimple/dnsimple.go index b78f4315d..a6a48e92c 100644 --- a/providers/dns/dnsimple/dnsimple.go +++ b/providers/dns/dnsimple/dnsimple.go @@ -11,9 +11,9 @@ import ( "github.com/dnsimple/dnsimple-go/v4/dnsimple" "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" "golang.org/x/oauth2" ) diff --git a/providers/dns/dnsmadeeasy/internal/client.go b/providers/dns/dnsmadeeasy/internal/client.go index 491cee03a..0d802b952 100644 --- a/providers/dns/dnsmadeeasy/internal/client.go +++ b/providers/dns/dnsmadeeasy/internal/client.go @@ -16,7 +16,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // Default API endpoints. diff --git a/providers/dns/dode/internal/client.go b/providers/dns/dode/internal/client.go index 609e5e147..d0d6432ba 100644 --- a/providers/dns/dode/internal/client.go +++ b/providers/dns/dode/internal/client.go @@ -10,7 +10,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://my.do.de/api" diff --git a/providers/dns/domeneshop/internal/client.go b/providers/dns/domeneshop/internal/client.go index d42767f7a..82f8c158b 100644 --- a/providers/dns/domeneshop/internal/client.go +++ b/providers/dns/domeneshop/internal/client.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL string = "https://api.domeneshop.no/v0" diff --git a/providers/dns/dreamhost/internal/client.go b/providers/dns/dreamhost/internal/client.go index 9a45f654d..772e6fdb5 100644 --- a/providers/dns/dreamhost/internal/client.go +++ b/providers/dns/dreamhost/internal/client.go @@ -9,7 +9,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultBaseURL the default API endpoint. diff --git a/providers/dns/duckdns/internal/client.go b/providers/dns/duckdns/internal/client.go index d27ce3f65..03da96c66 100644 --- a/providers/dns/duckdns/internal/client.go +++ b/providers/dns/duckdns/internal/client.go @@ -11,7 +11,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/miekg/dns" ) diff --git a/providers/dns/dyn/internal/client.go b/providers/dns/dyn/internal/client.go index d8ecfb8f4..8a20ec2ff 100644 --- a/providers/dns/dyn/internal/client.go +++ b/providers/dns/dyn/internal/client.go @@ -12,7 +12,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.dynect.net/REST" diff --git a/providers/dns/dyn/internal/session.go b/providers/dns/dyn/internal/session.go index a6c859bcb..fc84b9c09 100644 --- a/providers/dns/dyn/internal/session.go +++ b/providers/dns/dyn/internal/session.go @@ -5,7 +5,7 @@ import ( "encoding/json" "net/http" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) type token string diff --git a/providers/dns/dyndnsfree/internal/client.go b/providers/dns/dyndnsfree/internal/client.go index 98181cecc..86c7cfd86 100644 --- a/providers/dns/dyndnsfree/internal/client.go +++ b/providers/dns/dyndnsfree/internal/client.go @@ -9,7 +9,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://dynup.de/acme.php" diff --git a/providers/dns/dynu/internal/client.go b/providers/dns/dynu/internal/client.go index 67377ed95..ce0e20be4 100644 --- a/providers/dns/dynu/internal/client.go +++ b/providers/dns/dynu/internal/client.go @@ -13,9 +13,9 @@ import ( "time" "github.com/cenkalti/backoff/v5" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/go-acme/lego/v5/log" "github.com/go-acme/lego/v5/platform/wait" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" ) const defaultBaseURL = "https://api.dynu.com/v2" diff --git a/providers/dns/easydns/internal/client.go b/providers/dns/easydns/internal/client.go index c5948c7d0..845c059ed 100644 --- a/providers/dns/easydns/internal/client.go +++ b/providers/dns/easydns/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultBaseURL the default API endpoint. diff --git a/providers/dns/efficientip/internal/client.go b/providers/dns/efficientip/internal/client.go index 2ceb21f91..27ea73b19 100644 --- a/providers/dns/efficientip/internal/client.go +++ b/providers/dns/efficientip/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/epik/internal/client.go b/providers/dns/epik/internal/client.go index fdf64ee50..9d3093615 100644 --- a/providers/dns/epik/internal/client.go +++ b/providers/dns/epik/internal/client.go @@ -10,8 +10,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://usersapiv2.epik.com/v2" diff --git a/providers/dns/exoscale/exoscale.go b/providers/dns/exoscale/exoscale.go index f4f706285..7c3a0d2ef 100644 --- a/providers/dns/exoscale/exoscale.go +++ b/providers/dns/exoscale/exoscale.go @@ -13,9 +13,9 @@ import ( "github.com/exoscale/egoscale/v3/credentials" "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" ) // Environment variables names. diff --git a/providers/dns/f5xc/internal/client.go b/providers/dns/f5xc/internal/client.go index 7dcec381d..7faf3c6cb 100644 --- a/providers/dns/f5xc/internal/client.go +++ b/providers/dns/f5xc/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultServer = "console.ves.volterra.io" diff --git a/providers/dns/gandi/internal/client.go b/providers/dns/gandi/internal/client.go index 30aea3e9b..95bd5d363 100644 --- a/providers/dns/gandi/internal/client.go +++ b/providers/dns/gandi/internal/client.go @@ -10,7 +10,7 @@ import ( "net/http" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // defaultBaseURL Gandi XML-RPC endpoint used by Present and CleanUp. diff --git a/providers/dns/gandiv5/internal/client.go b/providers/dns/gandiv5/internal/client.go index e9f6d892e..0677d81a8 100644 --- a/providers/dns/gandiv5/internal/client.go +++ b/providers/dns/gandiv5/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // defaultBaseURL endpoint is the Gandi API endpoint used by Present and CleanUp. diff --git a/providers/dns/gigahostno/internal/client.go b/providers/dns/gigahostno/internal/client.go index 65a1eaebb..433a45320 100644 --- a/providers/dns/gigahostno/internal/client.go +++ b/providers/dns/gigahostno/internal/client.go @@ -10,8 +10,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://api.gigahost.no/api/v0" diff --git a/providers/dns/gigahostno/internal/identity.go b/providers/dns/gigahostno/internal/identity.go index 059cffefe..aa8f6b388 100644 --- a/providers/dns/gigahostno/internal/identity.go +++ b/providers/dns/gigahostno/internal/identity.go @@ -11,8 +11,8 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/pquerna/otp/totp" ) diff --git a/providers/dns/glesys/internal/client.go b/providers/dns/glesys/internal/client.go index 8a7f34ef9..cc9d699b9 100644 --- a/providers/dns/glesys/internal/client.go +++ b/providers/dns/glesys/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // defaultBaseURL is the GleSYS API endpoint used by Present and CleanUp. diff --git a/providers/dns/godaddy/internal/client.go b/providers/dns/godaddy/internal/client.go index 10c40372e..77b6c4d11 100644 --- a/providers/dns/godaddy/internal/client.go +++ b/providers/dns/godaddy/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultBaseURL represents the API endpoint to call. diff --git a/providers/dns/gravity/internal/client.go b/providers/dns/gravity/internal/client.go index a0cd42026..becba68ef 100644 --- a/providers/dns/gravity/internal/client.go +++ b/providers/dns/gravity/internal/client.go @@ -12,8 +12,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" "golang.org/x/net/publicsuffix" ) diff --git a/providers/dns/hetzner/internal/hetznerv1/internal/client.go b/providers/dns/hetzner/internal/hetznerv1/internal/client.go index 71302f789..9d7da6cdc 100644 --- a/providers/dns/hetzner/internal/hetznerv1/internal/client.go +++ b/providers/dns/hetzner/internal/hetznerv1/internal/client.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/hetzner/internal/legacy/internal/client.go b/providers/dns/hetzner/internal/legacy/internal/client.go index 2573f4af3..e699f0a44 100644 --- a/providers/dns/hetzner/internal/legacy/internal/client.go +++ b/providers/dns/hetzner/internal/legacy/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // defaultBaseURL represents the API endpoint to call. diff --git a/providers/dns/hostinger/internal/client.go b/providers/dns/hostinger/internal/client.go index 0186d100a..e4f75faf6 100644 --- a/providers/dns/hostinger/internal/client.go +++ b/providers/dns/hostinger/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://developers.hostinger.com" diff --git a/providers/dns/hostingnl/internal/client.go b/providers/dns/hostingnl/internal/client.go index c9d0b0f7c..83feaee0d 100644 --- a/providers/dns/hostingnl/internal/client.go +++ b/providers/dns/hostingnl/internal/client.go @@ -10,8 +10,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://api.hosting.nl" diff --git a/providers/dns/hosttech/internal/client.go b/providers/dns/hosttech/internal/client.go index 0a7af4c9f..b5131d291 100644 --- a/providers/dns/hosttech/internal/client.go +++ b/providers/dns/hosttech/internal/client.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/httpreq/httpreq.go b/providers/dns/httpreq/httpreq.go index 0df2ba7a2..fbe8a83d0 100644 --- a/providers/dns/httpreq/httpreq.go +++ b/providers/dns/httpreq/httpreq.go @@ -13,9 +13,9 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" ) // Environment variables names. diff --git a/providers/dns/hurricane/internal/client.go b/providers/dns/hurricane/internal/client.go index 50c0528e0..8de91942a 100644 --- a/providers/dns/hurricane/internal/client.go +++ b/providers/dns/hurricane/internal/client.go @@ -12,8 +12,8 @@ import ( "sync" "time" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/go-acme/lego/v5/log" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" "golang.org/x/time/rate" ) diff --git a/providers/dns/hyperone/internal/client.go b/providers/dns/hyperone/internal/client.go index 09ccb2bf8..214dd8929 100644 --- a/providers/dns/hyperone/internal/client.go +++ b/providers/dns/hyperone/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.hyperone.com/v2" diff --git a/providers/dns/infoblox/infoblox.go b/providers/dns/infoblox/infoblox.go index 303a2c969..83e83ff03 100644 --- a/providers/dns/infoblox/infoblox.go +++ b/providers/dns/infoblox/infoblox.go @@ -11,8 +11,8 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" infoblox "github.com/infobloxopen/infoblox-go-client/v2" ) diff --git a/providers/dns/infomaniak/internal/client.go b/providers/dns/infomaniak/internal/client.go index 58eaa0889..d71d9d840 100644 --- a/providers/dns/infomaniak/internal/client.go +++ b/providers/dns/infomaniak/internal/client.go @@ -12,7 +12,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/internal/active24/internal/client.go b/providers/dns/internal/active24/internal/client.go index 6196f4f31..7f6e89ca4 100644 --- a/providers/dns/internal/active24/internal/client.go +++ b/providers/dns/internal/active24/internal/client.go @@ -14,7 +14,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://rest.%s" diff --git a/providers/dns/internal/gcore/internal/client.go b/providers/dns/internal/gcore/internal/client.go index ecb2a7114..71c261ff5 100644 --- a/providers/dns/internal/gcore/internal/client.go +++ b/providers/dns/internal/gcore/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.gcore.com/dns" diff --git a/providers/dns/internal/hostingde/internal/client.go b/providers/dns/internal/hostingde/internal/client.go index 685c332ac..de2302d4b 100644 --- a/providers/dns/internal/hostingde/internal/client.go +++ b/providers/dns/internal/hostingde/internal/client.go @@ -11,7 +11,7 @@ import ( "time" "github.com/cenkalti/backoff/v5" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://secure.hosting.de/api/dns/v1/json" diff --git a/providers/dns/internal/ionos/internal/client.go b/providers/dns/internal/ionos/internal/client.go index f2440413a..2ba95e227 100644 --- a/providers/dns/internal/ionos/internal/client.go +++ b/providers/dns/internal/ionos/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/internal/rimuhosting/internal/client.go b/providers/dns/internal/rimuhosting/internal/client.go index 379f9ae5b..8bafd520a 100644 --- a/providers/dns/internal/rimuhosting/internal/client.go +++ b/providers/dns/internal/rimuhosting/internal/client.go @@ -11,7 +11,7 @@ import ( "regexp" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/internal/selectel/internal/client.go b/providers/dns/internal/selectel/internal/client.go index bcfacf218..0d6899226 100644 --- a/providers/dns/internal/selectel/internal/client.go +++ b/providers/dns/internal/selectel/internal/client.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.selectel.ru/domains/v1" diff --git a/providers/dns/internal/tecnocratica/internal/client.go b/providers/dns/internal/tecnocratica/internal/client.go index d78212281..ee24a142f 100644 --- a/providers/dns/internal/tecnocratica/internal/client.go +++ b/providers/dns/internal/tecnocratica/internal/client.go @@ -12,8 +12,8 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) // defaultBaseURL is the default API endpoint. diff --git a/providers/dns/internal/westcn/internal/client.go b/providers/dns/internal/westcn/internal/client.go index 1ab31295c..9d3669772 100644 --- a/providers/dns/internal/westcn/internal/client.go +++ b/providers/dns/internal/westcn/internal/client.go @@ -14,7 +14,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" "golang.org/x/text/encoding" "golang.org/x/text/encoding/simplifiedchinese" diff --git a/providers/dns/internetbs/internal/client.go b/providers/dns/internetbs/internal/client.go index 6c3269b21..308bbcfb0 100644 --- a/providers/dns/internetbs/internal/client.go +++ b/providers/dns/internetbs/internal/client.go @@ -13,7 +13,7 @@ import ( "time" "unicode" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/ionoscloud/internal/client.go b/providers/dns/ionoscloud/internal/client.go index c7a16f929..275ecbf16 100644 --- a/providers/dns/ionoscloud/internal/client.go +++ b/providers/dns/ionoscloud/internal/client.go @@ -11,8 +11,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://dns.de-fra.ionos.com" diff --git a/providers/dns/ipv64/internal/client.go b/providers/dns/ipv64/internal/client.go index d3e13453e..0fd0d4c85 100644 --- a/providers/dns/ipv64/internal/client.go +++ b/providers/dns/ipv64/internal/client.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/ispconfig/internal/client.go b/providers/dns/ispconfig/internal/client.go index 338d65302..10111c749 100644 --- a/providers/dns/ispconfig/internal/client.go +++ b/providers/dns/ispconfig/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) type Client struct { diff --git a/providers/dns/ispconfigddns/internal/client.go b/providers/dns/ispconfigddns/internal/client.go index 5be614b3a..46d394f22 100644 --- a/providers/dns/ispconfigddns/internal/client.go +++ b/providers/dns/ispconfigddns/internal/client.go @@ -8,8 +8,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/joker/internal/dmapi/client.go b/providers/dns/joker/internal/dmapi/client.go index 37e281715..7bf5b4268 100644 --- a/providers/dns/joker/internal/dmapi/client.go +++ b/providers/dns/joker/internal/dmapi/client.go @@ -15,7 +15,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://dmapi.joker.com/request/" diff --git a/providers/dns/joker/internal/svc/client.go b/providers/dns/joker/internal/svc/client.go index 935caefea..a8a9ffc28 100644 --- a/providers/dns/joker/internal/svc/client.go +++ b/providers/dns/joker/internal/svc/client.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/keyhelp/internal/client.go b/providers/dns/keyhelp/internal/client.go index 7ccc595a8..3b0d00bf5 100644 --- a/providers/dns/keyhelp/internal/client.go +++ b/providers/dns/keyhelp/internal/client.go @@ -12,7 +12,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // APIKeyHeader API key header. diff --git a/providers/dns/liara/internal/client.go b/providers/dns/liara/internal/client.go index 5e6e21cd2..7caf14727 100644 --- a/providers/dns/liara/internal/client.go +++ b/providers/dns/liara/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/limacity/internal/client.go b/providers/dns/limacity/internal/client.go index 197cd071d..7533fab3f 100644 --- a/providers/dns/limacity/internal/client.go +++ b/providers/dns/limacity/internal/client.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://www.lima-city.de/usercp" diff --git a/providers/dns/linode/linode.go b/providers/dns/linode/linode.go index 0eef258ea..81749768e 100644 --- a/providers/dns/linode/linode.go +++ b/providers/dns/linode/linode.go @@ -11,9 +11,9 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" "github.com/linode/linodego" "golang.org/x/oauth2" ) diff --git a/providers/dns/loopia/internal/client.go b/providers/dns/loopia/internal/client.go index 3031a6e58..8dd202a43 100644 --- a/providers/dns/loopia/internal/client.go +++ b/providers/dns/loopia/internal/client.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultBaseURL is url to the XML-RPC api. diff --git a/providers/dns/luadns/internal/client.go b/providers/dns/luadns/internal/client.go index fcff3d5fc..ae2d2785c 100644 --- a/providers/dns/luadns/internal/client.go +++ b/providers/dns/luadns/internal/client.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // defaultBaseURL represents the API endpoint to call. diff --git a/providers/dns/manageengine/internal/client.go b/providers/dns/manageengine/internal/client.go index 6b6f85af9..a61891ec0 100644 --- a/providers/dns/manageengine/internal/client.go +++ b/providers/dns/manageengine/internal/client.go @@ -12,7 +12,7 @@ import ( "strconv" "strings" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://clouddns.manageengine.com/v1" diff --git a/providers/dns/metaregistrar/internal/client.go b/providers/dns/metaregistrar/internal/client.go index 72a8adf22..7ce14bd07 100644 --- a/providers/dns/metaregistrar/internal/client.go +++ b/providers/dns/metaregistrar/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.metaregistrar.com" diff --git a/providers/dns/mijnhost/internal/client.go b/providers/dns/mijnhost/internal/client.go index 9f6505050..885a68a9b 100644 --- a/providers/dns/mijnhost/internal/client.go +++ b/providers/dns/mijnhost/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://mijn.host/api/v2/" diff --git a/providers/dns/mittwald/internal/client.go b/providers/dns/mittwald/internal/client.go index 90e193396..e219efea3 100644 --- a/providers/dns/mittwald/internal/client.go +++ b/providers/dns/mittwald/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.mittwald.de/v2/" diff --git a/providers/dns/myaddr/internal/client.go b/providers/dns/myaddr/internal/client.go index 005e63812..0ba633e81 100644 --- a/providers/dns/myaddr/internal/client.go +++ b/providers/dns/myaddr/internal/client.go @@ -12,7 +12,7 @@ import ( "sync" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://myaddr.tools" diff --git a/providers/dns/mydnsjp/internal/client.go b/providers/dns/mydnsjp/internal/client.go index 983e16c8d..13c56761c 100644 --- a/providers/dns/mydnsjp/internal/client.go +++ b/providers/dns/mydnsjp/internal/client.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://www.mydns.jp/directedit.html" diff --git a/providers/dns/mythicbeasts/internal/client.go b/providers/dns/mythicbeasts/internal/client.go index fcfa35abd..01786f9eb 100644 --- a/providers/dns/mythicbeasts/internal/client.go +++ b/providers/dns/mythicbeasts/internal/client.go @@ -12,7 +12,7 @@ import ( "sync" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // Default API endpoints. diff --git a/providers/dns/mythicbeasts/internal/identity.go b/providers/dns/mythicbeasts/internal/identity.go index fe062f98e..466990b7a 100644 --- a/providers/dns/mythicbeasts/internal/identity.go +++ b/providers/dns/mythicbeasts/internal/identity.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) type token string diff --git a/providers/dns/namecheap/internal/client.go b/providers/dns/namecheap/internal/client.go index 01a0375fe..e534b3e35 100644 --- a/providers/dns/namecheap/internal/client.go +++ b/providers/dns/namecheap/internal/client.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // Default API endpoints. diff --git a/providers/dns/namecheap/internal/ip.go b/providers/dns/namecheap/internal/ip.go index b1338ea2e..52fc3c14b 100644 --- a/providers/dns/namecheap/internal/ip.go +++ b/providers/dns/namecheap/internal/ip.go @@ -7,8 +7,8 @@ import ( "net/http" "time" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" ) const getIPURL = "https://dynamicdns.park-your-domain.com/getip" diff --git a/providers/dns/nearlyfreespeech/internal/client.go b/providers/dns/nearlyfreespeech/internal/client.go index ba6108c91..aedb566be 100644 --- a/providers/dns/nearlyfreespeech/internal/client.go +++ b/providers/dns/nearlyfreespeech/internal/client.go @@ -14,7 +14,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/netcup/internal/client.go b/providers/dns/netcup/internal/client.go index aa98a9e4b..b8257a1e6 100644 --- a/providers/dns/netcup/internal/client.go +++ b/providers/dns/netcup/internal/client.go @@ -10,7 +10,7 @@ import ( "net/http" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // defaultBaseURL for reaching the jSON-based API-Endpoint of netcup. diff --git a/providers/dns/netlify/internal/client.go b/providers/dns/netlify/internal/client.go index 231243f59..45caf5ed6 100644 --- a/providers/dns/netlify/internal/client.go +++ b/providers/dns/netlify/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/nicmanager/internal/client.go b/providers/dns/nicmanager/internal/client.go index 10107cdbf..4362f3ee7 100644 --- a/providers/dns/nicmanager/internal/client.go +++ b/providers/dns/nicmanager/internal/client.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/pquerna/otp/totp" ) diff --git a/providers/dns/nicru/internal/client.go b/providers/dns/nicru/internal/client.go index b9de9c4e4..bfe457295 100644 --- a/providers/dns/nicru/internal/client.go +++ b/providers/dns/nicru/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const ( diff --git a/providers/dns/nifcloud/internal/client.go b/providers/dns/nifcloud/internal/client.go index 3eba3ab45..1cbd32989 100644 --- a/providers/dns/nifcloud/internal/client.go +++ b/providers/dns/nifcloud/internal/client.go @@ -14,7 +14,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const ( diff --git a/providers/dns/njalla/internal/client.go b/providers/dns/njalla/internal/client.go index fbaf4547d..e18d3286f 100644 --- a/providers/dns/njalla/internal/client.go +++ b/providers/dns/njalla/internal/client.go @@ -9,7 +9,7 @@ import ( "net/http" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const apiEndpoint = "https://njal.la/api/1/" diff --git a/providers/dns/octenium/internal/client.go b/providers/dns/octenium/internal/client.go index b01a6c8ce..6829544b6 100644 --- a/providers/dns/octenium/internal/client.go +++ b/providers/dns/octenium/internal/client.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/otc/internal/client.go b/providers/dns/otc/internal/client.go index e0daededf..0f09ec425 100644 --- a/providers/dns/otc/internal/client.go +++ b/providers/dns/otc/internal/client.go @@ -12,7 +12,7 @@ import ( "sync" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) type Client struct { diff --git a/providers/dns/otc/internal/identity.go b/providers/dns/otc/internal/identity.go index 3990999a9..4115165d3 100644 --- a/providers/dns/otc/internal/identity.go +++ b/providers/dns/otc/internal/identity.go @@ -8,7 +8,7 @@ import ( "net/http" "net/url" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultIdentityEndpoint the default API identity endpoint. diff --git a/providers/dns/ovh/ovh.go b/providers/dns/ovh/ovh.go index f9b177786..840533822 100644 --- a/providers/dns/ovh/ovh.go +++ b/providers/dns/ovh/ovh.go @@ -11,9 +11,9 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" "github.com/ovh/go-ovh/ovh" ) diff --git a/providers/dns/pdns/internal/client.go b/providers/dns/pdns/internal/client.go index d2247b076..79e12669b 100644 --- a/providers/dns/pdns/internal/client.go +++ b/providers/dns/pdns/internal/client.go @@ -14,7 +14,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/miekg/dns" ) diff --git a/providers/dns/plesk/internal/client.go b/providers/dns/plesk/internal/client.go index f2f2b9ea4..b89721b13 100644 --- a/providers/dns/plesk/internal/client.go +++ b/providers/dns/plesk/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // Client the Plesk API client. diff --git a/providers/dns/rackspace/internal/client.go b/providers/dns/rackspace/internal/client.go index ee7115b92..642564090 100644 --- a/providers/dns/rackspace/internal/client.go +++ b/providers/dns/rackspace/internal/client.go @@ -11,7 +11,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const AuthToken = "X-Auth-Token" diff --git a/providers/dns/rackspace/internal/identity.go b/providers/dns/rackspace/internal/identity.go index 22102f841..31375ad1c 100644 --- a/providers/dns/rackspace/internal/identity.go +++ b/providers/dns/rackspace/internal/identity.go @@ -7,7 +7,7 @@ import ( "net/http" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultIdentityURL represents the Identity API endpoint to call. diff --git a/providers/dns/rainyun/internal/client.go b/providers/dns/rainyun/internal/client.go index 276067b2f..793724eb2 100644 --- a/providers/dns/rainyun/internal/client.go +++ b/providers/dns/rainyun/internal/client.go @@ -12,7 +12,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/rcodezero/internal/client.go b/providers/dns/rcodezero/internal/client.go index 1c944089d..d57f00d7d 100644 --- a/providers/dns/rcodezero/internal/client.go +++ b/providers/dns/rcodezero/internal/client.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "github.com/miekg/dns" ) diff --git a/providers/dns/regru/internal/client.go b/providers/dns/regru/internal/client.go index bf5a09338..d806bad22 100644 --- a/providers/dns/regru/internal/client.go +++ b/providers/dns/regru/internal/client.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.reg.ru/api/regru2/" diff --git a/providers/dns/safedns/internal/client.go b/providers/dns/safedns/internal/client.go index e6ca47dfb..938958b24 100644 --- a/providers/dns/safedns/internal/client.go +++ b/providers/dns/safedns/internal/client.go @@ -12,7 +12,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.ukfast.io/safedns/v1" diff --git a/providers/dns/sakuracloud/sakuracloud.go b/providers/dns/sakuracloud/sakuracloud.go index 4ff015b1c..b577585d1 100644 --- a/providers/dns/sakuracloud/sakuracloud.go +++ b/providers/dns/sakuracloud/sakuracloud.go @@ -11,9 +11,9 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" client "github.com/sacloud/api-client-go" "github.com/sacloud/iaas-api-go" "github.com/sacloud/iaas-api-go/defaults" diff --git a/providers/dns/scaleway/scaleway.go b/providers/dns/scaleway/scaleway.go index 678843582..dedd096d6 100644 --- a/providers/dns/scaleway/scaleway.go +++ b/providers/dns/scaleway/scaleway.go @@ -13,9 +13,9 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" scwdomain "github.com/scaleway/scaleway-sdk-go/api/domain/v2beta1" "github.com/scaleway/scaleway-sdk-go/scw" ) diff --git a/providers/dns/selectelv2/selectelv2.go b/providers/dns/selectelv2/selectelv2.go index f6901da38..b5f192158 100644 --- a/providers/dns/selectelv2/selectelv2.go +++ b/providers/dns/selectelv2/selectelv2.go @@ -10,9 +10,9 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" "github.com/miekg/dns" selectelapi "github.com/selectel/domains-go/pkg/v2" "github.com/selectel/go-selvpcclient/v4/selvpcclient" diff --git a/providers/dns/selfhostde/internal/client.go b/providers/dns/selfhostde/internal/client.go index cafc74f41..9c5604dab 100644 --- a/providers/dns/selfhostde/internal/client.go +++ b/providers/dns/selfhostde/internal/client.go @@ -7,7 +7,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://selfhost.de/cgi-bin/api.pl" diff --git a/providers/dns/servercow/internal/client.go b/providers/dns/servercow/internal/client.go index 993423752..11dd50c0b 100644 --- a/providers/dns/servercow/internal/client.go +++ b/providers/dns/servercow/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const baseAPIURL = "https://api.servercow.de/dns/v1/domains" diff --git a/providers/dns/shellrent/internal/client.go b/providers/dns/shellrent/internal/client.go index 67f432ddd..de5080d4c 100644 --- a/providers/dns/shellrent/internal/client.go +++ b/providers/dns/shellrent/internal/client.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultBaseURL the default API endpoint. diff --git a/providers/dns/simply/internal/client.go b/providers/dns/simply/internal/client.go index eef972291..42c687603 100644 --- a/providers/dns/simply/internal/client.go +++ b/providers/dns/simply/internal/client.go @@ -13,7 +13,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.simply.com/2/" diff --git a/providers/dns/sonic/internal/client.go b/providers/dns/sonic/internal/client.go index 35df89e31..b4d25c845 100644 --- a/providers/dns/sonic/internal/client.go +++ b/providers/dns/sonic/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const baseURL = "https://public-api.sonic.net/dyndns" diff --git a/providers/dns/spaceship/internal/client.go b/providers/dns/spaceship/internal/client.go index 17ec1950a..6c9456958 100644 --- a/providers/dns/spaceship/internal/client.go +++ b/providers/dns/spaceship/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://spaceship.dev/api/v1/" diff --git a/providers/dns/stackpath/internal/client.go b/providers/dns/stackpath/internal/client.go index f28ba576b..5c9f966b4 100644 --- a/providers/dns/stackpath/internal/client.go +++ b/providers/dns/stackpath/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/net/publicsuffix" ) diff --git a/providers/dns/syse/internal/client.go b/providers/dns/syse/internal/client.go index e655c8d5b..8333e43d9 100644 --- a/providers/dns/syse/internal/client.go +++ b/providers/dns/syse/internal/client.go @@ -11,8 +11,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://www.syse.no/api" diff --git a/providers/dns/technitium/internal/client.go b/providers/dns/technitium/internal/client.go index db3d933e6..9b6559861 100644 --- a/providers/dns/technitium/internal/client.go +++ b/providers/dns/technitium/internal/client.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/timewebcloud/internal/client.go b/providers/dns/timewebcloud/internal/client.go index 9de2d1c1e..08efc07d3 100644 --- a/providers/dns/timewebcloud/internal/client.go +++ b/providers/dns/timewebcloud/internal/client.go @@ -12,7 +12,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/todaynic/internal/client.go b/providers/dns/todaynic/internal/client.go index be35992d3..b56a6e505 100644 --- a/providers/dns/todaynic/internal/client.go +++ b/providers/dns/todaynic/internal/client.go @@ -11,8 +11,8 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/ultradns/ultradns.go b/providers/dns/ultradns/ultradns.go index 5afc2ca58..30dfaa39f 100644 --- a/providers/dns/ultradns/ultradns.go +++ b/providers/dns/ultradns/ultradns.go @@ -10,8 +10,8 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" "github.com/ultradns/ultradns-go-sdk/pkg/client" "github.com/ultradns/ultradns-go-sdk/pkg/record" "github.com/ultradns/ultradns-go-sdk/pkg/rrset" diff --git a/providers/dns/variomedia/internal/client.go b/providers/dns/variomedia/internal/client.go index fbbd54542..7168576c6 100644 --- a/providers/dns/variomedia/internal/client.go +++ b/providers/dns/variomedia/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api.variomedia.de" diff --git a/providers/dns/vercel/internal/client.go b/providers/dns/vercel/internal/client.go index 381ad4f99..d01b96d93 100644 --- a/providers/dns/vercel/internal/client.go +++ b/providers/dns/vercel/internal/client.go @@ -11,7 +11,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" "golang.org/x/oauth2" ) diff --git a/providers/dns/versio/internal/client.go b/providers/dns/versio/internal/client.go index a298df9a1..39fe6dae2 100644 --- a/providers/dns/versio/internal/client.go +++ b/providers/dns/versio/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultBaseURL default API endpoint. diff --git a/providers/dns/vinyldns/vinyldns.go b/providers/dns/vinyldns/vinyldns.go index 5979486ec..df78193ef 100644 --- a/providers/dns/vinyldns/vinyldns.go +++ b/providers/dns/vinyldns/vinyldns.go @@ -11,9 +11,9 @@ import ( "github.com/go-acme/lego/v5/challenge" "github.com/go-acme/lego/v5/challenge/dns01" + "github.com/go-acme/lego/v5/internal/useragent" "github.com/go-acme/lego/v5/platform/config/env" "github.com/go-acme/lego/v5/providers/dns/internal/clientdebug" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" "github.com/vinyldns/go-vinyldns/vinyldns" ) diff --git a/providers/dns/webnamesca/internal/client.go b/providers/dns/webnamesca/internal/client.go index d7dea6ef8..1bacd6528 100644 --- a/providers/dns/webnamesca/internal/client.go +++ b/providers/dns/webnamesca/internal/client.go @@ -11,8 +11,8 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" - "github.com/go-acme/lego/v5/providers/dns/internal/useragent" + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" ) const defaultBaseURL = "https://www.webnames.ca/_/APICore" diff --git a/providers/dns/webnamesru/internal/client.go b/providers/dns/webnamesru/internal/client.go index 49412a234..9730277f3 100644 --- a/providers/dns/webnamesru/internal/client.go +++ b/providers/dns/webnamesru/internal/client.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://www.webnames.ru/scripts/json_domain_zone_manager.pl" diff --git a/providers/dns/wedos/internal/client.go b/providers/dns/wedos/internal/client.go index ead44bb70..266982c84 100644 --- a/providers/dns/wedos/internal/client.go +++ b/providers/dns/wedos/internal/client.go @@ -11,7 +11,7 @@ import ( "time" "github.com/go-acme/lego/v5/challenge/dns01" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const baseURL = "https://api.wedos.com/wapi/json" diff --git a/providers/dns/yandex/internal/client.go b/providers/dns/yandex/internal/client.go index 39dcf41b0..9213af916 100644 --- a/providers/dns/yandex/internal/client.go +++ b/providers/dns/yandex/internal/client.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" querystring "github.com/google/go-querystring/query" ) diff --git a/providers/dns/yandex360/internal/client.go b/providers/dns/yandex360/internal/client.go index 0b4b31fb9..5709fab2d 100644 --- a/providers/dns/yandex360/internal/client.go +++ b/providers/dns/yandex360/internal/client.go @@ -12,7 +12,7 @@ import ( "strconv" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://api360.yandex.net/" diff --git a/providers/dns/zoneedit/internal/client.go b/providers/dns/zoneedit/internal/client.go index 829341643..4f4ee2bc3 100644 --- a/providers/dns/zoneedit/internal/client.go +++ b/providers/dns/zoneedit/internal/client.go @@ -12,7 +12,7 @@ import ( "slices" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) const defaultBaseURL = "https://dynamic.zoneedit.com" diff --git a/providers/dns/zoneee/internal/client.go b/providers/dns/zoneee/internal/client.go index 310f2c695..5b1c3fa38 100644 --- a/providers/dns/zoneee/internal/client.go +++ b/providers/dns/zoneee/internal/client.go @@ -10,7 +10,7 @@ import ( "net/url" "time" - "github.com/go-acme/lego/v5/providers/dns/internal/errutils" + "github.com/go-acme/lego/v5/internal/errutils" ) // DefaultEndpoint the default API endpoint. diff --git a/registration/registar.go b/registration/registar.go index e80774720..282f59e82 100644 --- a/registration/registar.go +++ b/registration/registar.go @@ -3,12 +3,15 @@ package registration import ( "context" "errors" + "fmt" "log/slog" "net/http" + "os" "github.com/go-acme/lego/v5/acme" "github.com/go-acme/lego/v5/acme/api" "github.com/go-acme/lego/v5/log" + "github.com/go-acme/lego/v5/registration/zerossl" ) const mailTo = "mailto:" @@ -170,3 +173,34 @@ func (r *Registrar) ResolveAccountByKey(ctx context.Context) (*Resource, error) return &Resource{URI: account.Location, Body: account.Account}, nil } + +// RegisterWithZeroSSL registers the current account to the ZeroSSL. +// It uses either an access key or an email to generate an EAB. +func RegisterWithZeroSSL(ctx context.Context, r *Registrar, email string) (*Resource, error) { + zc := zerossl.NewClient() + + value, find := os.LookupEnv(zerossl.EnvZeroSSLAccessKey) + if find { + eab, err := zc.GenerateEAB(ctx, value) + if err != nil { + return nil, fmt.Errorf("zerossl: generate EAB: %w", err) + } + + return r.RegisterWithExternalAccountBinding(ctx, RegisterEABOptions{ + TermsOfServiceAgreed: true, + Kid: eab.Kid, + HmacEncoded: eab.HmacKey, + }) + } + + eab, err := zc.GenerateEABFromEmail(ctx, email) + if err != nil { + return nil, fmt.Errorf("zerossl: generate EAB from email: %w", err) + } + + return r.RegisterWithExternalAccountBinding(ctx, RegisterEABOptions{ + TermsOfServiceAgreed: true, + Kid: eab.Kid, + HmacEncoded: eab.HmacKey, + }) +} diff --git a/registration/zerossl/client.go b/registration/zerossl/client.go new file mode 100644 index 000000000..a0aa77a63 --- /dev/null +++ b/registration/zerossl/client.go @@ -0,0 +1,125 @@ +package zerossl + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strings" + "time" + + "github.com/go-acme/lego/v5/internal/errutils" + "github.com/go-acme/lego/v5/internal/useragent" +) + +const EnvZeroSSLAccessKey = "ZERO_SSL_ACCESS_KEY" + +const defaultBaseURL = "https://api.zerossl.com" + +// Client is a ZeroSSL API client. +type Client struct { + baseURL *url.URL + httpClient *http.Client +} + +// NewClient returns a new ZeroSSL API client. +func NewClient() *Client { + baseURL, _ := url.Parse(defaultBaseURL) + + return &Client{ + baseURL: baseURL, + httpClient: &http.Client{Timeout: 30 * time.Second}, + } +} + +// GenerateEAB generates a new EAB credential. +func (c *Client) GenerateEAB(ctx context.Context, accessKey string) (*APIResponse, error) { + endpoint := c.baseURL.JoinPath("acme", "eab-credentials") + + query := endpoint.Query() + query.Set("access_key", accessKey) + + endpoint.RawQuery = query.Encode() + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint.String(), nil) + if err != nil { + return nil, fmt.Errorf("unable to create request: %w", err) + } + + return c.do(req) +} + +func (c *Client) GenerateEABFromEmail(ctx context.Context, email string) (*APIResponse, error) { + if email == "" { + return nil, errors.New("no email provided") + } + + endpoint := c.baseURL.JoinPath("acme", "eab-credentials-email") + + payload := url.Values{} + payload.Set("email", email) + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint.String(), strings.NewReader(payload.Encode())) + if err != nil { + return nil, fmt.Errorf("unable to create request: %w", err) + } + + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + return c.do(req) +} + +func (c *Client) do(req *http.Request) (*APIResponse, error) { + useragent.SetHeader(req.Header) + + req.Header.Set("Accept", "application/json") + + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, errutils.NewHTTPDoError(req, err) + } + + defer func() { _ = resp.Body.Close() }() + + if resp.StatusCode/100 != 2 { + return nil, parseError(req, resp) + } + + raw, err := io.ReadAll(resp.Body) + if err != nil { + return nil, errutils.NewReadResponseError(req, resp.StatusCode, err) + } + + result := new(APIResponse) + + err = json.Unmarshal(raw, result) + if err != nil { + return nil, errutils.NewUnmarshalError(req, resp.StatusCode, raw, err) + } + + if !result.Success { + return nil, result.Error + } + + return result, nil +} + +func parseError(req *http.Request, resp *http.Response) error { + raw, _ := io.ReadAll(resp.Body) + + errAPI := new(APIResponse) + + err := json.Unmarshal(raw, errAPI) + if err != nil { + return errutils.NewUnexpectedStatusCodeError(req, resp.StatusCode, raw) + } + + return errAPI.Error +} + +func IsZeroSSL(server string) bool { + return strings.HasPrefix(server, "https://acme.zerossl.com/") +} diff --git a/registration/zerossl/client_test.go b/registration/zerossl/client_test.go new file mode 100644 index 000000000..0d7eac238 --- /dev/null +++ b/registration/zerossl/client_test.go @@ -0,0 +1,95 @@ +package zerossl + +import ( + "net/http" + "net/http/httptest" + "net/url" + "testing" + + "github.com/go-acme/lego/v5/platform/tester/servermock" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func mockBuilder() *servermock.Builder[*Client] { + return servermock.NewBuilder[*Client]( + func(server *httptest.Server) (*Client, error) { + client := NewClient() + + client.baseURL, _ = url.Parse(server.URL) + client.httpClient = server.Client() + + return client, nil + }, + servermock.CheckHeader(). + With("Accept", "application/json"), + ) +} + +func TestClient_GenerateEAB(t *testing.T) { + client := mockBuilder(). + Route("POST /acme/eab-credentials", + servermock.ResponseFromFixture("success.json"), + servermock.CheckQueryParameter().Strict(). + With("access_key", "secret"), + ). + Build(t) + + eab, err := client.GenerateEAB(t.Context(), "secret") + require.NoError(t, err) + + expected := &APIResponse{ + Success: true, + Kid: "GD-VvWydSVFuss_GhBwYQQ", + HmacKey: "MjXU3MH-Z0WQ7piMAnVsCpD1shgMiWx6ggPWiTmydgUaj7dWWWfQfA", + } + + assert.Equal(t, expected, eab) +} + +func TestClient_GenerateEAB_error(t *testing.T) { + client := mockBuilder(). + Route("POST /acme/eab-credentials", + servermock.ResponseFromFixture("error.json"). + WithStatusCode(http.StatusUnauthorized), + ). + Build(t) + + _, err := client.GenerateEAB(t.Context(), "foo") + require.EqualError(t, err, "101: invalid_access_key: You have not supplied a valid API Access Key.") +} + +func TestClient_GenerateEABFromEmail(t *testing.T) { + client := mockBuilder(). + Route("POST /acme/eab-credentials-email", + servermock.ResponseFromFixture("success.json"), + servermock.CheckHeader(). + WithContentTypeFromURLEncoded(), + servermock.CheckForm(). + With("email", "test@exmample.com"), + ). + Build(t) + + eab, err := client.GenerateEABFromEmail(t.Context(), "test@exmample.com") + require.NoError(t, err) + + expected := &APIResponse{ + Success: true, + Kid: "GD-VvWydSVFuss_GhBwYQQ", + HmacKey: "MjXU3MH-Z0WQ7piMAnVsCpD1shgMiWx6ggPWiTmydgUaj7dWWWfQfA", + } + + assert.Equal(t, expected, eab) +} + +func TestClient_GenerateEABFromEmail_error(t *testing.T) { + client := mockBuilder(). + Route("POST /acme/eab-credentials-email", + // NOTE: with this endpoint the server always returns a 200. + servermock.ResponseFromFixture("error_email.json"), + ). + Build(t) + + _, err := client.GenerateEABFromEmail(t.Context(), "test@exmample.com") + require.EqualError(t, err, "2900: missing_email") +} diff --git a/registration/zerossl/fixtures/error.json b/registration/zerossl/fixtures/error.json new file mode 100644 index 000000000..5fabe03bb --- /dev/null +++ b/registration/zerossl/fixtures/error.json @@ -0,0 +1,8 @@ +{ + "success": false, + "error": { + "code": 101, + "type": "invalid_access_key", + "info": "You have not supplied a valid API Access Key." + } +} diff --git a/registration/zerossl/fixtures/error_email.json b/registration/zerossl/fixtures/error_email.json new file mode 100644 index 000000000..1baf4902f --- /dev/null +++ b/registration/zerossl/fixtures/error_email.json @@ -0,0 +1,8 @@ +{ + "success": false, + "error": { + "code": 2900, + "type": "missing_email", + "info": null + } +} diff --git a/registration/zerossl/fixtures/success.json b/registration/zerossl/fixtures/success.json new file mode 100644 index 000000000..94fa2d926 --- /dev/null +++ b/registration/zerossl/fixtures/success.json @@ -0,0 +1,5 @@ +{ + "success": true, + "eab_kid": "GD-VvWydSVFuss_GhBwYQQ", + "eab_hmac_key": "MjXU3MH-Z0WQ7piMAnVsCpD1shgMiWx6ggPWiTmydgUaj7dWWWfQfA" +} diff --git a/registration/zerossl/types.go b/registration/zerossl/types.go new file mode 100644 index 000000000..7686c297e --- /dev/null +++ b/registration/zerossl/types.go @@ -0,0 +1,33 @@ +package zerossl + +import ( + "fmt" + "strings" +) + +type APIResponse struct { + Success bool `json:"success"` + + Kid string `json:"eab_kid"` + HmacKey string `json:"eab_hmac_key"` + + Error *ErrorDetail `json:"error"` +} + +type ErrorDetail struct { + Code int `json:"code"` + Type string `json:"type"` + Info string `json:"info"` +} + +func (e *ErrorDetail) Error() string { + var msg strings.Builder + + msg.WriteString(fmt.Sprintf("%d: %s", e.Code, e.Type)) + + if e.Info != "" { + msg.WriteString(fmt.Sprintf(": %s", e.Info)) + } + + return msg.String() +}