Skip to content

Commit

Permalink
fix: CNAME support (#1735)
Browse files Browse the repository at this point in the history
  • Loading branch information
ldez authored Nov 25, 2022
1 parent 1b56aa0 commit 6cc21f2
Show file tree
Hide file tree
Showing 43 changed files with 132 additions and 102 deletions.
1 change: 1 addition & 0 deletions providers/dns/acmedns/acmedns.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ func (d *DNSProvider) Present(domain, _, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

// Check if credentials were previously saved for this domain.
// TODO(ldez) replace domain by FQDN to follow CNAME.
account, err := d.storage.Fetch(domain)
// Errors other than goacmeDNS.ErrDomainNotFound are unexpected.
if err != nil && !errors.Is(err, goacmedns.ErrDomainNotFound) {
Expand Down
12 changes: 6 additions & 6 deletions providers/dns/alidns/alidns.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

zoneName, err := d.getHostedZone(domain)
zoneName, err := d.getHostedZone(fqdn)
if err != nil {
return fmt.Errorf("alicloud: %w", err)
}
Expand All @@ -153,12 +153,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, _ := dns01.GetRecord(domain, keyAuth)

records, err := d.findTxtRecords(domain, fqdn)
records, err := d.findTxtRecords(fqdn)
if err != nil {
return fmt.Errorf("alicloud: %w", err)
}

_, err = d.getHostedZone(domain)
_, err = d.getHostedZone(fqdn)
if err != nil {
return fmt.Errorf("alicloud: %w", err)
}
Expand Down Expand Up @@ -197,7 +197,7 @@ func (d *DNSProvider) getHostedZone(domain string) (string, error) {
startPage++
}

authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
authZone, err := dns01.FindZoneByFqdn(domain)
if err != nil {
return "", err
}
Expand Down Expand Up @@ -233,8 +233,8 @@ func (d *DNSProvider) newTxtRecord(zone, fqdn, value string) (*alidns.AddDomainR
return request, nil
}

func (d *DNSProvider) findTxtRecords(domain, fqdn string) ([]alidns.Record, error) {
zoneName, err := d.getHostedZone(domain)
func (d *DNSProvider) findTxtRecords(fqdn string) ([]alidns.Record, error) {
zoneName, err := d.getHostedZone(fqdn)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions providers/dns/auroradns/auroradns.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
authZone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil {
return fmt.Errorf("aurora: could not determine zone for domain %q: %w", domain, err)
}
Expand Down Expand Up @@ -158,7 +158,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
return fmt.Errorf("unknown recordID for %q", fqdn)
}

authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(fqdn))
if err != nil {
return fmt.Errorf("could not determine zone for domain %q: %w", domain, err)
}
Expand Down
2 changes: 2 additions & 0 deletions providers/dns/autodns/autodns.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
Value: value,
}}

// TODO(ldez) replace domain by FQDN to follow CNAME.
_, err := d.addTxtRecord(domain, records)
if err != nil {
return fmt.Errorf("autodns: %w", err)
Expand All @@ -133,6 +134,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
Value: value,
}}

// TODO(ldez) replace domain by FQDN to follow CNAME.
if err := d.removeTXTRecord(domain, records); err != nil {
return fmt.Errorf("autodns: %w", err)
}
Expand Down
12 changes: 7 additions & 5 deletions providers/dns/checkdomain/checkdomain.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {

// Present creates a TXT record to fulfill the dns-01 challenge.
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
// TODO(ldez) replace domain by FQDN to follow CNAME.
domainID, err := d.getDomainIDByName(domain)
if err != nil {
return fmt.Errorf("checkdomain: %w", err)
Expand All @@ -111,10 +112,10 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
return fmt.Errorf("checkdomain: %w", err)
}

name, value := dns01.GetRecord(domain, keyAuth)
fqdn, value := dns01.GetRecord(domain, keyAuth)

err = d.createRecord(domainID, &Record{
Name: name,
Name: fqdn,
TTL: d.config.TTL,
Type: "TXT",
Value: value,
Expand All @@ -129,6 +130,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {

// CleanUp removes the TXT record previously created.
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
// TODO(ldez) replace domain by FQDN to follow CNAME.
domainID, err := d.getDomainIDByName(domain)
if err != nil {
return fmt.Errorf("checkdomain: %w", err)
Expand All @@ -139,15 +141,15 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
return fmt.Errorf("checkdomain: %w", err)
}

name, value := dns01.GetRecord(domain, keyAuth)
fqdn, value := dns01.GetRecord(domain, keyAuth)

err = d.deleteTXTRecord(domainID, name, value)
err = d.deleteTXTRecord(domainID, fqdn, value)
if err != nil {
return fmt.Errorf("checkdomain: %w", err)
}

d.domainIDMu.Lock()
delete(d.domainIDMapping, name)
delete(d.domainIDMapping, fqdn)
d.domainIDMu.Unlock()

return nil
Expand Down
10 changes: 5 additions & 5 deletions providers/dns/dnsimple/dnsimple.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

zoneName, err := d.getHostedZone(domain)
zoneName, err := d.getHostedZone(fqdn)
if err != nil {
return fmt.Errorf("dnsimple: %w", err)
}
Expand All @@ -116,7 +116,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, _ := dns01.GetRecord(domain, keyAuth)

records, err := d.findTxtRecords(domain, fqdn)
records, err := d.findTxtRecords(fqdn)
if err != nil {
return fmt.Errorf("dnsimple: %w", err)
}
Expand Down Expand Up @@ -144,7 +144,7 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
}

func (d *DNSProvider) getHostedZone(domain string) (string, error) {
authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
authZone, err := dns01.FindZoneByFqdn(domain)
if err != nil {
return "", err
}
Expand Down Expand Up @@ -175,8 +175,8 @@ func (d *DNSProvider) getHostedZone(domain string) (string, error) {
return hostedZone.Name, nil
}

func (d *DNSProvider) findTxtRecords(domain, fqdn string) ([]dnsimple.ZoneRecord, error) {
zoneName, err := d.getHostedZone(domain)
func (d *DNSProvider) findTxtRecords(fqdn string) ([]dnsimple.ZoneRecord, error) {
zoneName, err := d.getHostedZone(fqdn)
if err != nil {
return nil, err
}
Expand Down
16 changes: 6 additions & 10 deletions providers/dns/dnspod/dnspod.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
// Present creates a TXT record to fulfill the dns-01 challenge.
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)
zoneID, zoneName, err := d.getHostedZone(domain)

zoneID, zoneName, err := d.getHostedZone(fqdn)
if err != nil {
return err
}
Expand All @@ -106,12 +107,12 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, _ := dns01.GetRecord(domain, keyAuth)

records, err := d.findTxtRecords(domain, fqdn)
zoneID, zoneName, err := d.getHostedZone(fqdn)
if err != nil {
return err
}

zoneID, _, err := d.getHostedZone(domain)
records, err := d.findTxtRecords(fqdn, zoneID, zoneName)
if err != nil {
return err
}
Expand All @@ -137,7 +138,7 @@ func (d *DNSProvider) getHostedZone(domain string) (string, string, error) {
return "", "", fmt.Errorf("API call failed: %w", err)
}

authZone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
authZone, err := dns01.FindZoneByFqdn(domain)
if err != nil {
return "", "", err
}
Expand Down Expand Up @@ -168,12 +169,7 @@ func (d *DNSProvider) newTxtRecord(zone, fqdn, value string, ttl int) *dnspod.Re
}
}

func (d *DNSProvider) findTxtRecords(domain, fqdn string) ([]dnspod.Record, error) {
zoneID, zoneName, err := d.getHostedZone(domain)
if err != nil {
return nil, err
}

func (d *DNSProvider) findTxtRecords(fqdn, zoneID, zoneName string) ([]dnspod.Record, error) {
recordName := extractRecordName(fqdn, zoneName)

var records []dnspod.Record
Expand Down
2 changes: 2 additions & 0 deletions providers/dns/dynu/dynu.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

// TODO(ldez) replace domain by FQDN to follow CNAME.
rootDomain, err := d.client.GetRootDomain(domain)
if err != nil {
return fmt.Errorf("dynu: could not find root domain for %s: %w", domain, err)
Expand Down Expand Up @@ -138,6 +139,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

// TODO(ldez) replace domain by FQDN to follow CNAME.
rootDomain, err := d.client.GetRootDomain(domain)
if err != nil {
return fmt.Errorf("dynu: could not find root domain for %s: %w", domain, err)
Expand Down
6 changes: 3 additions & 3 deletions providers/dns/edgedns/edgedns.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

zone, err := findZone(domain)
zone, err := findZone(fqdn)
if err != nil {
return fmt.Errorf("edgedns: %w", err)
}
Expand Down Expand Up @@ -161,7 +161,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

zone, err := findZone(domain)
zone, err := findZone(fqdn)
if err != nil {
return fmt.Errorf("edgedns: %w", err)
}
Expand Down Expand Up @@ -215,7 +215,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
}

func findZone(domain string) (string, error) {
zone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
zone, err := dns01.FindZoneByFqdn(domain)
if err != nil {
return "", err
}
Expand Down
2 changes: 1 addition & 1 deletion providers/dns/edgedns/edgedns_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ func TestLiveTTL(t *testing.T) {
}()

fqdn := "_acme-challenge." + domain + "."
zone, err := findZone(domain)
zone, err := findZone(fqdn)
require.NoError(t, err)

resourceRecordSets, err := configdns.GetRecordList(zone, fqdn, "TXT")
Expand Down
4 changes: 2 additions & 2 deletions providers/dns/edgedns/edgedns_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,12 @@ func TestDNSProvider_findZone(t *testing.T) {
}{
{
desc: "Extract root record name",
domain: "bar.com",
domain: "bar.com.",
expected: "bar.com",
},
{
desc: "Extract sub record name",
domain: "foo.bar.com",
domain: "foo.bar.com.",
expected: "bar.com",
},
}
Expand Down
10 changes: 6 additions & 4 deletions providers/dns/exoscale/exoscale.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
ctx := context.Background()
fqdn, value := dns01.GetRecord(domain, keyAuth)
zoneName, recordName, err := d.findZoneAndRecordName(fqdn, domain)

zoneName, recordName, err := d.findZoneAndRecordName(fqdn)
if err != nil {
return err
}
Expand Down Expand Up @@ -169,7 +170,8 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
ctx := context.Background()
fqdn, _ := dns01.GetRecord(domain, keyAuth)
zoneName, recordName, err := d.findZoneAndRecordName(fqdn, domain)

zoneName, recordName, err := d.findZoneAndRecordName(fqdn)
if err != nil {
return err
}
Expand Down Expand Up @@ -244,8 +246,8 @@ func (d *DNSProvider) findExistingRecordID(zoneID, recordName string) (string, e
}

// findZoneAndRecordName Extract DNS zone and DNS entry name.
func (d *DNSProvider) findZoneAndRecordName(fqdn, domain string) (string, string, error) {
zone, err := dns01.FindZoneByFqdn(dns01.ToFqdn(domain))
func (d *DNSProvider) findZoneAndRecordName(fqdn string) (string, string, error) {
zone, err := dns01.FindZoneByFqdn(fqdn)
if err != nil {
return "", "", err
}
Expand Down
13 changes: 5 additions & 8 deletions providers/dns/exoscale/exoscale_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,22 +140,19 @@ func TestDNSProvider_FindZoneAndRecordName(t *testing.T) {
testCases := []struct {
desc string
fqdn string
domain string
expected expected
}{
{
desc: "Extract root record name",
fqdn: "_acme-challenge.bar.com.",
domain: "bar.com",
desc: "Extract root record name",
fqdn: "_acme-challenge.bar.com.",
expected: expected{
zone: "bar.com",
recordName: "_acme-challenge",
},
},
{
desc: "Extract sub record name",
fqdn: "_acme-challenge.foo.bar.com.",
domain: "foo.bar.com",
desc: "Extract sub record name",
fqdn: "_acme-challenge.foo.bar.com.",
expected: expected{
zone: "bar.com",
recordName: "_acme-challenge.foo",
Expand All @@ -168,7 +165,7 @@ func TestDNSProvider_FindZoneAndRecordName(t *testing.T) {
t.Run(test.desc, func(t *testing.T) {
t.Parallel()

zone, recordName, err := provider.findZoneAndRecordName(test.fqdn, test.domain)
zone, recordName, err := provider.findZoneAndRecordName(test.fqdn)
require.NoError(t, err)
assert.Equal(t, test.expected.zone, zone)
assert.Equal(t, test.expected.recordName, recordName)
Expand Down
2 changes: 2 additions & 0 deletions providers/dns/glesys/glesys.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
defer d.inProgressMu.Unlock()

// add TXT record into authZone
// TODO(ldez) replace domain by FQDN to follow CNAME.
recordID, err := d.addTXTRecord(domain, dns01.UnFqdn(authZone), name, value, d.config.TTL)
if err != nil {
return err
Expand All @@ -146,6 +147,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
delete(d.activeRecords, fqdn)

// delete TXT record from authZone
// TODO(ldez) replace domain by FQDN to follow CNAME.
return d.deleteTXTRecord(domain, recordID)
}

Expand Down
2 changes: 2 additions & 0 deletions providers/dns/ibmcloud/ibmcloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value := dns01.GetRecord(domain, keyAuth)

// TODO(ldez) replace domain by FQDN to follow CNAME.
err := d.wrapper.AddTXTRecord(fqdn, domain, value, d.config.TTL)
if err != nil {
return fmt.Errorf("ibmcloud: %w", err)
Expand All @@ -120,6 +121,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, _ := dns01.GetRecord(domain, keyAuth)

// TODO(ldez) replace domain by FQDN to follow CNAME.
err := d.wrapper.CleanupTXTRecord(fqdn, domain)
if err != nil {
return fmt.Errorf("ibmcloud: %w", err)
Expand Down
Loading

0 comments on commit 6cc21f2

Please sign in to comment.