diff --git a/cmd/zz_gen_cmd_dnshelp.go b/cmd/zz_gen_cmd_dnshelp.go index 4c76a0f51..898f87ec9 100644 --- a/cmd/zz_gen_cmd_dnshelp.go +++ b/cmd/zz_gen_cmd_dnshelp.go @@ -614,6 +614,7 @@ func displayDNSHelp(w io.Writer, name string) error { ew.writeln() ew.writeln(`Additional Configuration:`) + ew.writeln(` - "BUNNY_HTTP_TIMEOUT": API request timeout in seconds (Default: 30)`) ew.writeln(` - "BUNNY_POLLING_INTERVAL": Time between DNS propagation check in seconds (Default: 2)`) ew.writeln(` - "BUNNY_PROPAGATION_TIMEOUT": Maximum waiting time for DNS propagation in seconds (Default: 120)`) ew.writeln(` - "BUNNY_TTL": The TTL of the TXT record used for the DNS challenge in seconds (Default: 60)`) @@ -2171,6 +2172,7 @@ func displayDNSHelp(w io.Writer, name string) error { ew.writeln() ew.writeln(`Additional Configuration:`) + ew.writeln(` - "MAILINABOX_HTTP_TIMEOUT": API request timeout in seconds (Default: 30)`) ew.writeln(` - "MAILINABOX_POLLING_INTERVAL": Time between DNS propagation check in seconds (Default: 4)`) ew.writeln(` - "MAILINABOX_PROPAGATION_TIMEOUT": Maximum waiting time for DNS propagation in seconds (Default: 120)`) @@ -3001,6 +3003,7 @@ func displayDNSHelp(w io.Writer, name string) error { ew.writeln(`Additional Configuration:`) ew.writeln(` - "SCW_ACCESS_KEY": Access key`) + ew.writeln(` - "SCW_HTTP_TIMEOUT": API request timeout in seconds (Default: 30)`) ew.writeln(` - "SCW_POLLING_INTERVAL": Time between DNS propagation check in seconds (Default: 10)`) ew.writeln(` - "SCW_PROPAGATION_TIMEOUT": Maximum waiting time for DNS propagation in seconds (Default: 120)`) ew.writeln(` - "SCW_TTL": The TTL of the TXT record used for the DNS challenge in seconds (Default: 60)`) @@ -3281,6 +3284,7 @@ func displayDNSHelp(w io.Writer, name string) error { ew.writeln() ew.writeln(`Additional Configuration:`) + ew.writeln(` - "TRANSIP_HTTP_TIMEOUT": API request timeout in seconds (Default: 30)`) ew.writeln(` - "TRANSIP_POLLING_INTERVAL": Time between DNS propagation check in seconds (Default: 10)`) ew.writeln(` - "TRANSIP_PROPAGATION_TIMEOUT": Maximum waiting time for DNS propagation in seconds (Default: 600)`) ew.writeln(` - "TRANSIP_TTL": The TTL of the TXT record used for the DNS challenge in seconds (Default: 10)`) @@ -3409,6 +3413,7 @@ func displayDNSHelp(w io.Writer, name string) error { ew.writeln() ew.writeln(`Additional Configuration:`) + ew.writeln(` - "VINYLDNS_HTTP_TIMEOUT": API request timeout in seconds (Default: 30)`) ew.writeln(` - "VINYLDNS_POLLING_INTERVAL": Time between DNS propagation check in seconds (Default: 4)`) ew.writeln(` - "VINYLDNS_PROPAGATION_TIMEOUT": Maximum waiting time for DNS propagation in seconds (Default: 120)`) ew.writeln(` - "VINYLDNS_QUOTE_VALUE": Adds quotes around the TXT record value (Default: false)`) diff --git a/docs/content/dns/zz_gen_bunny.md b/docs/content/dns/zz_gen_bunny.md index 7b4db2020..884c61aea 100644 --- a/docs/content/dns/zz_gen_bunny.md +++ b/docs/content/dns/zz_gen_bunny.md @@ -47,6 +47,7 @@ More information [here]({{% ref "dns#configuration-and-credentials" %}}). | Environment Variable Name | Description | |--------------------------------|-------------| +| `BUNNY_HTTP_TIMEOUT` | API request timeout in seconds (Default: 30) | | `BUNNY_POLLING_INTERVAL` | Time between DNS propagation check in seconds (Default: 2) | | `BUNNY_PROPAGATION_TIMEOUT` | Maximum waiting time for DNS propagation in seconds (Default: 120) | | `BUNNY_TTL` | The TTL of the TXT record used for the DNS challenge in seconds (Default: 60) | diff --git a/docs/content/dns/zz_gen_mailinabox.md b/docs/content/dns/zz_gen_mailinabox.md index 8b5048c60..3ffed1cc7 100644 --- a/docs/content/dns/zz_gen_mailinabox.md +++ b/docs/content/dns/zz_gen_mailinabox.md @@ -51,6 +51,7 @@ More information [here]({{% ref "dns#configuration-and-credentials" %}}). | Environment Variable Name | Description | |--------------------------------|-------------| +| `MAILINABOX_HTTP_TIMEOUT` | API request timeout in seconds (Default: 30) | | `MAILINABOX_POLLING_INTERVAL` | Time between DNS propagation check in seconds (Default: 4) | | `MAILINABOX_PROPAGATION_TIMEOUT` | Maximum waiting time for DNS propagation in seconds (Default: 120) | diff --git a/docs/content/dns/zz_gen_scaleway.md b/docs/content/dns/zz_gen_scaleway.md index 7f9d6b7c7..2f6af9d8a 100644 --- a/docs/content/dns/zz_gen_scaleway.md +++ b/docs/content/dns/zz_gen_scaleway.md @@ -49,6 +49,7 @@ More information [here]({{% ref "dns#configuration-and-credentials" %}}). | Environment Variable Name | Description | |--------------------------------|-------------| | `SCW_ACCESS_KEY` | Access key | +| `SCW_HTTP_TIMEOUT` | API request timeout in seconds (Default: 30) | | `SCW_POLLING_INTERVAL` | Time between DNS propagation check in seconds (Default: 10) | | `SCW_PROPAGATION_TIMEOUT` | Maximum waiting time for DNS propagation in seconds (Default: 120) | | `SCW_TTL` | The TTL of the TXT record used for the DNS challenge in seconds (Default: 60) | diff --git a/docs/content/dns/zz_gen_transip.md b/docs/content/dns/zz_gen_transip.md index 68b0f7acf..769fbc734 100644 --- a/docs/content/dns/zz_gen_transip.md +++ b/docs/content/dns/zz_gen_transip.md @@ -49,6 +49,7 @@ More information [here]({{% ref "dns#configuration-and-credentials" %}}). | Environment Variable Name | Description | |--------------------------------|-------------| +| `TRANSIP_HTTP_TIMEOUT` | API request timeout in seconds (Default: 30) | | `TRANSIP_POLLING_INTERVAL` | Time between DNS propagation check in seconds (Default: 10) | | `TRANSIP_PROPAGATION_TIMEOUT` | Maximum waiting time for DNS propagation in seconds (Default: 600) | | `TRANSIP_TTL` | The TTL of the TXT record used for the DNS challenge in seconds (Default: 10) | diff --git a/docs/content/dns/zz_gen_vinyldns.md b/docs/content/dns/zz_gen_vinyldns.md index 9a9c4bef0..666bc39c4 100644 --- a/docs/content/dns/zz_gen_vinyldns.md +++ b/docs/content/dns/zz_gen_vinyldns.md @@ -51,6 +51,7 @@ More information [here]({{% ref "dns#configuration-and-credentials" %}}). | Environment Variable Name | Description | |--------------------------------|-------------| +| `VINYLDNS_HTTP_TIMEOUT` | API request timeout in seconds (Default: 30) | | `VINYLDNS_POLLING_INTERVAL` | Time between DNS propagation check in seconds (Default: 4) | | `VINYLDNS_PROPAGATION_TIMEOUT` | Maximum waiting time for DNS propagation in seconds (Default: 120) | | `VINYLDNS_QUOTE_VALUE` | Adds quotes around the TXT record value (Default: false) | diff --git a/docs/content/usage/cli/Options.md b/docs/content/usage/cli/Options.md index 25ba7e593..7b5df027a 100644 --- a/docs/content/usage/cli/Options.md +++ b/docs/content/usage/cli/Options.md @@ -143,6 +143,25 @@ Example: LEGO_DEBUG_CLIENT_VERBOSE_ERROR=true ``` +### LEGO_DEBUG_DNS_API_HTTP_CLIENT + +> **⚠️ WARNING: This will expose credentials in the log output! ⚠️** +> +> Do not run this in production environments, or if you can't be sure that logs aren't accessed by third parties or tools (like log collectors). +> +> You have been warned. Here be dragons. + +The environment variable `LEGO_DEBUG_DNS_API_HTTP_CLIENT` allows debugging the DNS API interaction. +It will dump the full request and response to the log output. + +Some DNS providers don't support this option. + +Example: + +```bash +LEGO_DEBUG_DNS_API_HTTP_CLIENT=true +``` + ### LEGO_DEBUG_ACME_HTTP_CLIENT The environment variable `LEGO_DEBUG_ACME_HTTP_CLIENT` allows debug the calls to the ACME server. diff --git a/go.mod b/go.mod index 0a7bbb119..2337d068e 100644 --- a/go.mod +++ b/go.mod @@ -53,13 +53,13 @@ require ( github.com/mimuret/golang-iij-dpf v0.9.1 github.com/namedotcom/go/v4 v4.0.2 github.com/nrdcg/auroradns v1.1.0 - github.com/nrdcg/bunny-go v0.0.0-20250327222614-988a091fc7ea + github.com/nrdcg/bunny-go v0.1.0 github.com/nrdcg/desec v0.11.0 github.com/nrdcg/dnspod-go v0.4.0 github.com/nrdcg/freemyip v0.3.0 github.com/nrdcg/goacmedns v0.2.0 github.com/nrdcg/goinwx v0.11.0 - github.com/nrdcg/mailinabox v0.2.0 + github.com/nrdcg/mailinabox v0.3.0 github.com/nrdcg/namesilo v0.5.0 github.com/nrdcg/nodion v0.1.0 github.com/nrdcg/oci-go-sdk/common/v1065 v1065.102.0 diff --git a/go.sum b/go.sum index c60a4be6e..382959ff4 100644 --- a/go.sum +++ b/go.sum @@ -685,8 +685,8 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nrdcg/auroradns v1.1.0 h1:KekGh8kmf2MNwqZVVYo/fw/ZONt8QMEmbMFOeljteWo= github.com/nrdcg/auroradns v1.1.0/go.mod h1:O7tViUZbAcnykVnrGkXzIJTHoQCHcgalgAe6X1mzHfk= -github.com/nrdcg/bunny-go v0.0.0-20250327222614-988a091fc7ea h1:OSgRS4kqOs/WuxuFOObP2gwrenL4/qiKXQbQugr/Two= -github.com/nrdcg/bunny-go v0.0.0-20250327222614-988a091fc7ea/go.mod h1:IDRRngAngb2eTEaWgpO0hukQFI/vJId46fT1KErMytA= +github.com/nrdcg/bunny-go v0.1.0 h1:GAHTRpHaG/TxfLZlqoJ8OJFzw8rI74+jOTkzxWh0uHA= +github.com/nrdcg/bunny-go v0.1.0/go.mod h1:u+C9dgsspgtWVaAz6QkyV17s9fxD8viwwKoxb9XMz1A= github.com/nrdcg/desec v0.11.0 h1:XZVHy07sg12y8FozMp+l7XvzPsdzog0AYXuQMaHBsfs= github.com/nrdcg/desec v0.11.0/go.mod h1:5+4vyhMRTs49V9CNoODF/HwT8Mwxv9DJ6j+7NekUnBs= github.com/nrdcg/dnspod-go v0.4.0 h1:c/jn1mLZNKF3/osJ6mz3QPxTudvPArXTjpkmYj0uK6U= @@ -697,8 +697,8 @@ github.com/nrdcg/goacmedns v0.2.0 h1:ADMbThobzEMnr6kg2ohs4KGa3LFqmgiBA22/6jUWJR0 github.com/nrdcg/goacmedns v0.2.0/go.mod h1:T5o6+xvSLrQpugmwHvrSNkzWht0UGAwj2ACBMhh73Cg= github.com/nrdcg/goinwx v0.11.0 h1:GER0SE3POub7rxARt3Y3jRy1OON1hwF1LRxHz5xsFBw= github.com/nrdcg/goinwx v0.11.0/go.mod h1:0BXSC0FxVtU4aTjX0Zw3x0DK32tjugLzeNIAGtwXvPQ= -github.com/nrdcg/mailinabox v0.2.0 h1:IKq8mfKiVwNW2hQii/ng1dJ4yYMMv3HAP3fMFIq2CFk= -github.com/nrdcg/mailinabox v0.2.0/go.mod h1:0yxqeYOiGyxAu7Sb94eMxHPIOsPYXAjTeA9ZhePhGnc= +github.com/nrdcg/mailinabox v0.3.0 h1:PHkC1elKXKAjEvdx2HHFMgcEGZFqudAl7aU3L2JDhM4= +github.com/nrdcg/mailinabox v0.3.0/go.mod h1:1eFIGcM4lI+AfFOUpbs548SFGz1ZWoMOGbECBmkghw4= github.com/nrdcg/namesilo v0.5.0 h1:6QNxT/XxE+f5B+7QlfWorthNzOzcGlBLRQxqi6YeBrE= github.com/nrdcg/namesilo v0.5.0/go.mod h1:4UkwlwQfDt74kSGmhLaDylnBrD94IfflnpoEaj6T2qw= github.com/nrdcg/nodion v0.1.0 h1:zLKaqTn2X0aDuBHHfyA1zFgeZfiCpmu/O9DM73okavw= diff --git a/providers/dns/active24/active24.go b/providers/dns/active24/active24.go index 1acd72f61..c8107cab6 100644 --- a/providers/dns/active24/active24.go +++ b/providers/dns/active24/active24.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/internal/active24" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) const baseAPIDomain = "active24.cz" @@ -87,6 +88,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/allinkl/allinkl.go b/providers/dns/allinkl/allinkl.go index b1a40ae64..5be194ed2 100644 --- a/providers/dns/allinkl/allinkl.go +++ b/providers/dns/allinkl/allinkl.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/allinkl/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -92,12 +93,16 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { identifier.HTTPClient = config.HTTPClient } + identifier.HTTPClient = clientdebug.Wrap(identifier.HTTPClient) + client := internal.NewClient(config.Login) if config.HTTPClient != nil { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, identifier: identifier, diff --git a/providers/dns/anexia/anexia.go b/providers/dns/anexia/anexia.go index 9328c14c5..568ef5263 100644 --- a/providers/dns/anexia/anexia.go +++ b/providers/dns/anexia/anexia.go @@ -15,6 +15,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/anexia/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -105,6 +106,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/arvancloud/arvancloud.go b/providers/dns/arvancloud/arvancloud.go index 3dd4eee70..4b5fbab62 100644 --- a/providers/dns/arvancloud/arvancloud.go +++ b/providers/dns/arvancloud/arvancloud.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/arvancloud/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -95,6 +96,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/auroradns/auroradns.go b/providers/dns/auroradns/auroradns.go index d41b271ed..95d6ab759 100644 --- a/providers/dns/auroradns/auroradns.go +++ b/providers/dns/auroradns/auroradns.go @@ -10,6 +10,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/miekg/dns" "github.com/nrdcg/auroradns" ) @@ -94,7 +95,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, fmt.Errorf("aurora: %w", err) } - client, err := auroradns.NewClient(tr.Client(), auroradns.WithBaseURL(config.BaseURL)) + client, err := auroradns.NewClient(clientdebug.Wrap(tr.Client()), auroradns.WithBaseURL(config.BaseURL)) if err != nil { return nil, fmt.Errorf("aurora: %w", err) } diff --git a/providers/dns/autodns/autodns.go b/providers/dns/autodns/autodns.go index 61f3005f1..770bac99b 100644 --- a/providers/dns/autodns/autodns.go +++ b/providers/dns/autodns/autodns.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/autodns/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -105,6 +106,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/axelname/axelname.go b/providers/dns/axelname/axelname.go index 033ccc92b..96d26236e 100644 --- a/providers/dns/axelname/axelname.go +++ b/providers/dns/axelname/axelname.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/axelname/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -84,6 +85,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/azion/azion.go b/providers/dns/azion/azion.go index b319e1779..a257fa0f1 100644 --- a/providers/dns/azion/azion.go +++ b/providers/dns/azion/azion.go @@ -12,6 +12,7 @@ import ( "github.com/aziontech/azionapi-go-sdk/idns" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -92,6 +93,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { clientConfig.HTTPClient = config.HTTPClient } + clientConfig.HTTPClient = clientdebug.Wrap(clientConfig.HTTPClient) + client := idns.NewAPIClient(clientConfig) return &DNSProvider{ diff --git a/providers/dns/azuredns/azuredns.go b/providers/dns/azuredns/azuredns.go index dcd4543b0..b8effadea 100644 --- a/providers/dns/azuredns/azuredns.go +++ b/providers/dns/azuredns/azuredns.go @@ -11,6 +11,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -171,6 +172,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { config.HTTPClient = &http.Client{Timeout: 5 * time.Second} } + config.HTTPClient = clientdebug.Wrap(config.HTTPClient) + credentials, err := getCredentials(config) if err != nil { return nil, fmt.Errorf("azuredns: Unable to retrieve valid credentials: %w", err) diff --git a/providers/dns/beget/beget.go b/providers/dns/beget/beget.go index a8040bc0e..e0d67572f 100644 --- a/providers/dns/beget/beget.go +++ b/providers/dns/beget/beget.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/beget/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -90,6 +91,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/beget/beget_test.go b/providers/dns/beget/beget_test.go index 7ceb7b140..e89b626b6 100644 --- a/providers/dns/beget/beget_test.go +++ b/providers/dns/beget/beget_test.go @@ -158,13 +158,13 @@ func mockBuilder() *servermock.Builder[*DNSProvider] { config := NewDefaultConfig() config.Username = "user" config.Password = "secret" + config.HTTPClient = server.Client() p, err := NewDNSProviderConfig(config) if err != nil { return nil, err } - p.client.HTTPClient = server.Client() p.client.BaseURL, _ = url.Parse(server.URL) return p, nil diff --git a/providers/dns/binarylane/binarylane.go b/providers/dns/binarylane/binarylane.go index d8f459e2f..83016fff7 100644 --- a/providers/dns/binarylane/binarylane.go +++ b/providers/dns/binarylane/binarylane.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/binarylane/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -85,6 +86,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/bindman/bindman.go b/providers/dns/bindman/bindman.go index fbaddcbec..bd026bf74 100644 --- a/providers/dns/bindman/bindman.go +++ b/providers/dns/bindman/bindman.go @@ -10,7 +10,8 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" - "github.com/labbsr0x/bindman-dns-webhook/src/client" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" + bindman "github.com/labbsr0x/bindman-dns-webhook/src/client" ) // Environment variables names. @@ -48,7 +49,7 @@ func NewDefaultConfig() *Config { // DNSProvider implements the challenge.Provider interface. type DNSProvider struct { config *Config - client *client.DNSWebhookClient + client *bindman.DNSWebhookClient } // NewDNSProvider returns a DNSProvider instance configured for Bindman. @@ -75,12 +76,17 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("bindman: bindman manager address missing") } - bClient, err := client.New(config.BaseURL, config.HTTPClient) + // Because the client.New uses the http.DefaultClient. + if config.HTTPClient == nil { + config.HTTPClient = &http.Client{Timeout: time.Minute} + } + + client, err := bindman.New(config.BaseURL, clientdebug.Wrap(config.HTTPClient)) if err != nil { return nil, fmt.Errorf("bindman: %w", err) } - return &DNSProvider{config: config, client: bClient}, nil + return &DNSProvider{config: config, client: client}, nil } // Present creates a TXT record using the specified parameters. diff --git a/providers/dns/bluecat/bluecat.go b/providers/dns/bluecat/bluecat.go index 8ba026f49..b26fab8be 100644 --- a/providers/dns/bluecat/bluecat.go +++ b/providers/dns/bluecat/bluecat.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/bluecat/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -110,6 +111,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/bookmyname/bookmyname.go b/providers/dns/bookmyname/bookmyname.go index 991420619..6f42dfd78 100644 --- a/providers/dns/bookmyname/bookmyname.go +++ b/providers/dns/bookmyname/bookmyname.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/bookmyname/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -87,6 +88,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/brandit/brandit.go b/providers/dns/brandit/brandit.go index 437d1642a..012e5ad15 100644 --- a/providers/dns/brandit/brandit.go +++ b/providers/dns/brandit/brandit.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/brandit/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -92,6 +93,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/bunny/bunny.go b/providers/dns/bunny/bunny.go index 1489d1c5e..67febeca6 100644 --- a/providers/dns/bunny/bunny.go +++ b/providers/dns/bunny/bunny.go @@ -5,13 +5,16 @@ import ( "context" "errors" "fmt" + "net/http" "slices" "time" "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/ptr" + "github.com/go-acme/lego/v4/providers/dns/internal/useragent" "github.com/nrdcg/bunny-go" "golang.org/x/net/publicsuffix" ) @@ -25,6 +28,7 @@ const ( EnvTTL = envNamespace + "TTL" EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT" EnvPollingInterval = envNamespace + "POLLING_INTERVAL" + EnvHTTPTimeout = envNamespace + "HTTP_TIMEOUT" ) const minTTL = 60 @@ -33,10 +37,12 @@ var _ challenge.ProviderTimeout = (*DNSProvider)(nil) // Config is used to configure the creation of the DNSProvider. type Config struct { - APIKey string + APIKey string + PropagationTimeout time.Duration PollingInterval time.Duration TTL int + HTTPClient *http.Client } // NewDefaultConfig returns a default configuration for the DNSProvider. @@ -45,6 +51,9 @@ func NewDefaultConfig() *Config { TTL: env.GetOrDefaultInt(EnvTTL, minTTL), PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 120*time.Second), PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval), + HTTPClient: &http.Client{ + Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), + }, } } @@ -82,9 +91,19 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, fmt.Errorf("bunny: invalid TTL, TTL (%d) must be greater than %d", config.TTL, minTTL) } - client := bunny.NewClient(config.APIKey) + if config.HTTPClient == nil { + config.HTTPClient = &http.Client{Timeout: 30 * time.Second} + } - return &DNSProvider{config: config, client: client}, nil + config.HTTPClient = clientdebug.Wrap(config.HTTPClient) + + return &DNSProvider{ + config: config, + client: bunny.NewClient(config.APIKey, + bunny.WithUserAgent(useragent.Get()), + bunny.WithHTTPClient(config.HTTPClient), + ), + }, nil } // Timeout returns the timeout and interval to use when checking for DNS propagation. diff --git a/providers/dns/bunny/bunny.toml b/providers/dns/bunny/bunny.toml index bdbbf3177..cbe22d6db 100644 --- a/providers/dns/bunny/bunny.toml +++ b/providers/dns/bunny/bunny.toml @@ -16,6 +16,7 @@ lego --email you@example.com --dns bunny -d '*.example.com' -d example.com run BUNNY_POLLING_INTERVAL = "Time between DNS propagation check in seconds (Default: 2)" BUNNY_PROPAGATION_TIMEOUT = "Maximum waiting time for DNS propagation in seconds (Default: 120)" BUNNY_TTL = "The TTL of the TXT record used for the DNS challenge in seconds (Default: 60)" + BUNNY_HTTP_TIMEOUT = "API request timeout in seconds (Default: 30)" [Links] API = "https://docs.bunny.net/reference/dnszonepublic_index" diff --git a/providers/dns/checkdomain/checkdomain.go b/providers/dns/checkdomain/checkdomain.go index e2d7a05aa..c615f5733 100644 --- a/providers/dns/checkdomain/checkdomain.go +++ b/providers/dns/checkdomain/checkdomain.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/checkdomain/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -86,7 +87,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("checkdomain: missing token") } - client := internal.NewClient(internal.OAuthStaticAccessToken(config.HTTPClient, config.Token)) + client := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.Token), + ), + ) if config.Endpoint != nil { client.BaseURL = config.Endpoint diff --git a/providers/dns/civo/civo.go b/providers/dns/civo/civo.go index 46c474b52..a6af01e8a 100644 --- a/providers/dns/civo/civo.go +++ b/providers/dns/civo/civo.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/civo/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -91,7 +92,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } // Create a Civo client - DNS is region independent, we can use any region - client, err := internal.NewClient(internal.OAuthStaticAccessToken(config.HTTPClient, config.Token), "LON1") + client, err := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.Token), + ), + "LON1") if err != nil { return nil, fmt.Errorf("civo: %w", err) } diff --git a/providers/dns/clouddns/clouddns.go b/providers/dns/clouddns/clouddns.go index 379dd3cf2..77b673738 100644 --- a/providers/dns/clouddns/clouddns.go +++ b/providers/dns/clouddns/clouddns.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/clouddns/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -93,6 +94,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/cloudflare/internal/client.go b/providers/dns/cloudflare/internal/client.go index 7ba4b06e0..33b7b1ba8 100644 --- a/providers/dns/cloudflare/internal/client.go +++ b/providers/dns/cloudflare/internal/client.go @@ -17,6 +17,7 @@ import ( "net/url" "time" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/errutils" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" ) @@ -61,6 +62,8 @@ func NewClient(opts ...Option) (*Client, error) { return nil, errors.New("invalid credentials: authEmail and authKey must be set together") } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return client, nil } diff --git a/providers/dns/cloudns/cloudns.go b/providers/dns/cloudns/cloudns.go index 7fbbe1062..39a4d45cd 100644 --- a/providers/dns/cloudns/cloudns.go +++ b/providers/dns/cloudns/cloudns.go @@ -15,6 +15,7 @@ import ( "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/platform/wait" "github.com/go-acme/lego/v4/providers/dns/cloudns/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -100,7 +101,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, fmt.Errorf("ClouDNS: %w", err) } - client.HTTPClient = config.HTTPClient + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/cloudru/cloudru.go b/providers/dns/cloudru/cloudru.go index 314c20445..287c12045 100644 --- a/providers/dns/cloudru/cloudru.go +++ b/providers/dns/cloudru/cloudru.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/cloudru/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -99,6 +100,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/conoha/conoha.go b/providers/dns/conoha/conoha.go index aa6c68ce9..f7658647c 100644 --- a/providers/dns/conoha/conoha.go +++ b/providers/dns/conoha/conoha.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/conoha/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -98,6 +99,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { identifier.HTTPClient = config.HTTPClient } + identifier.HTTPClient = clientdebug.Wrap(identifier.HTTPClient) + auth := internal.Auth{ TenantID: config.TenantID, PasswordCredentials: internal.PasswordCredentials{ @@ -120,6 +123,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/conohav3/conohav3.go b/providers/dns/conohav3/conohav3.go index a6cb12cb1..c1eace827 100644 --- a/providers/dns/conohav3/conohav3.go +++ b/providers/dns/conohav3/conohav3.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/conohav3/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -98,6 +99,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { identifier.HTTPClient = config.HTTPClient } + identifier.HTTPClient = clientdebug.Wrap(identifier.HTTPClient) + auth := internal.Auth{ Identity: internal.Identity{ Methods: []string{"password"}, @@ -129,6 +132,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/constellix/constellix.go b/providers/dns/constellix/constellix.go index f981b4974..66543903a 100644 --- a/providers/dns/constellix/constellix.go +++ b/providers/dns/constellix/constellix.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/constellix/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/hashicorp/go-retryablehttp" ) @@ -96,7 +97,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { retryClient.HTTPClient = tr.Wrap(config.HTTPClient) retryClient.Backoff = backoff - client := internal.NewClient(retryClient.StandardClient()) + client := internal.NewClient(clientdebug.Wrap(retryClient.StandardClient())) return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/corenetworks/corenetworks.go b/providers/dns/corenetworks/corenetworks.go index 119b3c16b..cde58a2bf 100644 --- a/providers/dns/corenetworks/corenetworks.go +++ b/providers/dns/corenetworks/corenetworks.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/corenetworks/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -90,6 +91,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/cpanel/cpanel.go b/providers/dns/cpanel/cpanel.go index 4c80e4db8..a61a05c81 100644 --- a/providers/dns/cpanel/cpanel.go +++ b/providers/dns/cpanel/cpanel.go @@ -17,6 +17,7 @@ import ( "github.com/go-acme/lego/v4/providers/dns/cpanel/internal/cpanel" "github.com/go-acme/lego/v4/providers/dns/cpanel/internal/shared" "github.com/go-acme/lego/v4/providers/dns/cpanel/internal/whm" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -314,6 +315,8 @@ func createClient(config *Config) (apiClient, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return client, nil case "whm": @@ -326,6 +329,8 @@ func createClient(config *Config) (apiClient, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return client, nil default: diff --git a/providers/dns/derak/derak.go b/providers/dns/derak/derak.go index 6e726620a..8a05d7608 100644 --- a/providers/dns/derak/derak.go +++ b/providers/dns/derak/derak.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/derak/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/miekg/dns" ) @@ -94,6 +95,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/desec/desec.go b/providers/dns/desec/desec.go index 9d1e20e53..08aebc2b4 100644 --- a/providers/dns/desec/desec.go +++ b/providers/dns/desec/desec.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/desec" ) @@ -87,7 +88,14 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { opts := desec.NewDefaultClientOptions() if config.HTTPClient != nil { opts.HTTPClient = config.HTTPClient + } else { + // Because the desec.NewDefaultClientOptions uses the http.DefaultClient. + // TODO(ldez): change the desec lib. + opts.HTTPClient = &http.Client{Timeout: 30 * time.Second} } + + opts.HTTPClient = clientdebug.Wrap(opts.HTTPClient) + opts.Logger = log.Default() client := desec.New(config.Token, opts) diff --git a/providers/dns/digitalocean/digitalocean.go b/providers/dns/digitalocean/digitalocean.go index 0b68aa5c9..f7ae68d60 100644 --- a/providers/dns/digitalocean/digitalocean.go +++ b/providers/dns/digitalocean/digitalocean.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/digitalocean/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -88,7 +89,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("digitalocean: credentials missing") } - client := internal.NewClient(internal.OAuthStaticAccessToken(config.HTTPClient, config.AuthToken)) + client := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.AuthToken), + ), + ) if config.BaseURL != "" { var err error diff --git a/providers/dns/directadmin/directadmin.go b/providers/dns/directadmin/directadmin.go index de9b14945..8dfa132ae 100644 --- a/providers/dns/directadmin/directadmin.go +++ b/providers/dns/directadmin/directadmin.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/directadmin/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -99,6 +100,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/dnshomede/dnshomede.go b/providers/dns/dnshomede/dnshomede.go index 91b0b11e3..e3d56f098 100644 --- a/providers/dns/dnshomede/dnshomede.go +++ b/providers/dns/dnshomede/dnshomede.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/dnshomede/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -92,6 +93,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client := internal.NewClient(config.Credentials) + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/dnsimple/dnsimple.go b/providers/dns/dnsimple/dnsimple.go index 5d1a7ba80..4b7df0943 100644 --- a/providers/dns/dnsimple/dnsimple.go +++ b/providers/dns/dnsimple/dnsimple.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" "golang.org/x/oauth2" ) @@ -79,8 +80,14 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("dnsimple: OAuth token is missing") } - ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: config.AccessToken}) - client := dnsimple.NewClient(oauth2.NewClient(context.Background(), ts)) + client := dnsimple.NewClient( + clientdebug.Wrap( + oauth2.NewClient( + context.Background(), + oauth2.StaticTokenSource(&oauth2.Token{AccessToken: config.AccessToken}), + ), + ), + ) client.SetUserAgent(useragent.Get()) if config.BaseURL != "" { diff --git a/providers/dns/dnsmadeeasy/dnsmadeeasy.go b/providers/dns/dnsmadeeasy/dnsmadeeasy.go index fcfe6714c..7d2f92726 100644 --- a/providers/dns/dnsmadeeasy/dnsmadeeasy.go +++ b/providers/dns/dnsmadeeasy/dnsmadeeasy.go @@ -15,6 +15,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/dnsmadeeasy/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -112,7 +113,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, fmt.Errorf("dnsmadeeasy: %w", err) } - client.HTTPClient = config.HTTPClient + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + client.BaseURL, err = url.Parse(baseURL) if err != nil { return nil, err diff --git a/providers/dns/dnspod/dnspod.go b/providers/dns/dnspod/dnspod.go index ab8f20c8d..46893fe5a 100644 --- a/providers/dns/dnspod/dnspod.go +++ b/providers/dns/dnspod/dnspod.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/dnspod-go" ) @@ -82,7 +83,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { params := dnspod.CommonParams{LoginToken: config.LoginToken, Format: "json"} client := dnspod.NewClient(params) - client.HTTPClient = config.HTTPClient + + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/dode/dode.go b/providers/dns/dode/dode.go index 9f307f046..59ad785e8 100644 --- a/providers/dns/dode/dode.go +++ b/providers/dns/dode/dode.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/dode/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -85,6 +86,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/domeneshop/domeneshop.go b/providers/dns/domeneshop/domeneshop.go index c194f5608..fb16b442e 100644 --- a/providers/dns/domeneshop/domeneshop.go +++ b/providers/dns/domeneshop/domeneshop.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/domeneshop/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -86,6 +87,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/dreamhost/dreamhost.go b/providers/dns/dreamhost/dreamhost.go index 5b4960ee0..5ad2611d9 100644 --- a/providers/dns/dreamhost/dreamhost.go +++ b/providers/dns/dreamhost/dreamhost.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/dreamhost/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -86,6 +87,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + if config.BaseURL != "" { client.BaseURL = config.BaseURL } diff --git a/providers/dns/duckdns/duckdns.go b/providers/dns/duckdns/duckdns.go index 687f5bbac..1aae0a06c 100644 --- a/providers/dns/duckdns/duckdns.go +++ b/providers/dns/duckdns/duckdns.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/duckdns/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -86,6 +87,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/dyn/dyn.go b/providers/dns/dyn/dyn.go index 627626df6..0cd445c39 100644 --- a/providers/dns/dyn/dyn.go +++ b/providers/dns/dyn/dyn.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/dyn/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -92,6 +93,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/dyndnsfree/dyndnsfree.go b/providers/dns/dyndnsfree/dyndnsfree.go index 8c1d87aaa..13a192793 100644 --- a/providers/dns/dyndnsfree/dyndnsfree.go +++ b/providers/dns/dyndnsfree/dyndnsfree.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/dyndnsfree/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -81,6 +82,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/dynu/dynu.go b/providers/dns/dynu/dynu.go index af602ddfc..11df45281 100644 --- a/providers/dns/dynu/dynu.go +++ b/providers/dns/dynu/dynu.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/dynu/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -86,7 +87,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } client := internal.NewClient() - client.HTTPClient = tr.Wrap(config.HTTPClient) + + client.HTTPClient = clientdebug.Wrap(tr.Wrap(config.HTTPClient)) return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/easydns/easydns.go b/providers/dns/easydns/easydns.go index 7e5e219cb..c1119f3cc 100644 --- a/providers/dns/easydns/easydns.go +++ b/providers/dns/easydns/easydns.go @@ -16,6 +16,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/easydns/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -110,6 +111,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + if config.Endpoint != nil { client.BaseURL = config.Endpoint } diff --git a/providers/dns/efficientip/efficientip.go b/providers/dns/efficientip/efficientip.go index 15fa579ed..d99710920 100644 --- a/providers/dns/efficientip/efficientip.go +++ b/providers/dns/efficientip/efficientip.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/efficientip/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -113,6 +114,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/epik/epik.go b/providers/dns/epik/epik.go index 58390faa9..ef5de3c4b 100644 --- a/providers/dns/epik/epik.go +++ b/providers/dns/epik/epik.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/epik/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -86,6 +87,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/exoscale/exoscale.go b/providers/dns/exoscale/exoscale.go index fa76949d9..83baa9ade 100644 --- a/providers/dns/exoscale/exoscale.go +++ b/providers/dns/exoscale/exoscale.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" ) @@ -89,7 +90,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client, err := egoscale.NewClient( credentials.NewStaticCredentials(config.APIKey, config.APISecret), egoscale.ClientOptWithEndpoint(egoscale.Endpoint(config.Endpoint)), - egoscale.ClientOptWithHTTPClient(&http.Client{Timeout: config.HTTPTimeout}), + egoscale.ClientOptWithHTTPClient(clientdebug.Wrap(&http.Client{Timeout: config.HTTPTimeout})), egoscale.ClientOptWithUserAgent(useragent.Get()), ) if err != nil { diff --git a/providers/dns/f5xc/f5xc.go b/providers/dns/f5xc/f5xc.go index 9d74d1538..6f8a8c493 100644 --- a/providers/dns/f5xc/f5xc.go +++ b/providers/dns/f5xc/f5xc.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/platform/wait" "github.com/go-acme/lego/v4/providers/dns/f5xc/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -93,6 +94,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/freemyip/freemyip.go b/providers/dns/freemyip/freemyip.go index 7613f2b8d..fb6202e25 100644 --- a/providers/dns/freemyip/freemyip.go +++ b/providers/dns/freemyip/freemyip.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/freemyip" ) @@ -88,6 +89,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/gandi/gandi.go b/providers/dns/gandi/gandi.go index dd6622172..bb96a7d0f 100644 --- a/providers/dns/gandi/gandi.go +++ b/providers/dns/gandi/gandi.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/gandi/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -109,6 +110,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/gandiv5/gandiv5.go b/providers/dns/gandiv5/gandiv5.go index 3c35245de..cd236631c 100644 --- a/providers/dns/gandiv5/gandiv5.go +++ b/providers/dns/gandiv5/gandiv5.go @@ -15,6 +15,7 @@ import ( "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/gandiv5/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -120,6 +121,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/gcloud/googlecloud.go b/providers/dns/gcloud/googlecloud.go index 7c17abd4a..abf40ebd4 100644 --- a/providers/dns/gcloud/googlecloud.go +++ b/providers/dns/gcloud/googlecloud.go @@ -17,6 +17,7 @@ import ( "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/platform/wait" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/miekg/dns" "golang.org/x/net/context" "golang.org/x/oauth2" @@ -172,7 +173,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("googlecloud: unable to create Google Cloud DNS service: client is nil") } - svc, err := gdns.NewService(context.Background(), option.WithHTTPClient(config.HTTPClient)) + svc, err := gdns.NewService(context.Background(), option.WithHTTPClient(clientdebug.Wrap(config.HTTPClient))) if err != nil { return nil, fmt.Errorf("googlecloud: unable to create Google Cloud DNS service: %w", err) } diff --git a/providers/dns/gcore/gcore.go b/providers/dns/gcore/gcore.go index 646c5ab1c..19a548810 100644 --- a/providers/dns/gcore/gcore.go +++ b/providers/dns/gcore/gcore.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/gcore/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -89,6 +90,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/glesys/glesys.go b/providers/dns/glesys/glesys.go index 4b0d545ed..4fa689e28 100644 --- a/providers/dns/glesys/glesys.go +++ b/providers/dns/glesys/glesys.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/glesys/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -99,6 +100,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/godaddy/godaddy.go b/providers/dns/godaddy/godaddy.go index 38e470509..7c323ce0b 100644 --- a/providers/dns/godaddy/godaddy.go +++ b/providers/dns/godaddy/godaddy.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/godaddy/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -95,6 +96,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/hetzner/internal/hetznerv1/hetznerv1.go b/providers/dns/hetzner/internal/hetznerv1/hetznerv1.go index 63724712c..4fb95eb6f 100644 --- a/providers/dns/hetzner/internal/hetznerv1/hetznerv1.go +++ b/providers/dns/hetzner/internal/hetznerv1/hetznerv1.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/platform/wait" "github.com/go-acme/lego/v4/providers/dns/hetzner/internal/hetznerv1/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "golang.org/x/net/idna" ) @@ -80,7 +81,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("hetzner: credentials missing") } - client, err := internal.NewClient(internal.OAuthStaticAccessToken(config.HTTPClient, config.APIToken)) + client, err := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.APIToken), + ), + ) if err != nil { return nil, fmt.Errorf("hetzner: %w", err) } diff --git a/providers/dns/hetzner/internal/legacy/hetzner.go b/providers/dns/hetzner/internal/legacy/hetzner.go index 5fb978415..393a3d671 100644 --- a/providers/dns/hetzner/internal/legacy/hetzner.go +++ b/providers/dns/hetzner/internal/legacy/hetzner.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/hetzner/internal/legacy/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -91,6 +92,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/hostingde/hostingde.go b/providers/dns/hostingde/hostingde.go index 87fc73d34..3ad6e4a61 100644 --- a/providers/dns/hostingde/hostingde.go +++ b/providers/dns/hostingde/hostingde.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/hostingde" ) @@ -87,9 +88,17 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("hostingde: API key missing") } + client := hostingde.NewClient(config.APIKey) + + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, - client: hostingde.NewClient(config.APIKey), + client: client, recordIDs: make(map[string]string), }, nil } diff --git a/providers/dns/hostinger/hostinger.go b/providers/dns/hostinger/hostinger.go index 469e227f2..13d9ed0f8 100644 --- a/providers/dns/hostinger/hostinger.go +++ b/providers/dns/hostinger/hostinger.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/hostinger/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -82,6 +83,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/hostinger/hostinger_test.go b/providers/dns/hostinger/hostinger_test.go index 967674618..1315cee97 100644 --- a/providers/dns/hostinger/hostinger_test.go +++ b/providers/dns/hostinger/hostinger_test.go @@ -96,13 +96,13 @@ func mockBuilder() *servermock.Builder[*DNSProvider] { func(server *httptest.Server) (*DNSProvider, error) { config := NewDefaultConfig() config.APIToken = "secret" + config.HTTPClient = server.Client() p, err := NewDNSProviderConfig(config) if err != nil { return nil, err } - p.client.HTTPClient = server.Client() p.client.BaseURL, _ = url.Parse(server.URL) return p, nil diff --git a/providers/dns/hosttech/hosttech.go b/providers/dns/hosttech/hosttech.go index 22d3be7bd..20fa1d710 100644 --- a/providers/dns/hosttech/hosttech.go +++ b/providers/dns/hosttech/hosttech.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/hosttech/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -84,7 +85,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("hosttech: missing credentials") } - client := internal.NewClient(internal.OAuthStaticAccessToken(config.HTTPClient, config.APIKey)) + client := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.APIKey), + ), + ) return &DNSProvider{ config: config, diff --git a/providers/dns/httpnet/httpnet.go b/providers/dns/httpnet/httpnet.go index 56bd92712..e69c43e6d 100644 --- a/providers/dns/httpnet/httpnet.go +++ b/providers/dns/httpnet/httpnet.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/hostingde" ) @@ -91,6 +92,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client := hostingde.NewClient(config.APIKey) client.BaseURL, _ = url.Parse(hostingde.DefaultHTTPNetBaseURL) + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/httpreq/httpreq.go b/providers/dns/httpreq/httpreq.go index 8f8311e0a..12eef7b8e 100644 --- a/providers/dns/httpreq/httpreq.go +++ b/providers/dns/httpreq/httpreq.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/errutils" ) @@ -88,6 +89,7 @@ func NewDNSProvider() (*DNSProvider, error) { config.Username = env.GetOrFile(EnvUsername) config.Password = env.GetOrFile(EnvPassword) config.Endpoint = endpoint + return NewDNSProviderConfig(config) } @@ -101,6 +103,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("httpreq: the endpoint is missing") } + config.HTTPClient = clientdebug.Wrap(config.HTTPClient) + return &DNSProvider{config: config}, nil } diff --git a/providers/dns/hurricane/hurricane.go b/providers/dns/hurricane/hurricane.go index 7ce646bc9..c8b05731a 100644 --- a/providers/dns/hurricane/hurricane.go +++ b/providers/dns/hurricane/hurricane.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/hurricane/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -83,6 +84,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client := internal.NewClient(config.Credentials) + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/hyperone/hyperone.go b/providers/dns/hyperone/hyperone.go index 890f9f627..33716cfdb 100644 --- a/providers/dns/hyperone/hyperone.go +++ b/providers/dns/hyperone/hyperone.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/hyperone/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Environment variables names. @@ -96,6 +97,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/infomaniak/infomaniak.go b/providers/dns/infomaniak/infomaniak.go index 79c6f577e..9b8b53590 100644 --- a/providers/dns/infomaniak/infomaniak.go +++ b/providers/dns/infomaniak/infomaniak.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/infomaniak/internal" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) // Infomaniak API reference: https://api.infomaniak.com/doc @@ -96,7 +97,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("infomaniak: missing access token") } - client, err := internal.New(internal.OAuthStaticAccessToken(config.HTTPClient, config.AccessToken), config.APIEndpoint) + client, err := internal.New( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.AccessToken), + ), + config.APIEndpoint) if err != nil { return nil, fmt.Errorf("infomaniak: %w", err) } diff --git a/providers/dns/internal/clientdebug/.gitattributes b/providers/dns/internal/clientdebug/.gitattributes new file mode 100644 index 000000000..0ce5804f7 --- /dev/null +++ b/providers/dns/internal/clientdebug/.gitattributes @@ -0,0 +1 @@ +/testdata/** text eol=lf diff --git a/providers/dns/internal/clientdebug/client.go b/providers/dns/internal/clientdebug/client.go new file mode 100644 index 000000000..ad2a06405 --- /dev/null +++ b/providers/dns/internal/clientdebug/client.go @@ -0,0 +1,131 @@ +package clientdebug + +import ( + "fmt" + "io" + "net/http" + "net/http/httputil" + "os" + "regexp" + "strconv" + "strings" + + "github.com/go-acme/lego/v4/platform/config/env" +) + +const replacement = "***" + +type Option func(*DumpTransport) + +func WithEnvKeys(keys ...string) Option { + return func(d *DumpTransport) { + for _, key := range keys { + v := strings.TrimSpace(env.GetOrFile(key)) + if v == "" { + continue + } + + d.replacements = append(d.replacements, v, replacement) + } + } +} + +func WithValues(values ...string) Option { + return func(d *DumpTransport) { + for _, value := range values { + d.replacements = append(d.replacements, value, replacement) + } + } +} + +func WithHeaders(keys ...string) Option { + return func(d *DumpTransport) { + d.regexps = append(d.regexps, + regexp.MustCompile(fmt.Sprintf(`(?im)^(%s):.+$`, strings.Join(keys, "|")))) + } +} + +type DumpTransport struct { + rt http.RoundTripper + + replacements []string + replacer *strings.Replacer + + regexps []*regexp.Regexp + + writer io.Writer +} + +func NewDumpTransport(rt http.RoundTripper, opts ...Option) *DumpTransport { + if rt == nil { + rt = http.DefaultTransport + } + + d := &DumpTransport{ + rt: rt, + writer: os.Stdout, + } + + for _, opt := range opts { + opt(d) + } + + d.regexps = append(d.regexps, + regexp.MustCompile(`(?im)^(Authorization):.+$`), + regexp.MustCompile(`(?im)^(Token|X-Token):.+$`), + regexp.MustCompile(`(?im)^(Auth-Token|X-Auth-Token):.+$`), + regexp.MustCompile(`(?im)^(Api-Key|X-Api-Key|X-Api-Secret):.+$`), + ) + + if len(d.replacements) > 0 { + d.replacer = strings.NewReplacer(d.replacements...) + } + + return d +} + +func (d *DumpTransport) RoundTrip(h *http.Request) (*http.Response, error) { + data, _ := httputil.DumpRequestOut(h, true) + + _, _ = fmt.Fprintln(d.writer, "[HTTP Request]") + _, _ = fmt.Fprintln(d.writer, d.redact(data)) + + resp, err := d.rt.RoundTrip(h) + + data, _ = httputil.DumpResponse(resp, true) + + _, _ = fmt.Fprintln(d.writer, "[HTTP Response]") + _, _ = fmt.Fprintln(d.writer, d.redact(data)) + + return resp, err +} + +func (d *DumpTransport) redact(content []byte) string { + data := string(content) + + for _, r := range d.regexps { + data = r.ReplaceAllString(data, "$1: "+replacement) + } + + if d.replacer == nil { + return data + } + + return d.replacer.Replace(data) +} + +// Wrap wraps an HTTP client Transport with the [DumpTransport]. +func Wrap(client *http.Client, opts ...Option) *http.Client { + val, found := os.LookupEnv("LEGO_DEBUG_DNS_API_HTTP_CLIENT") + if !found { + return client + } + + if ok, _ := strconv.ParseBool(val); !ok { + return client + } + + client.Transport = NewDumpTransport(client.Transport, opts...) + + return client +} diff --git a/providers/dns/internal/clientdebug/client_test.go b/providers/dns/internal/clientdebug/client_test.go new file mode 100644 index 000000000..e467cf8f9 --- /dev/null +++ b/providers/dns/internal/clientdebug/client_test.go @@ -0,0 +1,168 @@ +package clientdebug + +import ( + "bytes" + "io" + "net/http" + "net/http/httptest" + "net/url" + "path/filepath" + "strings" + "testing" + "text/template" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestWrap_redact_env_vars(t *testing.T) { + t.Setenv("LEGO_DEBUG_DNS_API_HTTP_CLIENT", "true") + + t.Setenv("MY_VAR_01", "env-aaaa-aaaa") + t.Setenv("MY_VAR_02", "query-aaaa-aaaa") + t.Setenv("MY_VAR_03", "path-aaaa-aaaa") + t.Setenv("MY_VAR_04", "request-body-aaaa-aaaa") + t.Setenv("MY_VAR_05", "request-header-aaaa-aaaa") + t.Setenv("MY_VAR_06", "response-body-aaaa-aaaa") + + buf := bytes.NewBufferString("") + + server, client, req := setupTest(t, buf, + WithEnvKeys("MY_VAR_01", "MY_VAR_02", "MY_VAR_03", "MY_VAR_04", "MY_VAR_05", "MY_VAR_06"), + ) + + resp, err := client.Transport.RoundTrip(req) + require.NoError(t, err) + + assert.Equal(t, http.StatusOK, resp.StatusCode) + + assertDump(t, server, buf, "env_vars.txt") +} + +func TestWrap_redact_headers(t *testing.T) { + t.Setenv("LEGO_DEBUG_DNS_API_HTTP_CLIENT", "true") + + buf := bytes.NewBufferString("") + + server, client, req := setupTest(t, buf, + WithHeaders("Secret-Request-Header", "Super-Secret-Request-Header", "Secret-Response-Header"), + ) + + resp, err := client.Transport.RoundTrip(req) + require.NoError(t, err) + + assert.Equal(t, http.StatusOK, resp.StatusCode) + + assertDump(t, server, buf, "headers.txt") +} + +func TestWrap_redact_values(t *testing.T) { + t.Setenv("LEGO_DEBUG_DNS_API_HTTP_CLIENT", "true") + + buf := bytes.NewBufferString("") + + server, client, req := setupTest(t, buf, + WithValues("query-aaaa-aaaa", "path-aaaa-aaaa", "request-body-aaaa-aaaa"), + ) + + resp, err := client.Transport.RoundTrip(req) + require.NoError(t, err) + + assert.Equal(t, http.StatusOK, resp.StatusCode) + + assertDump(t, server, buf, "values.txt") +} + +func fakeRequest(t *testing.T, baseURL string) *http.Request { + t.Helper() + + endpoint, err := url.Parse(baseURL) + require.NoError(t, err) + + query := endpoint.Query() + query.Set("foo", "query-aaaa-aaaa") + endpoint.RawQuery = query.Encode() + + endpoint = endpoint.JoinPath("path-aaaa-aaaa") + + body := `{ + "foo": "request-body-aaaa-aaaa" +} +` + + req := httptest.NewRequest(http.MethodGet, endpoint.String(), bytes.NewBufferString(body)) + + req.Header.Set("X-Authorization", "not-redacted") + + req.Header.Set("Secret-Request-Header", "request-header-aaaa-aaaa") + req.Header.Set("Super-Secret-Request-Header", "env-aaaa-aaaa") + + req.Header.Set("Authorization", "header-aaaa-0000") + req.Header.Set("Token", "header-aaaa-0001") + req.Header.Set("X-Token", "header-aaaa-0002") + req.Header.Set("Auth-Token", "header-aaaa-0003") + req.Header.Set("X-Auth-Token", "header-aaaa-0004") + req.Header.Set("Api-Key", "header-aaaa-0006") + req.Header.Set("X-Api-Key", "header-aaaa-0007") + req.Header.Set("X-Api-Secret", "header-aaaa-0008") + + req.SetBasicAuth("user", "secret") + + return req +} + +func fakeResponse() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Secret-Response-Header", "response-header-aaaa-aaaa") + _, _ = w.Write([]byte(`{ + "bar": "response-body-aaaa-aaaa" +}`, + )) + } +} + +func withWriter(w io.Writer) Option { + return func(d *DumpTransport) { + if w != nil { + d.writer = w + } + } +} + +func setupTest(t *testing.T, buf io.Writer, opts ...Option) (*httptest.Server, *http.Client, *http.Request) { + t.Helper() + + server := httptest.NewServer(fakeResponse()) + + opts = append(opts, withWriter(buf)) + + client := Wrap(server.Client(), opts...) + + req := fakeRequest(t, server.URL) + + return server, client, req +} + +func assertDump(t *testing.T, server *httptest.Server, actual *bytes.Buffer, filename string) { + t.Helper() + + tmpl, err := template.New(filename).ParseFiles(filepath.Join("testdata", filename)) + require.NoError(t, err) + + expected := bytes.NewBufferString("") + + location, err := time.LoadLocation("GMT") + require.NoError(t, err) + + baseURL, err := url.Parse(server.URL) + require.NoError(t, err) + + err = tmpl.Execute(expected, map[string]string{ + "Host": baseURL.Host, + "Date": time.Now().In(location).Format(time.RFC1123), + }) + require.NoError(t, err) + + assert.Equal(t, expected.String(), strings.ReplaceAll(actual.String(), "\r", "")) +} diff --git a/providers/dns/internal/clientdebug/testdata/env_vars.txt b/providers/dns/internal/clientdebug/testdata/env_vars.txt new file mode 100644 index 000000000..a2697850e --- /dev/null +++ b/providers/dns/internal/clientdebug/testdata/env_vars.txt @@ -0,0 +1,32 @@ +[HTTP Request] +GET /***?foo=*** HTTP/1.1 +Host: {{ .Host }} +User-Agent: Go-http-client/1.1 +Content-Length: 37 +Api-Key: *** +Auth-Token: *** +Authorization: *** +Secret-Request-Header: *** +Super-Secret-Request-Header: *** +Token: *** +X-Api-Key: *** +X-Api-Secret: *** +X-Auth-Token: *** +X-Authorization: not-redacted +X-Token: *** +Accept-Encoding: gzip + +{ + "foo": "***" +} + +[HTTP Response] +HTTP/1.1 200 OK +Content-Length: 37 +Content-Type: text/plain; charset=utf-8 +Date: {{ .Date }} +Secret-Response-Header: response-header-aaaa-aaaa + +{ + "bar": "***" +} diff --git a/providers/dns/internal/clientdebug/testdata/headers.txt b/providers/dns/internal/clientdebug/testdata/headers.txt new file mode 100644 index 000000000..fe803fb22 --- /dev/null +++ b/providers/dns/internal/clientdebug/testdata/headers.txt @@ -0,0 +1,32 @@ +[HTTP Request] +GET /path-aaaa-aaaa?foo=query-aaaa-aaaa HTTP/1.1 +Host: {{ .Host }} +User-Agent: Go-http-client/1.1 +Content-Length: 37 +Api-Key: *** +Auth-Token: *** +Authorization: *** +Secret-Request-Header: *** +Super-Secret-Request-Header: *** +Token: *** +X-Api-Key: *** +X-Api-Secret: *** +X-Auth-Token: *** +X-Authorization: not-redacted +X-Token: *** +Accept-Encoding: gzip + +{ + "foo": "request-body-aaaa-aaaa" +} + +[HTTP Response] +HTTP/1.1 200 OK +Content-Length: 37 +Content-Type: text/plain; charset=utf-8 +Date: {{ .Date }} +Secret-Response-Header: *** + +{ + "bar": "response-body-aaaa-aaaa" +} diff --git a/providers/dns/internal/clientdebug/testdata/values.txt b/providers/dns/internal/clientdebug/testdata/values.txt new file mode 100644 index 000000000..b40f51f14 --- /dev/null +++ b/providers/dns/internal/clientdebug/testdata/values.txt @@ -0,0 +1,32 @@ +[HTTP Request] +GET /***?foo=*** HTTP/1.1 +Host: {{ .Host }} +User-Agent: Go-http-client/1.1 +Content-Length: 37 +Api-Key: *** +Auth-Token: *** +Authorization: *** +Secret-Request-Header: request-header-aaaa-aaaa +Super-Secret-Request-Header: env-aaaa-aaaa +Token: *** +X-Api-Key: *** +X-Api-Secret: *** +X-Auth-Token: *** +X-Authorization: not-redacted +X-Token: *** +Accept-Encoding: gzip + +{ + "foo": "***" +} + +[HTTP Response] +HTTP/1.1 200 OK +Content-Length: 37 +Content-Type: text/plain; charset=utf-8 +Date: {{ .Date }} +Secret-Response-Header: response-header-aaaa-aaaa + +{ + "bar": "response-body-aaaa-aaaa" +} diff --git a/providers/dns/internetbs/internetbs.go b/providers/dns/internetbs/internetbs.go index 9d6c17676..e8cb868d2 100644 --- a/providers/dns/internetbs/internetbs.go +++ b/providers/dns/internetbs/internetbs.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internetbs/internal" ) @@ -88,6 +89,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/ionos/ionos.go b/providers/dns/ionos/ionos.go index 394def027..1c2bf118d 100644 --- a/providers/dns/ionos/ionos.go +++ b/providers/dns/ionos/ionos.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/ionos/internal" ) @@ -96,6 +97,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/ipv64/ipv64.go b/providers/dns/ipv64/ipv64.go index 6e8d1c5bb..078fe5ca1 100644 --- a/providers/dns/ipv64/ipv64.go +++ b/providers/dns/ipv64/ipv64.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/ipv64/internal" "github.com/miekg/dns" ) @@ -85,6 +86,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/iwantmyname/iwantmyname.go b/providers/dns/iwantmyname/iwantmyname.go index 2b53377ed..dd3e9fc1a 100644 --- a/providers/dns/iwantmyname/iwantmyname.go +++ b/providers/dns/iwantmyname/iwantmyname.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/iwantmyname/internal" ) @@ -88,6 +89,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/joker/provider_dmapi.go b/providers/dns/joker/provider_dmapi.go index 5c623467a..7b32ce804 100644 --- a/providers/dns/joker/provider_dmapi.go +++ b/providers/dns/joker/provider_dmapi.go @@ -10,6 +10,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/joker/internal/dmapi" ) @@ -66,6 +67,8 @@ func newDmapiProviderConfig(config *Config) (*dmapiProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &dmapiProvider{config: config, client: client}, nil } diff --git a/providers/dns/joker/provider_svc.go b/providers/dns/joker/provider_svc.go index 991772fe7..f4d8fcf3f 100644 --- a/providers/dns/joker/provider_svc.go +++ b/providers/dns/joker/provider_svc.go @@ -9,6 +9,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/joker/internal/svc" ) @@ -47,6 +48,8 @@ func newSvcProviderConfig(config *Config) (*svcProvider, error) { client := svc.NewClient(config.Username, config.Password) + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &svcProvider{config: config, client: client}, nil } diff --git a/providers/dns/keyhelp/keyhelp.go b/providers/dns/keyhelp/keyhelp.go index dfe3af556..cbf641cfe 100644 --- a/providers/dns/keyhelp/keyhelp.go +++ b/providers/dns/keyhelp/keyhelp.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/keyhelp/internal" ) @@ -88,6 +89,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/liara/liara.go b/providers/dns/liara/liara.go index a0437b0eb..7894afc98 100644 --- a/providers/dns/liara/liara.go +++ b/providers/dns/liara/liara.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/liara/internal" "github.com/hashicorp/go-retryablehttp" ) @@ -105,7 +106,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } retryClient.Logger = log.Logger - client := internal.NewClient(internal.OAuthStaticAccessToken(retryClient.StandardClient(), config.APIKey)) + client := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(retryClient.StandardClient(), config.APIKey), + ), + ) return &DNSProvider{ config: config, diff --git a/providers/dns/limacity/limacity.go b/providers/dns/limacity/limacity.go index b403ecedf..502208f2a 100644 --- a/providers/dns/limacity/limacity.go +++ b/providers/dns/limacity/limacity.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/limacity/internal" ) @@ -89,6 +90,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client := internal.NewClient(config.APIKey) + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/linode/linode.go b/providers/dns/linode/linode.go index 6e5951d71..449c84a1a 100644 --- a/providers/dns/linode/linode.go +++ b/providers/dns/linode/linode.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" "github.com/linode/linodego" "golang.org/x/oauth2" @@ -102,7 +103,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { }, } - client := linodego.NewClient(oauth2Client) + client := linodego.NewClient(clientdebug.Wrap(oauth2Client)) client.SetUserAgent(useragent.Get()) return &DNSProvider{config: config, client: &client}, nil diff --git a/providers/dns/loopia/loopia.go b/providers/dns/loopia/loopia.go index 8389ae5f6..be3416ddf 100644 --- a/providers/dns/loopia/loopia.go +++ b/providers/dns/loopia/loopia.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/loopia/internal" ) @@ -113,6 +114,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + if config.BaseURL != "" { client.BaseURL = config.BaseURL } diff --git a/providers/dns/luadns/luadns.go b/providers/dns/luadns/luadns.go index 026a0da70..02108ce62 100644 --- a/providers/dns/luadns/luadns.go +++ b/providers/dns/luadns/luadns.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/luadns/internal" ) @@ -100,6 +101,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/mailinabox/mailinabox.go b/providers/dns/mailinabox/mailinabox.go index 3ea8a9f29..cf6202a92 100644 --- a/providers/dns/mailinabox/mailinabox.go +++ b/providers/dns/mailinabox/mailinabox.go @@ -5,11 +5,13 @@ import ( "context" "errors" "fmt" + "net/http" "time" "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/mailinabox" ) @@ -23,6 +25,7 @@ const ( EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT" EnvPollingInterval = envNamespace + "POLLING_INTERVAL" + EnvHTTPTimeout = envNamespace + "HTTP_TIMEOUT" ) var _ challenge.ProviderTimeout = (*DNSProvider)(nil) @@ -34,6 +37,7 @@ type Config struct { BaseURL string PropagationTimeout time.Duration PollingInterval time.Duration + HTTPClient *http.Client } // NewDefaultConfig returns a default configuration for the DNSProvider. @@ -41,6 +45,9 @@ func NewDefaultConfig() *Config { return &Config{ PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 120*time.Second), PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, 4*time.Second), + HTTPClient: &http.Client{ + Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), + }, } } @@ -81,7 +88,13 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("mailinabox: missing base URL") } - client, err := mailinabox.New(config.BaseURL, config.Email, config.Password) + if config.HTTPClient == nil { + config.HTTPClient = &http.Client{Timeout: 30 * time.Second} + } + + config.HTTPClient = clientdebug.Wrap(config.HTTPClient) + + client, err := mailinabox.New(config.BaseURL, config.Email, config.Password, mailinabox.WithHTTPClient(config.HTTPClient)) if err != nil { return nil, fmt.Errorf("mailinabox: %w", err) } diff --git a/providers/dns/mailinabox/mailinabox.toml b/providers/dns/mailinabox/mailinabox.toml index 4b30dd9e2..e0072ebdd 100644 --- a/providers/dns/mailinabox/mailinabox.toml +++ b/providers/dns/mailinabox/mailinabox.toml @@ -19,6 +19,7 @@ lego --email you@example.com --dns mailinabox -d '*.example.com' -d example.com [Configuration.Additional] MAILINABOX_POLLING_INTERVAL = "Time between DNS propagation check in seconds (Default: 4)" MAILINABOX_PROPAGATION_TIMEOUT = "Maximum waiting time for DNS propagation in seconds (Default: 120)" + MAILINABOX_HTTP_TIMEOUT = "API request timeout in seconds (Default: 30)" [Links] API = "https://mailinabox.email/api-docs.html" diff --git a/providers/dns/manageengine/internal/client.go b/providers/dns/manageengine/internal/client.go index b360840f0..debb62812 100644 --- a/providers/dns/manageengine/internal/client.go +++ b/providers/dns/manageengine/internal/client.go @@ -24,12 +24,12 @@ type Client struct { } // NewClient creates a new Client. -func NewClient(ctx context.Context, clientID, clientSecret string) *Client { +func NewClient(hc *http.Client) *Client { baseURL, _ := url.Parse(defaultBaseURL) return &Client{ baseURL: baseURL, - httpClient: createOAuthClient(ctx, clientID, clientSecret), + httpClient: hc, } } diff --git a/providers/dns/manageengine/internal/client_test.go b/providers/dns/manageengine/internal/client_test.go index 0c18a245f..25d1730f6 100644 --- a/providers/dns/manageengine/internal/client_test.go +++ b/providers/dns/manageengine/internal/client_test.go @@ -1,7 +1,6 @@ package internal import ( - "context" "net/http" "net/http/httptest" "net/url" @@ -15,9 +14,8 @@ import ( func mockBuilder() *servermock.Builder[*Client] { return servermock.NewBuilder[*Client]( func(server *httptest.Server) (*Client, error) { - client := NewClient(context.Background(), "abc", "secret") + client := NewClient(server.Client()) - client.httpClient = server.Client() client.baseURL, _ = url.Parse(server.URL) return client, nil diff --git a/providers/dns/manageengine/internal/identity.go b/providers/dns/manageengine/internal/identity.go index 66a659188..ec28121e4 100644 --- a/providers/dns/manageengine/internal/identity.go +++ b/providers/dns/manageengine/internal/identity.go @@ -9,7 +9,7 @@ import ( const defaultAuthURL = "https://clouddns.manageengine.com/oauth2/token/" -func createOAuthClient(ctx context.Context, clientID, clientSecret string) *http.Client { +func CreateOAuthClient(ctx context.Context, clientID, clientSecret string) *http.Client { config := &clientcredentials.Config{ TokenURL: defaultAuthURL, ClientID: clientID, diff --git a/providers/dns/manageengine/manageengine.go b/providers/dns/manageengine/manageengine.go index f26ae33b5..3863a6597 100644 --- a/providers/dns/manageengine/manageengine.go +++ b/providers/dns/manageengine/manageengine.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/manageengine/internal" ) @@ -75,11 +76,13 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("manageengine: credentials missing") } - client := internal.NewClient(context.Background(), config.ClientID, config.ClientSecret) - return &DNSProvider{ config: config, - client: client, + client: internal.NewClient( + clientdebug.Wrap( + internal.CreateOAuthClient(context.Background(), config.ClientID, config.ClientSecret), + ), + ), }, nil } diff --git a/providers/dns/metaregistrar/metaregistrar.go b/providers/dns/metaregistrar/metaregistrar.go index 28526fcb4..7a601ef21 100644 --- a/providers/dns/metaregistrar/metaregistrar.go +++ b/providers/dns/metaregistrar/metaregistrar.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/metaregistrar/internal" ) @@ -82,6 +83,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/mijnhost/mijnhost.go b/providers/dns/mijnhost/mijnhost.go index 515caa2f6..adb3e9ce3 100644 --- a/providers/dns/mijnhost/mijnhost.go +++ b/providers/dns/mijnhost/mijnhost.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/mijnhost/internal" ) @@ -86,6 +87,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client := internal.NewClient(config.APIKey) + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/mittwald/mittwald.go b/providers/dns/mittwald/mittwald.go index 2c3c5a8f3..f60745659 100644 --- a/providers/dns/mittwald/mittwald.go +++ b/providers/dns/mittwald/mittwald.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/mittwald/internal" ) @@ -92,9 +93,17 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, fmt.Errorf("mittwald: invalid TTL, TTL (%d) must be greater than %d", config.TTL, minTTL) } + client := internal.NewClient(config.Token) + + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, - client: internal.NewClient(config.Token), + client: client, zoneIDs: map[string]string{}, }, nil } diff --git a/providers/dns/myaddr/myaddr.go b/providers/dns/myaddr/myaddr.go index df280f2f4..fb7ea66a0 100644 --- a/providers/dns/myaddr/myaddr.go +++ b/providers/dns/myaddr/myaddr.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/myaddr/internal" ) @@ -91,6 +92,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/mydnsjp/mydnsjp.go b/providers/dns/mydnsjp/mydnsjp.go index d0565e8bd..934fe764a 100644 --- a/providers/dns/mydnsjp/mydnsjp.go +++ b/providers/dns/mydnsjp/mydnsjp.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/mydnsjp/internal" ) @@ -79,9 +80,17 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("mydnsjp: some credentials information are missing") } + client := internal.NewClient(config.MasterID, config.Password) + + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, - client: internal.NewClient(config.MasterID, config.Password), + client: client, }, nil } diff --git a/providers/dns/mythicbeasts/mythicbeasts.go b/providers/dns/mythicbeasts/mythicbeasts.go index ae8f72d33..30d1eaa3e 100644 --- a/providers/dns/mythicbeasts/mythicbeasts.go +++ b/providers/dns/mythicbeasts/mythicbeasts.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/mythicbeasts/internal" ) @@ -117,6 +118,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/namecheap/namecheap.go b/providers/dns/namecheap/namecheap.go index 48b9492c4..e21ddf556 100644 --- a/providers/dns/namecheap/namecheap.go +++ b/providers/dns/namecheap/namecheap.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/namecheap/internal" "golang.org/x/net/publicsuffix" ) @@ -127,6 +128,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/namedotcom/namedotcom.go b/providers/dns/namedotcom/namedotcom.go index 789599552..1c0f162de 100644 --- a/providers/dns/namedotcom/namedotcom.go +++ b/providers/dns/namedotcom/namedotcom.go @@ -10,6 +10,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/namedotcom/go/v4/namecom" ) @@ -97,7 +98,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } client := namecom.New(config.Username, config.APIToken) - client.Client = config.HTTPClient + + if config.HTTPClient != nil { + client.Client = config.HTTPClient + } + + client.Client = clientdebug.Wrap(client.Client) if config.Server != "" { client.Server = config.Server diff --git a/providers/dns/namesilo/namesilo.go b/providers/dns/namesilo/namesilo.go index 8b12821e6..e2f66f8c9 100644 --- a/providers/dns/namesilo/namesilo.go +++ b/providers/dns/namesilo/namesilo.go @@ -10,6 +10,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/namesilo" ) @@ -84,7 +85,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("namesilo: credentials missing") } - return &DNSProvider{client: namesilo.NewClient(config.APIKey), config: config}, nil + client := namesilo.NewClient(config.APIKey) + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + + return &DNSProvider{client: client, config: config}, nil } // Present creates a TXT record to fulfill the dns-01 challenge. diff --git a/providers/dns/nearlyfreespeech/nearlyfreespeech.go b/providers/dns/nearlyfreespeech/nearlyfreespeech.go index 464ac35d0..af5e5363c 100644 --- a/providers/dns/nearlyfreespeech/nearlyfreespeech.go +++ b/providers/dns/nearlyfreespeech/nearlyfreespeech.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/nearlyfreespeech/internal" ) @@ -92,6 +93,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/netcup/netcup.go b/providers/dns/netcup/netcup.go index f0544bbcd..13b329e07 100644 --- a/providers/dns/netcup/netcup.go +++ b/providers/dns/netcup/netcup.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/netcup/internal" ) @@ -92,7 +93,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, fmt.Errorf("netcup: %w", err) } - client.HTTPClient = config.HTTPClient + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/netlify/netlify.go b/providers/dns/netlify/netlify.go index 1d4c78f4f..b95a1a128 100644 --- a/providers/dns/netlify/netlify.go +++ b/providers/dns/netlify/netlify.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/netlify/internal" ) @@ -84,7 +85,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("netlify: incomplete credentials, missing token") } - client := internal.NewClient(internal.OAuthStaticAccessToken(config.HTTPClient, config.Token)) + client := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.Token), + ), + ) return &DNSProvider{ config: config, diff --git a/providers/dns/nicmanager/nicmanager.go b/providers/dns/nicmanager/nicmanager.go index 2a5742373..ff9a20125 100644 --- a/providers/dns/nicmanager/nicmanager.go +++ b/providers/dns/nicmanager/nicmanager.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/nicmanager/internal" ) @@ -128,6 +129,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/nicru/nicru.go b/providers/dns/nicru/nicru.go index 9320f94c2..cf4255bdb 100644 --- a/providers/dns/nicru/nicru.go +++ b/providers/dns/nicru/nicru.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/nicru/internal" ) @@ -90,7 +91,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, fmt.Errorf("nicru: %w", err) } - client, err := internal.NewClient(oauthClient) + client, err := internal.NewClient(clientdebug.Wrap(oauthClient)) if err != nil { return nil, fmt.Errorf("nicru: unable to build API client: %w", err) } diff --git a/providers/dns/nifcloud/nifcloud.go b/providers/dns/nifcloud/nifcloud.go index 415921b52..2310d3805 100644 --- a/providers/dns/nifcloud/nifcloud.go +++ b/providers/dns/nifcloud/nifcloud.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/platform/wait" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/nifcloud/internal" ) @@ -94,6 +95,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + if config.BaseURL != "" { baseURL, err := url.Parse(config.BaseURL) if err != nil { diff --git a/providers/dns/njalla/njalla.go b/providers/dns/njalla/njalla.go index b08ce69de..f35e32f37 100644 --- a/providers/dns/njalla/njalla.go +++ b/providers/dns/njalla/njalla.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/njalla/internal" "github.com/miekg/dns" ) @@ -90,6 +91,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/nodion/nodion.go b/providers/dns/nodion/nodion.go index 1fdc8b87d..55af3a847 100644 --- a/providers/dns/nodion/nodion.go +++ b/providers/dns/nodion/nodion.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/nodion" ) @@ -93,6 +94,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/ns1/ns1.go b/providers/dns/ns1/ns1.go index c3bf168cb..83faf7e5e 100644 --- a/providers/dns/ns1/ns1.go +++ b/providers/dns/ns1/ns1.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "gopkg.in/ns1/ns1-go.v2/rest" "gopkg.in/ns1/ns1-go.v2/rest/model/dns" ) @@ -80,7 +81,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("ns1: credentials missing") } - client := rest.NewClient(config.HTTPClient, rest.SetAPIKey(config.APIKey)) + if config.HTTPClient == nil { + // Because the rest.NewClient uses the http.DefaultClient. + config.HTTPClient = &http.Client{Timeout: 10 * time.Second} + } + + client := rest.NewClient(clientdebug.Wrap(config.HTTPClient), rest.SetAPIKey(config.APIKey)) return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/octenium/octenium.go b/providers/dns/octenium/octenium.go index 1ace82bf5..383523575 100644 --- a/providers/dns/octenium/octenium.go +++ b/providers/dns/octenium/octenium.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/octenium/internal" "github.com/hashicorp/go-retryablehttp" ) @@ -89,11 +90,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { retryClient := retryablehttp.NewClient() retryClient.RetryMax = 5 - if config.HTTPClient != nil { - retryClient.HTTPClient = config.HTTPClient - } + retryClient.HTTPClient = client.HTTPClient retryClient.Logger = log.Logger + client.HTTPClient = clientdebug.Wrap(retryClient.StandardClient()) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/octenium/octenium_test.go b/providers/dns/octenium/octenium_test.go index c3d0ef558..a6c801bad 100644 --- a/providers/dns/octenium/octenium_test.go +++ b/providers/dns/octenium/octenium_test.go @@ -131,13 +131,13 @@ func mockBuilder() *servermock.Builder[*DNSProvider] { func(server *httptest.Server) (*DNSProvider, error) { config := NewDefaultConfig() config.APIKey = "secret" + config.HTTPClient = server.Client() p, err := NewDNSProviderConfig(config) if err != nil { return nil, err } - p.client.HTTPClient = server.Client() p.client.BaseURL, _ = url.Parse(server.URL) return p, nil diff --git a/providers/dns/oraclecloud/oraclecloud.go b/providers/dns/oraclecloud/oraclecloud.go index 47902568c..4ef891322 100644 --- a/providers/dns/oraclecloud/oraclecloud.go +++ b/providers/dns/oraclecloud/oraclecloud.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/oci-go-sdk/common/v1065" "github.com/nrdcg/oci-go-sdk/common/v1065/auth" "github.com/nrdcg/oci-go-sdk/dns/v1065" @@ -147,7 +148,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } if config.HTTPClient != nil { - client.HTTPClient = config.HTTPClient + client.HTTPClient = clientdebug.Wrap(config.HTTPClient) } return &DNSProvider{client: &client, config: config}, nil diff --git a/providers/dns/otc/otc.go b/providers/dns/otc/otc.go index a6374f822..65b362124 100644 --- a/providers/dns/otc/otc.go +++ b/providers/dns/otc/otc.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/otc/internal" ) @@ -130,6 +131,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/ovh/ovh.go b/providers/dns/ovh/ovh.go index c70e943bc..7ef89eff2 100644 --- a/providers/dns/ovh/ovh.go +++ b/providers/dns/ovh/ovh.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" "github.com/ovh/go-ovh/ovh" ) @@ -277,5 +278,11 @@ func newClient(config *Config) (*ovh.Client, error) { client.UserAgent = useragent.Get() + if config.HTTPClient != nil { + client.Client = config.HTTPClient + } + + client.Client = clientdebug.Wrap(client.Client) + return client, nil } diff --git a/providers/dns/pdns/pdns.go b/providers/dns/pdns/pdns.go index ec0ae2a70..0d3c6fdea 100644 --- a/providers/dns/pdns/pdns.go +++ b/providers/dns/pdns/pdns.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/pdns/internal" ) @@ -103,6 +104,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client := internal.NewClient(config.Host, config.ServerName, config.APIVersion, config.APIKey) + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + if config.APIVersion <= 0 { err := client.SetAPIVersion(context.Background()) if err != nil { diff --git a/providers/dns/plesk/plesk.go b/providers/dns/plesk/plesk.go index b7a7ebf77..f377cb8ac 100644 --- a/providers/dns/plesk/plesk.go +++ b/providers/dns/plesk/plesk.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/plesk/internal" ) @@ -107,6 +108,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/porkbun/porkbun.go b/providers/dns/porkbun/porkbun.go index 44bf1857b..4805418ee 100644 --- a/providers/dns/porkbun/porkbun.go +++ b/providers/dns/porkbun/porkbun.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/porkbun" ) @@ -100,6 +101,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/rackspace/rackspace.go b/providers/dns/rackspace/rackspace.go index b9ce8f6e3..f796a494d 100644 --- a/providers/dns/rackspace/rackspace.go +++ b/providers/dns/rackspace/rackspace.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/rackspace/internal" ) @@ -118,6 +119,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/rainyun/rainyun.go b/providers/dns/rainyun/rainyun.go index 43ef9cb1b..a4d1c4035 100644 --- a/providers/dns/rainyun/rainyun.go +++ b/providers/dns/rainyun/rainyun.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/rainyun/internal" ) @@ -85,6 +86,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/rcodezero/rcodezero.go b/providers/dns/rcodezero/rcodezero.go index 93f3e957a..010a6dadc 100644 --- a/providers/dns/rcodezero/rcodezero.go +++ b/providers/dns/rcodezero/rcodezero.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/rcodezero/internal" ) @@ -86,6 +87,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/regfish/regfish.go b/providers/dns/regfish/regfish.go index 6a8ccee98..fb2ffaeb6 100644 --- a/providers/dns/regfish/regfish.go +++ b/providers/dns/regfish/regfish.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" regfishapi "github.com/regfish/regfish-dnsapi-go" ) @@ -84,6 +85,15 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client := regfishapi.NewClient(config.APIKey) + if config.HTTPClient != nil { + client.Client = config.HTTPClient + } else { + // Because the regfishapi.NewClient uses an empty http.Client. + client.Client = &http.Client{Timeout: 30 * time.Second} + } + + client.Client = clientdebug.Wrap(client.Client) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/regru/regru.go b/providers/dns/regru/regru.go index 1501863bd..b06b355c1 100644 --- a/providers/dns/regru/regru.go +++ b/providers/dns/regru/regru.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/regru/internal" ) @@ -97,6 +98,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + if config.TLSCert != "" || config.TLSKey != "" { if config.TLSCert == "" { return nil, errors.New("regru: TLS certificate is missing") diff --git a/providers/dns/rimuhosting/rimuhosting.go b/providers/dns/rimuhosting/rimuhosting.go index 9051d0add..08d7ad413 100644 --- a/providers/dns/rimuhosting/rimuhosting.go +++ b/providers/dns/rimuhosting/rimuhosting.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/rimuhosting" ) @@ -87,6 +88,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/safedns/safedns.go b/providers/dns/safedns/safedns.go index d979108a6..ce5c27672 100644 --- a/providers/dns/safedns/safedns.go +++ b/providers/dns/safedns/safedns.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/safedns/internal" "github.com/miekg/dns" ) @@ -90,6 +91,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/sakuracloud/sakuracloud.go b/providers/dns/sakuracloud/sakuracloud.go index 940b6ac5c..fad675611 100644 --- a/providers/dns/sakuracloud/sakuracloud.go +++ b/providers/dns/sakuracloud/sakuracloud.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" client "github.com/sacloud/api-client-go" "github.com/sacloud/iaas-api-go" @@ -101,7 +102,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { Options: &client.Options{ AccessToken: config.Token, AccessTokenSecret: config.Secret, - HttpClient: config.HTTPClient, + HttpClient: clientdebug.Wrap(config.HTTPClient), UserAgent: fmt.Sprintf("%s %s", iaas.DefaultUserAgent, useragent.Get()), }, } diff --git a/providers/dns/scaleway/scaleway.go b/providers/dns/scaleway/scaleway.go index 5976e77a2..9d08f93b9 100644 --- a/providers/dns/scaleway/scaleway.go +++ b/providers/dns/scaleway/scaleway.go @@ -5,6 +5,7 @@ package scaleway import ( "errors" "fmt" + "net/http" "strconv" "strings" "time" @@ -12,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" scwdomain "github.com/scaleway/scaleway-sdk-go/api/domain/v2beta1" "github.com/scaleway/scaleway-sdk-go/scw" @@ -32,6 +34,7 @@ const ( EnvTTL = envNamespace + "TTL" EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT" EnvPollingInterval = envNamespace + "POLLING_INTERVAL" + EnvHTTPTimeout = envNamespace + "HTTP_TIMEOUT" ) const ( @@ -47,12 +50,14 @@ var _ challenge.ProviderTimeout = (*DNSProvider)(nil) // Config is used to configure the creation of the DNSProvider. type Config struct { - ProjectID string - Token string // TODO(ldez) rename to SecretKey in the next major. - AccessKey string + ProjectID string + Token string // TODO(ldez) rename to SecretKey in the next major. + AccessKey string + PropagationTimeout time.Duration PollingInterval time.Duration TTL int + HTTPClient *http.Client } // NewDefaultConfig returns a default configuration for the DNSProvider. @@ -62,6 +67,9 @@ func NewDefaultConfig() *Config { TTL: env.GetOneWithFallback(EnvTTL, minTTL, strconv.Atoi, altEnvName(EnvTTL)), PropagationTimeout: env.GetOneWithFallback(EnvPropagationTimeout, defaultPropagationTimeout, env.ParseSecond, altEnvName(EnvPropagationTimeout)), PollingInterval: env.GetOneWithFallback(EnvPollingInterval, defaultPollingInterval, env.ParseSecond, altEnvName(EnvPollingInterval)), + HTTPClient: &http.Client{ + Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), + }, } } @@ -107,6 +115,10 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { scw.WithUserAgent(useragent.Get()), } + if config.HTTPClient != nil { + configuration = append(configuration, scw.WithHTTPClient(clientdebug.Wrap(config.HTTPClient))) + } + if config.ProjectID != "" { configuration = append(configuration, scw.WithDefaultProjectID(config.ProjectID)) } diff --git a/providers/dns/scaleway/scaleway.toml b/providers/dns/scaleway/scaleway.toml index 21839e061..212cea295 100644 --- a/providers/dns/scaleway/scaleway.toml +++ b/providers/dns/scaleway/scaleway.toml @@ -18,6 +18,7 @@ lego --email you@example.com --dns scaleway -d '*.example.com' -d example.com ru SCW_POLLING_INTERVAL = "Time between DNS propagation check in seconds (Default: 10)" SCW_PROPAGATION_TIMEOUT = "Maximum waiting time for DNS propagation in seconds (Default: 120)" SCW_TTL = "The TTL of the TXT record used for the DNS challenge in seconds (Default: 60)" + SCW_HTTP_TIMEOUT = "API request timeout in seconds (Default: 30)" [Links] API = "https://developers.scaleway.com/en/products/domain/dns/api/" diff --git a/providers/dns/selectel/selectel.go b/providers/dns/selectel/selectel.go index c5da2215f..a7fb97cac 100644 --- a/providers/dns/selectel/selectel.go +++ b/providers/dns/selectel/selectel.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/selectel" ) @@ -92,10 +93,13 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } client := selectel.NewClient(config.Token) + if config.HTTPClient != nil { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + var err error client.BaseURL, err = url.Parse(config.BaseURL) if err != nil { diff --git a/providers/dns/selectelv2/selectelv2.go b/providers/dns/selectelv2/selectelv2.go index 2654cd742..6e3c1f42c 100644 --- a/providers/dns/selectelv2/selectelv2.go +++ b/providers/dns/selectelv2/selectelv2.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" "github.com/miekg/dns" selectelapi "github.com/selectel/domains-go/pkg/v2" @@ -134,7 +135,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { useragent.SetHeader(headers) return &DNSProvider{ - baseClient: selectelapi.NewClient(config.BaseURL, config.HTTPClient, headers), + baseClient: selectelapi.NewClient(config.BaseURL, clientdebug.Wrap(config.HTTPClient), headers), config: config, }, nil } diff --git a/providers/dns/selfhostde/selfhostde.go b/providers/dns/selfhostde/selfhostde.go index 0fea9f1d0..ccaba4647 100644 --- a/providers/dns/selfhostde/selfhostde.go +++ b/providers/dns/selfhostde/selfhostde.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/selfhostde/internal" ) @@ -132,6 +133,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/servercow/servercow.go b/providers/dns/servercow/servercow.go index 56f89f900..8583e7d9e 100644 --- a/providers/dns/servercow/servercow.go +++ b/providers/dns/servercow/servercow.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/servercow/internal" ) @@ -85,6 +86,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/shellrent/shellrent.go b/providers/dns/shellrent/shellrent.go index 488509a84..bc8809943 100644 --- a/providers/dns/shellrent/shellrent.go +++ b/providers/dns/shellrent/shellrent.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/shellrent/internal" ) @@ -103,6 +104,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/simply/simply.go b/providers/dns/simply/simply.go index d2bfb1874..434bb0d30 100644 --- a/providers/dns/simply/simply.go +++ b/providers/dns/simply/simply.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/simply/internal" ) @@ -99,6 +100,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/sonic/sonic.go b/providers/dns/sonic/sonic.go index 80f5ea295..5bda2b533 100644 --- a/providers/dns/sonic/sonic.go +++ b/providers/dns/sonic/sonic.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/sonic/internal" ) @@ -91,6 +92,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/spaceship/spaceship.go b/providers/dns/spaceship/spaceship.go index 9e8f0158e..e34c584c5 100644 --- a/providers/dns/spaceship/spaceship.go +++ b/providers/dns/spaceship/spaceship.go @@ -10,6 +10,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/spaceship/internal" ) @@ -84,6 +85,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/stackpath/internal/client.go b/providers/dns/stackpath/internal/client.go index bd11bf235..f06feb807 100644 --- a/providers/dns/stackpath/internal/client.go +++ b/providers/dns/stackpath/internal/client.go @@ -25,13 +25,13 @@ type Client struct { } // NewClient creates a new Client. -func NewClient(ctx context.Context, stackID, clientID, clientSecret string) *Client { +func NewClient(stackID string, hc *http.Client) *Client { baseURL, _ := url.Parse(defaultBaseURL) return &Client{ baseURL: baseURL, stackID: stackID, - httpClient: createOAuthClient(ctx, clientID, clientSecret), + httpClient: hc, } } diff --git a/providers/dns/stackpath/internal/client_test.go b/providers/dns/stackpath/internal/client_test.go index 5195aa973..baac84397 100644 --- a/providers/dns/stackpath/internal/client_test.go +++ b/providers/dns/stackpath/internal/client_test.go @@ -1,7 +1,6 @@ package internal import ( - "context" "net/http" "net/http/httptest" "net/url" @@ -15,8 +14,8 @@ import ( func mockBuilder() *servermock.Builder[*Client] { return servermock.NewBuilder[*Client]( func(server *httptest.Server) (*Client, error) { - client := NewClient(context.Background(), "STACK_ID", "CLIENT_ID", "CLIENT_SECRET") - client.httpClient = server.Client() + client := NewClient("STACK_ID", server.Client()) + client.baseURL, _ = url.Parse(server.URL + "/") return client, nil diff --git a/providers/dns/stackpath/internal/identity.go b/providers/dns/stackpath/internal/identity.go index 5c6e6ab17..fa3e9df07 100644 --- a/providers/dns/stackpath/internal/identity.go +++ b/providers/dns/stackpath/internal/identity.go @@ -9,7 +9,7 @@ import ( const defaultAuthURL = "https://gateway.stackpath.com/identity/v1/oauth2/token" -func createOAuthClient(ctx context.Context, clientID, clientSecret string) *http.Client { +func CreateOAuthClient(ctx context.Context, clientID, clientSecret string) *http.Client { config := &clientcredentials.Config{ TokenURL: defaultAuthURL, ClientID: clientID, diff --git a/providers/dns/stackpath/stackpath.go b/providers/dns/stackpath/stackpath.go index 6d12ce875..2e193b8a9 100644 --- a/providers/dns/stackpath/stackpath.go +++ b/providers/dns/stackpath/stackpath.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/stackpath/internal" ) @@ -86,9 +87,14 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("stackpath: stack id missing") } - client := internal.NewClient(context.Background(), config.StackID, config.ClientID, config.ClientSecret) - - return &DNSProvider{config: config, client: client}, nil + return &DNSProvider{ + config: config, + client: internal.NewClient(config.StackID, + clientdebug.Wrap( + internal.CreateOAuthClient(context.Background(), config.ClientID, config.ClientSecret), + ), + ), + }, nil } // Present creates a TXT record to fulfill the dns-01 challenge. diff --git a/providers/dns/technitium/technitium.go b/providers/dns/technitium/technitium.go index b2cf2d701..fc60c09ad 100644 --- a/providers/dns/technitium/technitium.go +++ b/providers/dns/technitium/technitium.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/technitium/internal" ) @@ -87,6 +88,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/timewebcloud/timewebcloud.go b/providers/dns/timewebcloud/timewebcloud.go index a2ab0dd65..0d3a36b46 100644 --- a/providers/dns/timewebcloud/timewebcloud.go +++ b/providers/dns/timewebcloud/timewebcloud.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/timewebcloud/internal" ) @@ -81,7 +82,11 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("timewebcloud: authentication token is missing") } - client := internal.NewClient(internal.OAuthStaticAccessToken(config.HTTPClient, config.AuthToken)) + client := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.AuthToken), + ), + ) return &DNSProvider{ config: config, diff --git a/providers/dns/transip/transip.go b/providers/dns/transip/transip.go index 779704a21..a58a1bfe0 100644 --- a/providers/dns/transip/transip.go +++ b/providers/dns/transip/transip.go @@ -4,6 +4,7 @@ package transip import ( "errors" "fmt" + "net/http" "time" "github.com/go-acme/lego/v4/challenge" @@ -23,6 +24,7 @@ const ( EnvTTL = envNamespace + "TTL" EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT" EnvPollingInterval = envNamespace + "POLLING_INTERVAL" + EnvHTTPTimeout = envNamespace + "HTTP_TIMEOUT" ) var _ challenge.ProviderTimeout = (*DNSProvider)(nil) @@ -34,6 +36,7 @@ type Config struct { PropagationTimeout time.Duration PollingInterval time.Duration TTL int64 + HTTPClient *http.Client } // NewDefaultConfig returns a default configuration for the DNSProvider. @@ -42,6 +45,9 @@ func NewDefaultConfig() *Config { TTL: int64(env.GetOrDefaultInt(EnvTTL, 10)), PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 10*time.Minute), PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, 10*time.Second), + HTTPClient: &http.Client{ + Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), + }, } } @@ -73,10 +79,19 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("transip: the configuration of the DNS provider is nil") } - client, err := gotransip.NewClient(gotransip.ClientConfiguration{ + cfg := gotransip.ClientConfiguration{ AccountName: config.AccountName, PrivateKeyPath: config.PrivateKeyPath, - }) + } + + if config.HTTPClient != nil { + cfg.HTTPClient = config.HTTPClient + } else { + // Uses an explicit default HTTP client because the desec.NewDefaultClientOptions uses the http.DefaultClient. + cfg.HTTPClient = &http.Client{Timeout: 30 * time.Second} + } + + client, err := gotransip.NewClient(cfg) if err != nil { return nil, fmt.Errorf("transip: %w", err) } diff --git a/providers/dns/transip/transip.toml b/providers/dns/transip/transip.toml index 0625f819b..a894cc3e3 100644 --- a/providers/dns/transip/transip.toml +++ b/providers/dns/transip/transip.toml @@ -18,6 +18,7 @@ lego --email you@example.com --dns transip -d '*.example.com' -d example.com run TRANSIP_POLLING_INTERVAL = "Time between DNS propagation check in seconds (Default: 10)" TRANSIP_PROPAGATION_TIMEOUT = "Maximum waiting time for DNS propagation in seconds (Default: 600)" TRANSIP_TTL = "The TTL of the TXT record used for the DNS challenge in seconds (Default: 10)" + TRANSIP_HTTP_TIMEOUT = "API request timeout in seconds (Default: 30)" [Links] API = "https://api.transip.eu/rest/docs.html" diff --git a/providers/dns/variomedia/variomedia.go b/providers/dns/variomedia/variomedia.go index 67d7b9a50..2dbf546b1 100644 --- a/providers/dns/variomedia/variomedia.go +++ b/providers/dns/variomedia/variomedia.go @@ -16,6 +16,7 @@ import ( "github.com/go-acme/lego/v4/log" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/platform/wait" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/variomedia/internal" ) @@ -92,6 +93,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/vegadns/vegadns.go b/providers/dns/vegadns/vegadns.go index 6ddb33728..6375ecc26 100644 --- a/providers/dns/vegadns/vegadns.go +++ b/providers/dns/vegadns/vegadns.go @@ -5,11 +5,13 @@ import ( "context" "errors" "fmt" + "net/http" "time" "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/nrdcg/vegadns" ) @@ -24,18 +26,21 @@ const ( EnvTTL = envNamespace + "TTL" EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT" EnvPollingInterval = envNamespace + "POLLING_INTERVAL" + EnvHTTPTimeout = envNamespace + "HTTP_TIMEOUT" ) var _ challenge.ProviderTimeout = (*DNSProvider)(nil) // Config is used to configure the creation of the DNSProvider. type Config struct { - BaseURL string - APIKey string - APISecret string + BaseURL string + APIKey string + APISecret string + PropagationTimeout time.Duration PollingInterval time.Duration TTL int + HTTPClient *http.Client } // NewDefaultConfig returns a default configuration for the DNSProvider. @@ -44,6 +49,9 @@ func NewDefaultConfig() *Config { TTL: env.GetOrDefaultInt(EnvTTL, 10), PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 12*time.Minute), PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, time.Minute), + HTTPClient: &http.Client{ + Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), + }, } } @@ -76,7 +84,16 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("vegadns: the configuration of the DNS provider is nil") } - client, err := vegadns.NewClient(config.BaseURL, vegadns.WithOAuth(config.APIKey, config.APISecret)) + if config.HTTPClient == nil { + config.HTTPClient = &http.Client{Timeout: 30 * time.Second} + } + + config.HTTPClient = clientdebug.Wrap(config.HTTPClient) + + client, err := vegadns.NewClient(config.BaseURL, + vegadns.WithOAuth(config.APIKey, config.APISecret), + vegadns.WithHTTPClient(config.HTTPClient), + ) if err != nil { return nil, fmt.Errorf("vegadns: %w", err) } diff --git a/providers/dns/vercel/vercel.go b/providers/dns/vercel/vercel.go index 9ba92e21f..447165262 100644 --- a/providers/dns/vercel/vercel.go +++ b/providers/dns/vercel/vercel.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/vercel/internal" ) @@ -86,7 +87,12 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("vercel: credentials missing") } - client := internal.NewClient(internal.OAuthStaticAccessToken(config.HTTPClient, config.AuthToken), config.TeamID) + client := internal.NewClient( + clientdebug.Wrap( + internal.OAuthStaticAccessToken(config.HTTPClient, config.AuthToken), + ), + config.TeamID, + ) return &DNSProvider{ config: config, diff --git a/providers/dns/versio/versio.go b/providers/dns/versio/versio.go index 78ddd9bac..bc999a674 100644 --- a/providers/dns/versio/versio.go +++ b/providers/dns/versio/versio.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/versio/internal" ) @@ -108,6 +109,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/vinyldns/vinyldns.go b/providers/dns/vinyldns/vinyldns.go index 098347af4..62d7c3442 100644 --- a/providers/dns/vinyldns/vinyldns.go +++ b/providers/dns/vinyldns/vinyldns.go @@ -5,12 +5,14 @@ import ( "context" "errors" "fmt" + "net/http" "strconv" "time" "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/useragent" "github.com/vinyldns/go-vinyldns/vinyldns" ) @@ -27,6 +29,7 @@ const ( EnvTTL = envNamespace + "TTL" EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT" EnvPollingInterval = envNamespace + "POLLING_INTERVAL" + EnvHTTPTimeout = envNamespace + "HTTP_TIMEOUT" ) var _ challenge.ProviderTimeout = (*DNSProvider)(nil) @@ -41,6 +44,7 @@ type Config struct { TTL int PropagationTimeout time.Duration PollingInterval time.Duration + HTTPClient *http.Client } // NewDefaultConfig returns a default configuration for the DNSProvider. @@ -49,6 +53,9 @@ func NewDefaultConfig() *Config { TTL: env.GetOrDefaultInt(EnvTTL, 30), PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 2*time.Minute), PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, 4*time.Second), + HTTPClient: &http.Client{ + Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), + }, } } @@ -97,7 +104,14 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { UserAgent: useragent.Get(), }) - client.HTTPClient.Timeout = 30 * time.Second + if config.HTTPClient != nil { + client.HTTPClient = config.HTTPClient + } else { + // For compatibility, it should be removed in v5. + client.HTTPClient.Timeout = 30 * time.Second + } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/vinyldns/vinyldns.toml b/providers/dns/vinyldns/vinyldns.toml index 8c9f1b3a6..5789d10ab 100644 --- a/providers/dns/vinyldns/vinyldns.toml +++ b/providers/dns/vinyldns/vinyldns.toml @@ -26,6 +26,7 @@ Users are required to have DELETE ACL level or zone admin permissions on the Vin VINYLDNS_POLLING_INTERVAL = "Time between DNS propagation check in seconds (Default: 4)" VINYLDNS_PROPAGATION_TIMEOUT = "Maximum waiting time for DNS propagation in seconds (Default: 120)" VINYLDNS_TTL = "The TTL of the TXT record used for the DNS challenge in seconds (Default: 30)" + VINYLDNS_HTTP_TIMEOUT = "API request timeout in seconds (Default: 30)" [Links] API = "https://www.vinyldns.io/api/" diff --git a/providers/dns/vinyldns/vinyldns_test.go b/providers/dns/vinyldns/vinyldns_test.go index 05a6cf0df..c4741ea1c 100644 --- a/providers/dns/vinyldns/vinyldns_test.go +++ b/providers/dns/vinyldns/vinyldns_test.go @@ -162,15 +162,9 @@ func mockBuilder() *servermock.Builder[*DNSProvider] { config.AccessKey = "foo" config.SecretKey = "bar" config.Host = server.URL + config.HTTPClient = server.Client() - provider, err := NewDNSProviderConfig(config) - if err != nil { - return nil, err - } - - provider.client.HTTPClient = server.Client() - - return provider, nil + return NewDNSProviderConfig(config) }) } diff --git a/providers/dns/vscale/vscale.go b/providers/dns/vscale/vscale.go index 6c51ae5ca..1ecff3a60 100644 --- a/providers/dns/vscale/vscale.go +++ b/providers/dns/vscale/vscale.go @@ -14,6 +14,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/selectel" ) @@ -92,10 +93,13 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } client := selectel.NewClient(config.Token) + if config.HTTPClient != nil { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + var err error client.BaseURL, err = url.Parse(config.BaseURL) if err != nil { diff --git a/providers/dns/vultr/vultr.go b/providers/dns/vultr/vultr.go index 7672d2054..73e3480a2 100644 --- a/providers/dns/vultr/vultr.go +++ b/providers/dns/vultr/vultr.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/vultr/govultr/v3" "golang.org/x/oauth2" ) @@ -38,7 +39,7 @@ type Config struct { PollingInterval time.Duration TTL int HTTPClient *http.Client - HTTPTimeout time.Duration + HTTPTimeout time.Duration // TODO(ldez): remove in v5 } // NewDefaultConfig returns a default configuration for the DNSProvider. @@ -84,7 +85,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { authClient := OAuthStaticAccessToken(config.HTTPClient, config.APIKey) authClient.Timeout = config.HTTPTimeout - client := govultr.NewClient(authClient) + client := govultr.NewClient(clientdebug.Wrap(authClient)) return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/webnames/webnames.go b/providers/dns/webnames/webnames.go index 78905e22c..5dc5c4f2d 100644 --- a/providers/dns/webnames/webnames.go +++ b/providers/dns/webnames/webnames.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/webnames/internal" ) @@ -83,6 +84,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/websupport/websupport.go b/providers/dns/websupport/websupport.go index aa3c93578..7f93653c9 100644 --- a/providers/dns/websupport/websupport.go +++ b/providers/dns/websupport/websupport.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" "github.com/go-acme/lego/v4/providers/dns/internal/active24" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" ) const baseAPIDomain = "websupport.sk" @@ -88,6 +89,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/wedos/wedos.go b/providers/dns/wedos/wedos.go index 85187ec46..164fb5f10 100644 --- a/providers/dns/wedos/wedos.go +++ b/providers/dns/wedos/wedos.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/wedos/internal" ) @@ -94,6 +95,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil } diff --git a/providers/dns/westcn/internal/client.go b/providers/dns/westcn/internal/client.go index 4d967f5e1..bfed159ae 100644 --- a/providers/dns/westcn/internal/client.go +++ b/providers/dns/westcn/internal/client.go @@ -14,8 +14,8 @@ import ( "strings" "time" + "github.com/go-acme/lego/v4/providers/dns/internal/errutils" querystring "github.com/google/go-querystring/query" - "github.com/nrdcg/mailinabox/errutils" "golang.org/x/text/encoding" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" diff --git a/providers/dns/westcn/westcn.go b/providers/dns/westcn/westcn.go index 37f357b70..7efcfab21 100644 --- a/providers/dns/westcn/westcn.go +++ b/providers/dns/westcn/westcn.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/westcn/internal" ) @@ -91,6 +92,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/yandex/yandex.go b/providers/dns/yandex/yandex.go index c51602f67..d832f8859 100644 --- a/providers/dns/yandex/yandex.go +++ b/providers/dns/yandex/yandex.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/yandex/internal" "github.com/miekg/dns" ) @@ -88,6 +89,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{client: client, config: config}, nil } diff --git a/providers/dns/yandex360/yandex360.go b/providers/dns/yandex360/yandex360.go index aa749cf8f..0f4571750 100644 --- a/providers/dns/yandex360/yandex360.go +++ b/providers/dns/yandex360/yandex360.go @@ -13,6 +13,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/yandex360/internal" "github.com/miekg/dns" ) @@ -98,6 +99,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ client: client, config: config, diff --git a/providers/dns/zoneedit/zoneedit.go b/providers/dns/zoneedit/zoneedit.go index 875b84233..c815f975a 100644 --- a/providers/dns/zoneedit/zoneedit.go +++ b/providers/dns/zoneedit/zoneedit.go @@ -9,6 +9,7 @@ import ( "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/zoneedit/internal" ) @@ -80,6 +81,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{ config: config, client: client, diff --git a/providers/dns/zoneee/zoneee.go b/providers/dns/zoneee/zoneee.go index 7dbbc4314..82e8effaf 100644 --- a/providers/dns/zoneee/zoneee.go +++ b/providers/dns/zoneee/zoneee.go @@ -12,6 +12,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/zoneee/internal" ) @@ -105,6 +106,9 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { if config.HTTPClient != nil { client.HTTPClient = config.HTTPClient } + + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + if config.Endpoint != nil { client.BaseURL = config.Endpoint } diff --git a/providers/dns/zonomi/zonomi.go b/providers/dns/zonomi/zonomi.go index 8c7a2943f..e6eae08de 100644 --- a/providers/dns/zonomi/zonomi.go +++ b/providers/dns/zonomi/zonomi.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" + "github.com/go-acme/lego/v4/providers/dns/internal/clientdebug" "github.com/go-acme/lego/v4/providers/dns/internal/rimuhosting" ) @@ -87,6 +88,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = config.HTTPClient } + client.HTTPClient = clientdebug.Wrap(client.HTTPClient) + return &DNSProvider{config: config, client: client}, nil }