mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-01-12 02:17:43 +08:00
40 lines
1.2 KiB
Go
40 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
|
|
}
|