Skip to content

Commit

Permalink
CLOUDFLAREAPI: Add NAPTR record support (#2548)
Browse files Browse the repository at this point in the history
  • Loading branch information
asn-iac committed Sep 7, 2023
1 parent 0b5de1a commit af91e37
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
2 changes: 1 addition & 1 deletion documentation/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ If a feature is definitively not supported for whatever reason, we would also li
| [`AXFRDDNS`](providers/axfrddns.md) |||||||||||||||||||
| [`AZURE_DNS`](providers/azure_dns.md) |||||||||||||||||||
| [`BIND`](providers/bind.md) |||||||||||||||||||
| [`CLOUDFLAREAPI`](providers/cloudflareapi.md) |||||||| |||||||||||
| [`CLOUDFLAREAPI`](providers/cloudflareapi.md) |||||||| |||||||||||
| [`CLOUDNS`](providers/cloudns.md) |||||||||||||||||||
| [`CSCGLOBAL`](providers/cscglobal.md) |||||||||||||||||||
| [`DESEC`](providers/desec.md) |||||||||||||||||||
Expand Down
10 changes: 10 additions & 0 deletions providers/cloudflare/cloudflareProvider.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ var features = providers.DocumentationNotes{
providers.CanUseCAA: providers.Can(),
providers.CanUseDSForChildren: providers.Can(),
providers.CanUseLOC: providers.Cannot(),
providers.CanUseNAPTR: providers.Can(),
providers.CanUsePTR: providers.Can(),
providers.CanUseSRV: providers.Can(),
providers.CanUseSSHFP: providers.Can(),
Expand Down Expand Up @@ -793,6 +794,15 @@ func (c cfTarget) FQDN() string {
return strings.TrimRight(string(c), ".") + "."
}

type cfNaptrRecData struct {
Flags string `json:"flags"`
Order uint16 `json:"order"`
Preference uint16 `json:"preference"`
Regex string `json:"regex"`
Replacement string `json:"replacement"`
Service string `json:"service"`
}

// uint16Zero converts value to uint16 or returns 0.
func uint16Zero(value interface{}) uint16 {
switch v := value.(type) {
Expand Down
20 changes: 20 additions & 0 deletions providers/cloudflare/rest.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,17 @@ func cfSshfpData(rec *models.RecordConfig) *cfRecData {
}
}

func cfNaptrData(rec *models.RecordConfig) *cfNaptrRecData {
return &cfNaptrRecData{
Flags: rec.NaptrFlags,
Order: rec.NaptrOrder,
Preference: rec.NaptrPreference,
Regex: rec.NaptrRegexp,
Replacement: rec.GetTargetField(),
Service: rec.NaptrService,
}
}

func (c *cloudflareProvider) createRec(rec *models.RecordConfig, domainID string) []*models.Correction {
var id string
content := rec.GetTargetField()
Expand Down Expand Up @@ -159,6 +170,9 @@ func (c *cloudflareProvider) createRec(rec *models.RecordConfig, domainID string
cf.Name = rec.GetLabelFQDN()
} else if rec.Type == "DS" {
cf.Data = cfDSData(rec)
} else if rec.Type == "NAPTR" {
cf.Data = cfNaptrData(rec)
cf.Name = rec.GetLabelFQDN()
}
resp, err := c.cfClient.CreateDNSRecord(context.Background(), cloudflare.ZoneIdentifier(domainID), cf)
if err != nil {
Expand Down Expand Up @@ -225,6 +239,9 @@ func (c *cloudflareProvider) createRecDiff2(rec *models.RecordConfig, domainID s
cf.Name = rec.GetLabelFQDN()
} else if rec.Type == "DS" {
cf.Data = cfDSData(rec)
} else if rec.Type == "NAPTR" {
cf.Data = cfNaptrData(rec)
cf.Name = rec.GetLabelFQDN()
}
resp, err := c.cfClient.CreateDNSRecord(context.Background(), cloudflare.ZoneIdentifier(domainID), cf)
if err != nil {
Expand Down Expand Up @@ -275,6 +292,9 @@ func (c *cloudflareProvider) modifyRecord(domainID, recID string, proxied bool,
} else if rec.Type == "DS" {
r.Data = cfDSData(rec)
r.Content = ""
} else if rec.Type == "NAPTR" {
r.Data = cfNaptrData(rec)
r.Name = rec.GetLabelFQDN()
}
_, err := c.cfClient.UpdateDNSRecord(context.Background(), cloudflare.ZoneIdentifier(domainID), r)
return err
Expand Down

0 comments on commit af91e37

Please sign in to comment.