mirror of
https://github.com/go-acme/lego
synced 2026-03-16 23:45:50 +01:00
refactor: logs inside DNS providers
This commit is contained in:
parent
0880332b90
commit
eb28e75200
32 changed files with 95 additions and 143 deletions
|
|
@ -138,7 +138,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
}
|
||||
|
||||
if d.config.Debug {
|
||||
log.Infof("fqdn: %s; viewID: %d; ZoneID: %d; zone: %s", info.EffectiveFQDN, viewID, parentZoneID, name)
|
||||
log.Info("bluecat: debug information.", "fqdn", info.EffectiveFQDN, "viewID", viewID, "zoneID", parentZoneID, "zone", name)
|
||||
}
|
||||
|
||||
txtRecord := internal.Entity{
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import (
|
|||
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/platform/config/env"
|
||||
"github.com/go-acme/lego/v5/providers/dns/cloudflare/internal"
|
||||
)
|
||||
|
|
@ -185,8 +184,6 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
d.recordIDs[token] = response.ID
|
||||
d.recordIDsMu.Unlock()
|
||||
|
||||
log.Infof("cloudflare: new record for %s, ID %s", domain, response.ID)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -217,7 +214,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
|||
|
||||
err = d.client.DeleteDNSRecord(ctx, zoneID, recordID)
|
||||
if err != nil {
|
||||
log.Printf("cloudflare: failed to delete TXT record: %v", err)
|
||||
return fmt.Errorf("cloudflare: failed to delete TXT record: %w", err)
|
||||
}
|
||||
|
||||
// Delete record ID from map
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ func (d *DNSProvider) waitNameservers(ctx context.Context, domain string, zone *
|
|||
return fmt.Errorf("nameserver sync on %s: %w", domain, err)
|
||||
}
|
||||
|
||||
log.Infof("[%s] Sync %d/%d complete", domain, syncProgress.Updated, syncProgress.Total)
|
||||
log.Info(fmt.Sprintf("Sync %d/%d complete", syncProgress.Updated, syncProgress.Total), "domain", domain)
|
||||
|
||||
if !syncProgress.Complete {
|
||||
return fmt.Errorf("nameserver sync on %s not complete", domain)
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ import (
|
|||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/platform/config/env"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/clientdebug"
|
||||
"github.com/nrdcg/desec"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ package designate
|
|||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"slices"
|
||||
"sync"
|
||||
|
|
@ -12,6 +11,7 @@ import (
|
|||
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/platform/config/env"
|
||||
"github.com/gophercloud/gophercloud"
|
||||
"github.com/gophercloud/gophercloud/openstack"
|
||||
|
|
@ -155,7 +155,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
|
||||
if existingRecord != nil {
|
||||
if slices.Contains(existingRecord.Records, info.Value) {
|
||||
log.Printf("designate: the record already exists: %s", info.Value)
|
||||
log.Debug("designate: the record already exists.", "value", info.Value)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -229,7 +229,7 @@ func (d *DNSProvider) createRecord(zoneID, fqdn, value string) error {
|
|||
|
||||
func (d *DNSProvider) updateRecord(record *recordsets.RecordSet, value string) error {
|
||||
if slices.Contains(record.Records, value) {
|
||||
log.Printf("skip: the record already exists: %s", value)
|
||||
log.Debug("skip: the record already exists.", "value", value)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ func (c *Client) doRetry(ctx context.Context, method, uri string, body []byte, r
|
|||
}
|
||||
|
||||
notify := func(err error, duration time.Duration) {
|
||||
log.Printf("client retries because of %v", err)
|
||||
log.Warn("client retries.", "error", err)
|
||||
}
|
||||
|
||||
bo := backoff.NewExponentialBackOff()
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import (
|
|||
"github.com/akamai/AkamaiOPEN-edgegrid-golang/v11/pkg/session"
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/platform/config/env"
|
||||
)
|
||||
|
||||
|
|
@ -158,8 +157,6 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
}
|
||||
|
||||
if record != nil {
|
||||
log.Infof("TXT record already exists. Updating target")
|
||||
|
||||
if containsValue(record.Target, info.Value) {
|
||||
// have a record and have entry already
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ func (d *DNSProvider) run(ctx context.Context, command, domain, token, keyAuth s
|
|||
|
||||
scanner := bufio.NewScanner(stdout)
|
||||
for scanner.Scan() {
|
||||
log.Println(scanner.Text())
|
||||
log.Info(scanner.Text())
|
||||
}
|
||||
|
||||
err = cmd.Wait()
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package exec
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
|
@ -13,14 +14,14 @@ import (
|
|||
)
|
||||
|
||||
func TestDNSProvider_Present(t *testing.T) {
|
||||
backupLogger := log.Logger
|
||||
backupLogger := log.Default()
|
||||
|
||||
defer func() {
|
||||
log.Logger = backupLogger
|
||||
log.SetDefault(backupLogger)
|
||||
}()
|
||||
|
||||
logRecorder := &LogRecorder{}
|
||||
log.Logger = logRecorder
|
||||
logHandler := &LogHandler{}
|
||||
log.SetDefault(slog.New(logHandler))
|
||||
|
||||
type expected struct {
|
||||
args string
|
||||
|
|
@ -64,8 +65,8 @@ func TestDNSProvider_Present(t *testing.T) {
|
|||
|
||||
var message string
|
||||
|
||||
logRecorder.On("Println", mock.Anything).Run(func(args mock.Arguments) {
|
||||
message = args.String(0)
|
||||
logHandler.On("Handle", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
|
||||
message = args.Get(1).(slog.Record).Message
|
||||
fmt.Fprintln(os.Stdout, "XXX", message)
|
||||
})
|
||||
|
||||
|
|
@ -88,14 +89,14 @@ func TestDNSProvider_Present(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDNSProvider_CleanUp(t *testing.T) {
|
||||
backupLogger := log.Logger
|
||||
backupLogger := log.Default()
|
||||
|
||||
defer func() {
|
||||
log.Logger = backupLogger
|
||||
log.SetDefault(backupLogger)
|
||||
}()
|
||||
|
||||
logRecorder := &LogRecorder{}
|
||||
log.Logger = logRecorder
|
||||
logHandler := &LogHandler{}
|
||||
log.SetDefault(slog.New(logHandler))
|
||||
|
||||
type expected struct {
|
||||
args string
|
||||
|
|
@ -139,8 +140,8 @@ func TestDNSProvider_CleanUp(t *testing.T) {
|
|||
|
||||
var message string
|
||||
|
||||
logRecorder.On("Println", mock.Anything).Run(func(args mock.Arguments) {
|
||||
message = args.String(0)
|
||||
logHandler.On("Handle", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
|
||||
message = args.Get(1).(slog.Record).Message
|
||||
fmt.Fprintln(os.Stdout, "XXX", message)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -1,31 +1,30 @@
|
|||
package exec
|
||||
|
||||
import "github.com/stretchr/testify/mock"
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
|
||||
type LogRecorder struct {
|
||||
"github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
type LogHandler struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
func (*LogRecorder) Fatal(args ...any) {
|
||||
func (l *LogHandler) Enabled(ctx context.Context, level slog.Level) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (l *LogHandler) Handle(ctx context.Context, record slog.Record) error {
|
||||
l.Called(ctx, record)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *LogHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (*LogRecorder) Fatalln(args ...any) {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (*LogRecorder) Fatalf(format string, args ...any) {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (*LogRecorder) Print(args ...any) {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (l *LogRecorder) Println(args ...any) {
|
||||
l.Called(args...)
|
||||
}
|
||||
|
||||
func (*LogRecorder) Printf(format string, args ...any) {
|
||||
func (l *LogHandler) WithGroup(name string) slog.Handler {
|
||||
panic("implement me")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||
}
|
||||
|
||||
if config.APIKey != "" {
|
||||
log.Print("gandiv5: API Key is deprecated, use Personal Access Token instead")
|
||||
log.Warn("gandiv5: API Key is deprecated, use Personal Access Token instead")
|
||||
}
|
||||
|
||||
if config.APIKey == "" && config.PersonalAccessToken == "" {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import (
|
|||
"net/url"
|
||||
"time"
|
||||
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/errutils"
|
||||
)
|
||||
|
||||
|
|
@ -99,10 +98,6 @@ func (c *Client) addTXTRecord(ctx context.Context, domain, name string, newRecor
|
|||
return fmt.Errorf("unable to create TXT record for domain %s and name %s: %w", domain, name, err)
|
||||
}
|
||||
|
||||
if message.Message != "" {
|
||||
log.Infof("API response: %s", message.Message)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -121,10 +116,6 @@ func (c *Client) DeleteTXTRecord(ctx context.Context, domain, name string) error
|
|||
return fmt.Errorf("unable to delete TXT record for domain %s and name %s: %w", domain, name, err)
|
||||
}
|
||||
|
||||
if message.Message != "" {
|
||||
log.Infof("API response: %s", message.Message)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -212,7 +212,6 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
rrd = append(rrd, data)
|
||||
|
||||
if data == info.Value {
|
||||
log.Printf("skip: the record already exists: %s", info.Value)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
|
@ -257,7 +256,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
func (d *DNSProvider) applyChanges(ctx context.Context, zone string, change *gdns.Change) error {
|
||||
if d.config.Debug {
|
||||
data, _ := json.Marshal(change)
|
||||
log.Printf("change (Create): %s", string(data))
|
||||
log.Info("change (Create)", "data", string(data))
|
||||
}
|
||||
|
||||
chg, err := d.client.Changes.Create(d.config.Project, zone, change).Do()
|
||||
|
|
@ -283,7 +282,7 @@ func (d *DNSProvider) applyChanges(ctx context.Context, zone string, change *gdn
|
|||
func() error {
|
||||
if d.config.Debug {
|
||||
data, _ := json.Marshal(change)
|
||||
log.Printf("change (Get): %s", string(data))
|
||||
log.Info("change (Get)", "data", string(data))
|
||||
}
|
||||
|
||||
chg, err = d.client.Changes.Get(d.config.Project, zone, chgID).Do()
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package hetzner
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
|
|
@ -75,7 +76,7 @@ func NewDNSProvider() (*DNSProvider, error) {
|
|||
return &DNSProvider{provider: provider}, nil
|
||||
|
||||
case foundAPIKey:
|
||||
log.Warnf("APIKey (legacy Hetzner DNS API) is deprecated, please use APIToken (Hetzner Cloud API) instead.")
|
||||
log.Warn("APIKey (legacy Hetzner DNS API) is deprecated, please use APIToken (Hetzner Cloud API) instead.")
|
||||
|
||||
provider, err := legacy.NewDNSProvider()
|
||||
if err != nil {
|
||||
|
|
@ -118,7 +119,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||
return &DNSProvider{provider: provider}, nil
|
||||
|
||||
case config.APIKey != "":
|
||||
log.Warnf("%s (legacy Hetzner DNS API) is deprecated, please use %s (Hetzner Cloud API) instead.", EnvAPIKey, EnvAPIToken)
|
||||
log.Warn(fmt.Sprintf("%s (legacy Hetzner DNS API) is deprecated, please use %s (Hetzner Cloud API) instead.", EnvAPIKey, EnvAPIToken))
|
||||
|
||||
cfg := &legacy.Config{
|
||||
APIKey: config.APIKey,
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/errutils"
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
|
|
@ -108,7 +108,7 @@ func evaluateBody(body, hostname string) error {
|
|||
case codeGood:
|
||||
return nil
|
||||
case codeNoChg:
|
||||
log.Printf("%s: unchanged content written to TXT record %s", body, hostname)
|
||||
log.Debug("unchanged content written to TXT record.", "hostname", hostname, "body", body)
|
||||
return nil
|
||||
case codeAbuse:
|
||||
return fmt.Errorf("%s: blocked hostname for abuse: %s", body, hostname)
|
||||
|
|
|
|||
|
|
@ -9,11 +9,9 @@ import (
|
|||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/errutils"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
|
@ -72,17 +70,9 @@ func (c *Client) DeleteDNSRecord(ctx context.Context, domainID uint64, recordID
|
|||
|
||||
// GetDomainByName gets a Domain object from its name.
|
||||
func (c *Client) GetDomainByName(ctx context.Context, name string) (*DNSDomain, error) {
|
||||
name = dns01.UnFqdn(name)
|
||||
|
||||
// Try to find the most specific domain
|
||||
// starts with the FQDN, then remove each left label until we have a match
|
||||
for {
|
||||
i := strings.Index(name, ".")
|
||||
if i == -1 {
|
||||
break
|
||||
}
|
||||
|
||||
domain, err := c.getDomainByName(ctx, name)
|
||||
for n := range dns01.UnFqdnDomainsSeq(dns01.UnFqdn(name)) {
|
||||
domain, err := c.getDomainByName(ctx, n)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -90,10 +80,6 @@ func (c *Client) GetDomainByName(ctx context.Context, name string) (*DNSDomain,
|
|||
if domain != nil {
|
||||
return domain, nil
|
||||
}
|
||||
|
||||
log.Infof("domain %q not found, trying with %q", name, name[i+1:])
|
||||
|
||||
name = name[i+1:]
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("domain not found %s", name)
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||
}
|
||||
|
||||
if config.Sandbox {
|
||||
log.Infof("inwx: sandbox mode is enabled")
|
||||
log.Info("inwx: sandbox mode is enabled.")
|
||||
}
|
||||
|
||||
client := goinwx.NewClient(config.Username, config.Password, &goinwx.ClientOptions{Sandbox: config.Sandbox})
|
||||
|
|
@ -112,7 +112,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
defer func() {
|
||||
errL := d.client.Account.Logout()
|
||||
if errL != nil {
|
||||
log.Infof("inwx: failed to log out: %v", errL)
|
||||
log.Warn("inwx: failed to log out.", "error", errL)
|
||||
}
|
||||
}()
|
||||
|
||||
|
|
@ -159,7 +159,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
|||
defer func() {
|
||||
errL := d.client.Account.Logout()
|
||||
if errL != nil {
|
||||
log.Infof("inwx: failed to log out: %v", errL)
|
||||
log.Warn("inwx: failed to log out.", "error", errL)
|
||||
}
|
||||
}()
|
||||
|
||||
|
|
@ -220,7 +220,7 @@ func (d *DNSProvider) twoFactorAuth(info *goinwx.LoginResponse) error {
|
|||
// To avoid using the same TAN twice, we wait until the next TOTP period.
|
||||
sleep := d.computeSleep(time.Now())
|
||||
if sleep != 0 {
|
||||
log.Infof("inwx: waiting %s for next TOTP token", sleep)
|
||||
log.Info("inwx: waiting for the next TOTP token", "sleep", sleep)
|
||||
time.Sleep(sleep)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/errutils"
|
||||
)
|
||||
|
||||
|
|
@ -45,7 +44,6 @@ type Client struct {
|
|||
token *Token
|
||||
muToken sync.Mutex
|
||||
|
||||
Debug bool
|
||||
BaseURL string
|
||||
HTTPClient *http.Client
|
||||
}
|
||||
|
|
@ -90,10 +88,6 @@ func (c *Client) postRequest(ctx context.Context, cmd string, data url.Values) (
|
|||
data.Set("auth-sid", getSessionID(ctx))
|
||||
}
|
||||
|
||||
if c.Debug {
|
||||
log.Infof("postRequest:\n\tURL: %q\n\tData: %v", endpoint, data)
|
||||
}
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, strings.NewReader(data.Encode()))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to create request: %w", err)
|
||||
|
|
|
|||
|
|
@ -69,6 +69,8 @@ func (c *Client) SendRequest(ctx context.Context, zone, label, value string) err
|
|||
return errutils.NewHTTPDoError(req, err)
|
||||
}
|
||||
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
raw, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return errutils.NewReadResponseError(req, resp.StatusCode, err)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ const (
|
|||
EnvAPIKey = envNamespace + "API_KEY"
|
||||
EnvUsername = envNamespace + "USERNAME"
|
||||
EnvPassword = envNamespace + "PASSWORD"
|
||||
EnvDebug = envNamespace + "DEBUG"
|
||||
EnvMode = envNamespace + "API_MODE"
|
||||
|
||||
EnvTTL = envNamespace + "TTL"
|
||||
|
|
@ -35,7 +34,6 @@ const (
|
|||
|
||||
// Config is used to configure the creation of the DNSProvider.
|
||||
type Config struct {
|
||||
Debug bool
|
||||
APIKey string
|
||||
Username string
|
||||
Password string
|
||||
|
|
@ -51,7 +49,6 @@ type Config struct {
|
|||
func NewDefaultConfig() *Config {
|
||||
return &Config{
|
||||
APIMode: env.GetOrDefaultString(EnvMode, modeDMAPI),
|
||||
Debug: env.GetOrDefaultBool(EnvDebug, false),
|
||||
TTL: env.GetOrDefaultInt(EnvTTL, dns01.DefaultTTL),
|
||||
PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 2*time.Minute),
|
||||
PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval),
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import (
|
|||
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/platform/config/env"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/clientdebug"
|
||||
"github.com/go-acme/lego/v5/providers/dns/joker/internal/dmapi"
|
||||
|
|
@ -62,8 +61,6 @@ func newDmapiProviderConfig(config *Config) (*dmapiProvider, error) {
|
|||
Password: config.Password,
|
||||
})
|
||||
|
||||
client.Debug = config.Debug
|
||||
|
||||
if config.HTTPClient != nil {
|
||||
client.HTTPClient = config.HTTPClient
|
||||
}
|
||||
|
|
@ -93,13 +90,9 @@ func (d *dmapiProvider) Present(domain, token, keyAuth string) error {
|
|||
return fmt.Errorf("joker: %w", err)
|
||||
}
|
||||
|
||||
if d.config.Debug {
|
||||
log.Infof("[%s] joker: adding TXT record %q to zone %q with value %q", domain, subDomain, zone, info.Value)
|
||||
}
|
||||
|
||||
ctx, err := d.client.CreateAuthenticatedContext(context.Background())
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("joker: create authenticated context: %w", err)
|
||||
}
|
||||
|
||||
response, err := d.client.GetZone(ctx, zone)
|
||||
|
|
@ -131,13 +124,9 @@ func (d *dmapiProvider) CleanUp(domain, token, keyAuth string) error {
|
|||
return fmt.Errorf("joker: %w", err)
|
||||
}
|
||||
|
||||
if d.config.Debug {
|
||||
log.Infof("[%s] joker: removing entry %q from zone %q", domain, subDomain, zone)
|
||||
}
|
||||
|
||||
ctx, err := d.client.CreateAuthenticatedContext(context.Background())
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("joker: create authenticated context: %w", err)
|
||||
}
|
||||
|
||||
defer func() {
|
||||
|
|
|
|||
|
|
@ -73,7 +73,12 @@ func (d *svcProvider) Present(domain, token, keyAuth string) error {
|
|||
return fmt.Errorf("joker: %w", err)
|
||||
}
|
||||
|
||||
return d.client.SendRequest(context.Background(), dns01.UnFqdn(zone), subDomain, info.Value)
|
||||
err = d.client.SendRequest(context.Background(), dns01.UnFqdn(zone), subDomain, info.Value)
|
||||
if err != nil {
|
||||
return fmt.Errorf("joker: send request: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// CleanUp removes the TXT record matching the specified parameters.
|
||||
|
|
@ -90,7 +95,12 @@ func (d *svcProvider) CleanUp(domain, token, keyAuth string) error {
|
|||
return fmt.Errorf("joker: %w", err)
|
||||
}
|
||||
|
||||
return d.client.SendRequest(context.Background(), dns01.UnFqdn(zone), subDomain, "")
|
||||
err = d.client.SendRequest(context.Background(), dns01.UnFqdn(zone), subDomain, "")
|
||||
if err != nil {
|
||||
return fmt.Errorf("joker: send request: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Sequential All DNS challenges for this provider will be resolved sequentially.
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||
retryClient.HTTPClient = config.HTTPClient
|
||||
}
|
||||
|
||||
retryClient.Logger = log.Logger
|
||||
retryClient.Logger = log.Default()
|
||||
|
||||
client := internal.NewClient(
|
||||
clientdebug.Wrap(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import (
|
|||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/clientdebug"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/errutils"
|
||||
)
|
||||
|
||||
|
|
@ -15,11 +15,13 @@ const getIPURL = "https://dynamicdns.park-your-domain.com/getip"
|
|||
|
||||
// GetClientIP returns the client's public IP address.
|
||||
// It uses namecheap's IP discovery service to perform the lookup.
|
||||
func GetClientIP(ctx context.Context, client *http.Client, debug bool) (addr string, err error) {
|
||||
func GetClientIP(ctx context.Context, client *http.Client) (addr string, err error) {
|
||||
if client == nil {
|
||||
client = &http.Client{Timeout: 5 * time.Second}
|
||||
}
|
||||
|
||||
client = clientdebug.Wrap(client)
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, getIPURL, http.NoBody)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("unable to create request: %w", err)
|
||||
|
|
@ -37,9 +39,5 @@ func GetClientIP(ctx context.Context, client *http.Client, debug bool) (addr str
|
|||
return "", errutils.NewReadResponseError(req, resp.StatusCode, err)
|
||||
}
|
||||
|
||||
if debug {
|
||||
log.Println("Client IP:", string(clientIP))
|
||||
}
|
||||
|
||||
return string(clientIP), nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ const (
|
|||
EnvAPIKey = envNamespace + "API_KEY"
|
||||
|
||||
EnvSandbox = envNamespace + "SANDBOX"
|
||||
EnvDebug = envNamespace + "DEBUG"
|
||||
|
||||
EnvTTL = envNamespace + "TTL"
|
||||
EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT"
|
||||
|
|
@ -51,7 +50,6 @@ var _ challenge.ProviderTimeout = (*DNSProvider)(nil)
|
|||
|
||||
// Config is used to configure the creation of the DNSProvider.
|
||||
type Config struct {
|
||||
Debug bool
|
||||
BaseURL string
|
||||
APIUser string
|
||||
APIKey string
|
||||
|
|
@ -71,7 +69,6 @@ func NewDefaultConfig() *Config {
|
|||
|
||||
return &Config{
|
||||
BaseURL: baseURL,
|
||||
Debug: env.GetOrDefaultBool(EnvDebug, false),
|
||||
TTL: env.GetOrDefaultInt(EnvTTL, dns01.DefaultTTL),
|
||||
PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, time.Hour),
|
||||
PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, 15*time.Second),
|
||||
|
|
@ -115,7 +112,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||
}
|
||||
|
||||
if config.ClientIP == "" {
|
||||
clientIP, err := internal.GetClientIP(context.Background(), config.HTTPClient, config.Debug)
|
||||
clientIP, err := internal.GetClientIP(context.Background(), config.HTTPClient)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("namecheap: %w", err)
|
||||
}
|
||||
|
|
@ -166,10 +163,8 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
|
||||
records = append(records, record)
|
||||
|
||||
if d.config.Debug {
|
||||
for _, h := range records {
|
||||
log.Printf("%-5.5s %-30.30s %-6s %-70.70s", h.Type, h.Name, h.TTL, h.Address)
|
||||
}
|
||||
for _, h := range records {
|
||||
log.Debug(fmt.Sprintf("%-5.5s %-30.30s %-6s %-70.70s", h.Type, h.Name, h.TTL, h.Address))
|
||||
}
|
||||
|
||||
err = d.client.SetHosts(ctx, pr.sld, pr.tld, records)
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
defer func() {
|
||||
err = d.client.Logout(ctx)
|
||||
if err != nil {
|
||||
log.Printf("netcup: %v", err)
|
||||
log.Warn("netcup: failed to logout.", "error", err)
|
||||
}
|
||||
}()
|
||||
|
||||
|
|
@ -135,7 +135,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
records, err := d.client.GetDNSRecords(ctx, zone)
|
||||
if err != nil {
|
||||
// skip no existing records
|
||||
log.Infof("no existing records, error ignored: %v", err)
|
||||
log.Info("No existing records, error ignored.", "zone", zone, "error", err)
|
||||
}
|
||||
|
||||
records = append(records, record)
|
||||
|
|
@ -165,7 +165,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
|||
defer func() {
|
||||
err = d.client.Logout(ctx)
|
||||
if err != nil {
|
||||
log.Printf("netcup: %v", err)
|
||||
log.Warn("netcup: failed to logout.", "error", err)
|
||||
}
|
||||
}()
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import (
|
|||
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/platform/config/env"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/clientdebug"
|
||||
"gopkg.in/ns1/ns1-go.v2/rest"
|
||||
|
|
@ -104,8 +103,6 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
|
||||
// Create a new record
|
||||
if errors.Is(err, rest.ErrRecordMissing) || record == nil {
|
||||
log.Infof("Create a new record for [zone: %s, fqdn: %s, domain: %s]", zone.Zone, info.EffectiveFQDN, domain)
|
||||
|
||||
// Work through a bug in the NS1 API library that causes 400 Input validation failed (Value None for field '<obj>.filters' is not of type ...)
|
||||
// So the `tags` and `blockedTags` parameters should be initialized to empty.
|
||||
record = dns.NewRecord(zone.Zone, dns01.UnFqdn(info.EffectiveFQDN), "TXT", make(map[string]string), make([]string, 0))
|
||||
|
|
@ -114,24 +111,22 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
|
||||
_, err = d.client.Records.Create(record)
|
||||
if err != nil {
|
||||
return fmt.Errorf("ns1: failed to create record [zone: %q, fqdn: %q]: %w", zone.Zone, info.EffectiveFQDN, err)
|
||||
return fmt.Errorf("ns1: create record [zone: %q, fqdn: %q]: %w", zone.Zone, info.EffectiveFQDN, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("ns1: failed to get the existing record: %w", err)
|
||||
return fmt.Errorf("ns1: get the existing record: %w", err)
|
||||
}
|
||||
|
||||
// Update the existing records
|
||||
record.Answers = append(record.Answers, &dns.Answer{Rdata: []string{info.Value}})
|
||||
|
||||
log.Infof("Update an existing record for [zone: %s, fqdn: %s, domain: %s]", zone.Zone, info.EffectiveFQDN, domain)
|
||||
|
||||
_, err = d.client.Records.Update(record)
|
||||
if err != nil {
|
||||
return fmt.Errorf("ns1: failed to update record [zone: %q, fqdn: %q]: %w", zone.Zone, info.EffectiveFQDN, err)
|
||||
return fmt.Errorf("ns1: update record [zone: %q, fqdn: %q]: %w", zone.Zone, info.EffectiveFQDN, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
@ -150,7 +145,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
|||
|
||||
_, err = d.client.Records.Delete(zone.Zone, name, "TXT")
|
||||
if err != nil {
|
||||
return fmt.Errorf("ns1: failed to delete record [zone: %q, domain: %q]: %w", zone.Zone, name, err)
|
||||
return fmt.Errorf("ns1: delete record [zone: %q, domain: %q]: %w", zone.Zone, name, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
@ -172,7 +167,7 @@ func (d *DNSProvider) getHostedZone(fqdn string) (*dns.Zone, error) {
|
|||
|
||||
zone, _, err := d.client.Zones.Get(authZone, false)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get zone [authZone: %q, fqdn: %q]: %w", authZone, fqdn, err)
|
||||
return nil, fmt.Errorf("get zone [authZone: %q, fqdn: %q]: %w", authZone, fqdn, err)
|
||||
}
|
||||
|
||||
return zone, nil
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||
retryClient := retryablehttp.NewClient()
|
||||
retryClient.RetryMax = 5
|
||||
retryClient.HTTPClient = client.HTTPClient
|
||||
retryClient.Logger = log.Logger
|
||||
retryClient.Logger = log.Default()
|
||||
|
||||
client.HTTPClient = clientdebug.Wrap(retryClient.StandardClient())
|
||||
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ func getEnvFileWithStrictFallback(keys ...string) []byte {
|
|||
|
||||
fileContents, err := os.ReadFile(fileVarValue)
|
||||
if err != nil {
|
||||
log.Printf("Failed to read the file %s (defined by env var %s): %s", fileVarValue, key, err)
|
||||
log.Debug("Failed to read the file.", "filepath", fileVarValue, "envVar", key, "error", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||
if config.APIVersion <= 0 {
|
||||
err := client.SetAPIVersion(context.Background())
|
||||
if err != nil {
|
||||
log.Warnf("pdns: failed to get API version %v", err)
|
||||
log.Warn("pdns: failed to get API version.", "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import (
|
|||
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/platform/config/env"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/clientdebug"
|
||||
"github.com/go-acme/lego/v5/providers/dns/stackpath/internal"
|
||||
|
|
@ -105,7 +104,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
|
||||
zone, err := d.client.GetZones(ctx, info.EffectiveFQDN)
|
||||
if err != nil {
|
||||
return fmt.Errorf("stackpath: %w", err)
|
||||
return fmt.Errorf("stackpath: get zones: %w", err)
|
||||
}
|
||||
|
||||
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, zone.Domain)
|
||||
|
|
@ -120,7 +119,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||
Data: info.Value,
|
||||
}
|
||||
|
||||
return d.client.CreateZoneRecord(ctx, zone, record)
|
||||
err = d.client.CreateZoneRecord(ctx, zone, record)
|
||||
if err != nil {
|
||||
return fmt.Errorf("stackpath: create zone record: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// CleanUp removes the TXT record matching the specified parameters.
|
||||
|
|
@ -131,7 +135,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
|||
|
||||
zone, err := d.client.GetZones(ctx, info.EffectiveFQDN)
|
||||
if err != nil {
|
||||
return fmt.Errorf("stackpath: %w", err)
|
||||
return fmt.Errorf("stackpath: get zones: %w", err)
|
||||
}
|
||||
|
||||
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, zone.Domain)
|
||||
|
|
@ -141,13 +145,13 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
|||
|
||||
records, err := d.client.GetZoneRecords(ctx, subDomain, zone)
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("stackpath: get zone records: %w", err)
|
||||
}
|
||||
|
||||
for _, record := range records {
|
||||
err = d.client.DeleteZoneRecord(ctx, zone, record)
|
||||
if err != nil {
|
||||
log.Printf("stackpath: failed to delete TXT record: %v", err)
|
||||
return fmt.Errorf("stackpath: delete zone record: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import (
|
|||
"github.com/cenkalti/backoff/v5"
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/log"
|
||||
"github.com/go-acme/lego/v5/platform/config/env"
|
||||
"github.com/go-acme/lego/v5/platform/wait"
|
||||
"github.com/go-acme/lego/v5/providers/dns/internal/clientdebug"
|
||||
|
|
@ -195,8 +194,6 @@ func (d *DNSProvider) waitJob(ctx context.Context, domain, id string) error {
|
|||
return fmt.Errorf("apply change on %s: %w", domain, err)
|
||||
}
|
||||
|
||||
log.Infof("variomedia: [%s] %s: %s %s", domain, result.Data.ID, result.Data.Attributes.JobType, result.Data.Attributes.Status)
|
||||
|
||||
if result.Data.Attributes.Status != "done" {
|
||||
return fmt.Errorf("apply change on %s: status: %s", domain, result.Data.Attributes.Status)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue