Merge pull request #6191 from Richardds/fix-dns-01-cloudflare
Handle multiple Cloudflare DNS01 challenges for the same FQDN
This commit is contained in:
commit
7482de8bac
@ -141,41 +141,33 @@ func FindNearestZoneForFQDN(c DNSProviderType, fqdn string) (DNSZone, error) {
|
||||
|
||||
// Present creates a TXT record to fulfil the dns-01 challenge
|
||||
func (c *DNSProvider) Present(domain, fqdn, value string) error {
|
||||
zoneID, err := c.getHostedZoneID(fqdn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
record, err := c.findTxtRecord(fqdn)
|
||||
if err != nil && err != errNoExistingRecord {
|
||||
// this is a real error
|
||||
return err
|
||||
}
|
||||
if record != nil {
|
||||
if record.Content == value {
|
||||
// the record is already set to the desired value
|
||||
return nil
|
||||
_, err := c.findTxtRecord(fqdn, value)
|
||||
if err == errNoExistingRecord {
|
||||
rec := cloudFlareRecord{
|
||||
Type: "TXT",
|
||||
Name: util.UnFqdn(fqdn),
|
||||
Content: value,
|
||||
TTL: 120,
|
||||
}
|
||||
|
||||
_, err = c.makeRequest("DELETE", fmt.Sprintf("/zones/%s/dns_records/%s", record.ZoneID, record.ID), nil)
|
||||
body, err := json.Marshal(rec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
zoneID, err := c.getHostedZoneID(fqdn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = c.makeRequest("POST", fmt.Sprintf("/zones/%s/dns_records", zoneID), bytes.NewReader(body))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
rec := cloudFlareRecord{
|
||||
Type: "TXT",
|
||||
Name: util.UnFqdn(fqdn),
|
||||
Content: value,
|
||||
TTL: 120,
|
||||
}
|
||||
|
||||
body, err := json.Marshal(rec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = c.makeRequest("POST", fmt.Sprintf("/zones/%s/dns_records", zoneID), bytes.NewReader(body))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -185,7 +177,7 @@ func (c *DNSProvider) Present(domain, fqdn, value string) error {
|
||||
|
||||
// CleanUp removes the TXT record matching the specified parameters
|
||||
func (c *DNSProvider) CleanUp(domain, fqdn, value string) error {
|
||||
record, err := c.findTxtRecord(fqdn)
|
||||
record, err := c.findTxtRecord(fqdn, value)
|
||||
// Nothing to cleanup
|
||||
if err == errNoExistingRecord {
|
||||
return nil
|
||||
@ -212,7 +204,7 @@ func (c *DNSProvider) getHostedZoneID(fqdn string) (string, error) {
|
||||
|
||||
var errNoExistingRecord = errors.New("No existing record found")
|
||||
|
||||
func (c *DNSProvider) findTxtRecord(fqdn string) (*cloudFlareRecord, error) {
|
||||
func (c *DNSProvider) findTxtRecord(fqdn, content string) (*cloudFlareRecord, error) {
|
||||
zoneID, err := c.getHostedZoneID(fqdn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -234,7 +226,7 @@ func (c *DNSProvider) findTxtRecord(fqdn string) (*cloudFlareRecord, error) {
|
||||
}
|
||||
|
||||
for _, rec := range records {
|
||||
if rec.Name == util.UnFqdn(fqdn) {
|
||||
if rec.Name == util.UnFqdn(fqdn) && rec.Content == content {
|
||||
return &rec, nil
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user