diff --git a/providers/dns/aliesa/aliesa.go b/providers/dns/aliesa/aliesa.go index deb8162da..2a38389be 100644 --- a/providers/dns/aliesa/aliesa.go +++ b/providers/dns/aliesa/aliesa.go @@ -212,6 +212,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("aliesa: delete record: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/allinkl/allinkl.go b/providers/dns/allinkl/allinkl.go index a5b27ff59..7e8f5ab4e 100644 --- a/providers/dns/allinkl/allinkl.go +++ b/providers/dns/allinkl/allinkl.go @@ -186,5 +186,9 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("allinkl: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/auroradns/auroradns.go b/providers/dns/auroradns/auroradns.go index 95d6ab759..50d2fbc25 100644 --- a/providers/dns/auroradns/auroradns.go +++ b/providers/dns/auroradns/auroradns.go @@ -53,10 +53,11 @@ func NewDefaultConfig() *Config { // DNSProvider implements the challenge.Provider interface. type DNSProvider struct { + config *Config + client *auroradns.Client + recordIDs map[string]string recordIDsMu sync.Mutex - config *Config - client *auroradns.Client } // NewDNSProvider returns a DNSProvider instance configured for AuroraDNS. diff --git a/providers/dns/azion/azion.go b/providers/dns/azion/azion.go index 8150d90d5..5584ece0b 100644 --- a/providers/dns/azion/azion.go +++ b/providers/dns/azion/azion.go @@ -6,7 +6,6 @@ import ( "errors" "fmt" "net/http" - "sync" "time" "github.com/aziontech/azionapi-go-sdk/idns" @@ -56,9 +55,6 @@ func NewDefaultConfig() *Config { type DNSProvider struct { config *Config client *idns.APIClient - - recordIDs map[string]int32 - recordIDsMu sync.Mutex } // NewDNSProvider returns a DNSProvider instance configured for Azion. @@ -98,9 +94,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client := idns.NewAPIClient(clientConfig) return &DNSProvider{ - config: config, - client: client, - recordIDs: make(map[string]int32), + config: config, + client: client, }, nil } @@ -161,12 +156,6 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { return errors.New("azion: create zone record error") } - results := resp.GetResults() - - d.recordIDsMu.Lock() - d.recordIDs[token] = results.GetId() - d.recordIDsMu.Unlock() - return nil } @@ -186,13 +175,6 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("azion: %w", err) } - defer func() { - // Cleans the record ID. - d.recordIDsMu.Lock() - delete(d.recordIDs, token) - d.recordIDsMu.Unlock() - }() - existingRecord, err := d.findExistingTXTRecord(ctxAuth, zone.GetId(), subDomain) if err != nil { return fmt.Errorf("azion: find existing record: %w", err) diff --git a/providers/dns/binarylane/binarylane.go b/providers/dns/binarylane/binarylane.go index 9ff80d698..5bbb7a16a 100644 --- a/providers/dns/binarylane/binarylane.go +++ b/providers/dns/binarylane/binarylane.go @@ -151,6 +151,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("binarylane: delete record: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/checkdomain/internal/client.go b/providers/dns/checkdomain/internal/client.go index d626275ab..68d090755 100644 --- a/providers/dns/checkdomain/internal/client.go +++ b/providers/dns/checkdomain/internal/client.go @@ -36,11 +36,11 @@ const maxInt = int((^uint(0)) >> 1) // Client the Autodns API client. type Client struct { - domainIDMapping map[string]int - domainIDMu sync.Mutex - BaseURL *url.URL httpClient *http.Client + + domainIDMapping map[string]int + domainIDMu sync.Mutex } // NewClient creates a new Client. diff --git a/providers/dns/cloudru/cloudru.go b/providers/dns/cloudru/cloudru.go index 287c12045..dd597952a 100644 --- a/providers/dns/cloudru/cloudru.go +++ b/providers/dns/cloudru/cloudru.go @@ -61,8 +61,9 @@ func NewDefaultConfig() *Config { } type DNSProvider struct { - config *Config - client *internal.Client + config *Config + client *internal.Client + records map[string]*internal.Record recordsMu sync.Mutex } diff --git a/providers/dns/designate/designate.go b/providers/dns/designate/designate.go index 47c8ad8f1..41bf251f6 100644 --- a/providers/dns/designate/designate.go +++ b/providers/dns/designate/designate.go @@ -68,8 +68,9 @@ func NewDefaultConfig() *Config { // DNSProvider implements the challenge.Provider interface. type DNSProvider struct { - config *Config - client *gophercloud.ServiceClient + config *Config + client *gophercloud.ServiceClient + dnsEntriesMu sync.Mutex } diff --git a/providers/dns/easydns/easydns.go b/providers/dns/easydns/easydns.go index ae0a0c3b8..205063e7b 100644 --- a/providers/dns/easydns/easydns.go +++ b/providers/dns/easydns/easydns.go @@ -190,16 +190,14 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { } err = d.client.DeleteRecord(ctx, dns01.UnFqdn(authZone), recordID) - - d.recordIDsMu.Lock() - defer delete(d.recordIDs, key) - - d.recordIDsMu.Unlock() - if err != nil { return fmt.Errorf("easydns: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, key) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/edgeone/edgeone.go b/providers/dns/edgeone/edgeone.go index 509a75c77..6931c6715 100644 --- a/providers/dns/edgeone/edgeone.go +++ b/providers/dns/edgeone/edgeone.go @@ -119,10 +119,9 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { } return &DNSProvider{ - config: config, - client: client, - recordIDs: map[string]*string{}, - recordIDsMu: sync.Mutex{}, + config: config, + client: client, + recordIDs: map[string]*string{}, }, nil } @@ -190,6 +189,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("edgeone: delete record failed: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/gravity/gravity.go b/providers/dns/gravity/gravity.go index c8594441a..b0bbb2fcb 100644 --- a/providers/dns/gravity/gravity.go +++ b/providers/dns/gravity/gravity.go @@ -163,6 +163,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("gravity: delete record: %w", err) } + d.recordsMu.Lock() + delete(d.records, token) + d.recordsMu.Unlock() + return nil } diff --git a/providers/dns/hosttech/hosttech.go b/providers/dns/hosttech/hosttech.go index fac64f054..73346f6cb 100644 --- a/providers/dns/hosttech/hosttech.go +++ b/providers/dns/hosttech/hosttech.go @@ -174,5 +174,9 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("hosttech: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/huaweicloud/huaweicloud.go b/providers/dns/huaweicloud/huaweicloud.go index 5a2773ab2..e47f3e2b5 100644 --- a/providers/dns/huaweicloud/huaweicloud.go +++ b/providers/dns/huaweicloud/huaweicloud.go @@ -209,6 +209,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("huaweicloud: delete record: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/internal/hostingde/provider.go b/providers/dns/internal/hostingde/provider.go index 644dc8aaf..b5277f042 100644 --- a/providers/dns/internal/hostingde/provider.go +++ b/providers/dns/internal/hostingde/provider.go @@ -165,16 +165,16 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { RecordsToDelete: rec, } - // Delete record ID from map - d.recordIDsMu.Lock() - delete(d.recordIDs, info.EffectiveFQDN) - d.recordIDsMu.Unlock() - _, err = d.client.UpdateZone(ctx, req) if err != nil { return err } + // Delete record ID from map + d.recordIDsMu.Lock() + delete(d.recordIDs, info.EffectiveFQDN) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/limacity/limacity.go b/providers/dns/limacity/limacity.go index 9e1f58f1a..3291faf66 100644 --- a/providers/dns/limacity/limacity.go +++ b/providers/dns/limacity/limacity.go @@ -193,6 +193,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("limacity: delete record (domain ID=%d, record ID=%d): %w", domainID, recordID, err) } + d.domainIDsMu.Lock() + delete(d.domainIDs, info.EffectiveFQDN) + d.domainIDsMu.Unlock() + return nil } diff --git a/providers/dns/liquidweb/liquidweb.go b/providers/dns/liquidweb/liquidweb.go index b56968fe3..6e93e2a12 100644 --- a/providers/dns/liquidweb/liquidweb.go +++ b/providers/dns/liquidweb/liquidweb.go @@ -62,8 +62,9 @@ func NewDefaultConfig() *Config { // DNSProvider implements the challenge.Provider interface. type DNSProvider struct { - config *Config - client *lw.API + config *Config + client *lw.API + recordIDs map[string]int recordIDsMu sync.Mutex } diff --git a/providers/dns/luadns/luadns.go b/providers/dns/luadns/luadns.go index 02108ce62..68b9c66b8 100644 --- a/providers/dns/luadns/luadns.go +++ b/providers/dns/luadns/luadns.go @@ -104,10 +104,9 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { client.HTTPClient = clientdebug.Wrap(client.HTTPClient) return &DNSProvider{ - config: config, - client: client, - recordsMu: sync.Mutex{}, - records: make(map[string]*internal.DNSRecord), + config: config, + client: client, + records: make(map[string]*internal.DNSRecord), }, nil } diff --git a/providers/dns/metaname/metaname.go b/providers/dns/metaname/metaname.go index d5d87dc4d..d6e962024 100644 --- a/providers/dns/metaname/metaname.go +++ b/providers/dns/metaname/metaname.go @@ -153,6 +153,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("metaname: delete record: %w", err) } + d.recordsMu.Lock() + delete(d.records, token) + d.recordsMu.Unlock() + return nil } diff --git a/providers/dns/mittwald/mittwald.go b/providers/dns/mittwald/mittwald.go index 6292dd787..dcd882482 100644 --- a/providers/dns/mittwald/mittwald.go +++ b/providers/dns/mittwald/mittwald.go @@ -170,6 +170,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("mittwald: update/delete TXT record: %w", err) } + d.zoneIDsMu.Lock() + delete(d.zoneIDs, token) + d.zoneIDsMu.Unlock() + return nil } diff --git a/providers/dns/nodion/nodion.go b/providers/dns/nodion/nodion.go index e34d7db28..4bc887568 100644 --- a/providers/dns/nodion/nodion.go +++ b/providers/dns/nodion/nodion.go @@ -208,5 +208,9 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("regru: failed to remove TXT records [domain: %s]: %w", dns01.UnFqdn(authZone), err) } + d.zoneIDsMu.Lock() + delete(d.zoneIDs, token) + d.zoneIDsMu.Unlock() + return nil } diff --git a/providers/dns/octenium/octenium.go b/providers/dns/octenium/octenium.go index af469f5ed..6032dcce1 100644 --- a/providers/dns/octenium/octenium.go +++ b/providers/dns/octenium/octenium.go @@ -169,6 +169,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { break } + d.domainIDsMu.Lock() + delete(d.domainIDs, token) + d.domainIDsMu.Unlock() + return nil } diff --git a/providers/dns/ovh/ovh.go b/providers/dns/ovh/ovh.go index b7e522540..a8d12d819 100644 --- a/providers/dns/ovh/ovh.go +++ b/providers/dns/ovh/ovh.go @@ -102,8 +102,9 @@ func (c *Config) hasAppKeyAuth() bool { // DNSProvider implements the challenge.Provider interface. type DNSProvider struct { - config *Config - client *ovh.Client + config *Config + client *ovh.Client + recordIDs map[string]int64 recordIDsMu sync.Mutex } diff --git a/providers/dns/plesk/plesk.go b/providers/dns/plesk/plesk.go index b764dff33..5f07dcb50 100644 --- a/providers/dns/plesk/plesk.go +++ b/providers/dns/plesk/plesk.go @@ -173,5 +173,9 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("plesk: failed to delete record (%d): %w", recordID, err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/porkbun/porkbun.go b/providers/dns/porkbun/porkbun.go index dc9efb013..2f999ebcc 100644 --- a/providers/dns/porkbun/porkbun.go +++ b/providers/dns/porkbun/porkbun.go @@ -171,6 +171,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("porkbun: failed to delete record: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/selfhostde/selfhostde.go b/providers/dns/selfhostde/selfhostde.go index bb475deea..035cd5363 100644 --- a/providers/dns/selfhostde/selfhostde.go +++ b/providers/dns/selfhostde/selfhostde.go @@ -186,5 +186,9 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("selfhostde: emptied DNS TXT record (id=%s): %w", recordID, err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/shellrent/shellrent.go b/providers/dns/shellrent/shellrent.go index 5a3a1f6de..0cd33e19a 100644 --- a/providers/dns/shellrent/shellrent.go +++ b/providers/dns/shellrent/shellrent.go @@ -172,6 +172,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("shellrent: delete record: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/syse/syse.go b/providers/dns/syse/syse.go index aab07131f..29633280c 100644 --- a/providers/dns/syse/syse.go +++ b/providers/dns/syse/syse.go @@ -172,6 +172,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("syse: delete record: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/variomedia/variomedia.go b/providers/dns/variomedia/variomedia.go index 90ac70a05..2d12fd975 100644 --- a/providers/dns/variomedia/variomedia.go +++ b/providers/dns/variomedia/variomedia.go @@ -180,6 +180,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("variomedia: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil } diff --git a/providers/dns/volcengine/volcengine.go b/providers/dns/volcengine/volcengine.go index 9a5886e6d..765d38adb 100644 --- a/providers/dns/volcengine/volcengine.go +++ b/providers/dns/volcengine/volcengine.go @@ -171,6 +171,10 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("volcengine: delete record: %w", err) } + d.recordIDsMu.Lock() + delete(d.recordIDs, token) + d.recordIDsMu.Unlock() + return nil }