dnscontrol/providers/powerdns/convert.go
2023-05-20 13:21:45 -04:00

41 lines
1.2 KiB
Go

package powerdns
import (
"strings"
"github.com/StackExchange/dnscontrol/v4/models"
"github.com/mittwald/go-powerdns/apis/zones"
)
// toRecordConfig converts a PowerDNS DNSRecord to a RecordConfig. #rtype_variations
func toRecordConfig(domain string, r zones.Record, ttl int, name string, rtype string) (*models.RecordConfig, error) {
// trimming trailing dot and domain from name
name = strings.TrimSuffix(name, domain+".")
name = strings.TrimSuffix(name, ".")
rc := &models.RecordConfig{
TTL: uint32(ttl),
Original: r,
Type: rtype,
}
rc.SetLabel(name, domain)
switch rtype {
case "TXT":
// PowerDNS API accepts long TXTs without requiring to split them
// The API then returns them as they initially came in, e.g. "averylooooooo[...]oooooongstring" or "string" "string"
// So we need to strip away " and split into multiple string
// We can't use SetTargetRFC1035Quoted, it would split the long strings into multiple parts
return rc, rc.SetTargetTXTs(parseTxt(r.Content))
default:
return rc, rc.PopulateFromString(rtype, r.Content, domain)
}
}
func parseTxt(content string) (result []string) {
for _, r := range strings.Split(content, "\" ") {
result = append(result, strings.Trim(r, "\""))
}
return
}