mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-09 13:46:07 +08:00
Remove FakeDC hack. Replace with DC Name Varieties
This commit is contained in:
parent
26b1913961
commit
b0a909b853
15 changed files with 98 additions and 90 deletions
|
|
@ -12,6 +12,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v4/models"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/nameservers"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/zonerecs"
|
||||
|
|
@ -27,7 +28,7 @@ var (
|
|||
)
|
||||
|
||||
// Global variable to hold the current DomainConfig for use in FromRaw calls.
|
||||
var globalDC *models.DomainConfig
|
||||
var globalDCN *domaintags.DomainNameVarieties
|
||||
|
||||
// Helper constants/funcs for the CLOUDFLARE proxy testing:
|
||||
|
||||
|
|
@ -203,7 +204,7 @@ func makeChanges(t *testing.T, prv providers.DNSServiceProvider, dc *models.Doma
|
|||
|
||||
func runTests(t *testing.T, prv providers.DNSServiceProvider, domainName string, origConfig map[string]string) {
|
||||
dc := getDomainConfigWithNameservers(t, prv, domainName)
|
||||
globalDC = dc
|
||||
globalDCN = dc.DomainNameVarieties()
|
||||
|
||||
testGroups := makeTests()
|
||||
|
||||
|
|
@ -343,7 +344,7 @@ func cfSingleRedirectEnabled() bool {
|
|||
}
|
||||
|
||||
func cfSingleRedirect(name string, code any, when, then string) *models.RecordConfig {
|
||||
rec, err := rtypecontrol.NewRecordConfigFromRaw("CLOUDFLAREAPI_SINGLE_REDIRECT", 1, []any{name, code, when, then}, globalDC)
|
||||
rec, err := rtypecontrol.NewRecordConfigFromRaw("CLOUDFLAREAPI_SINGLE_REDIRECT", 1, []any{name, code, when, then}, globalDCN)
|
||||
panicOnErr(err)
|
||||
return rec
|
||||
}
|
||||
|
|
@ -355,13 +356,13 @@ func cfWorkerRoute(pattern, target string) *models.RecordConfig {
|
|||
}
|
||||
|
||||
func cfRedir(pattern, target string) *models.RecordConfig {
|
||||
rec, err := rtypecontrol.NewRecordConfigFromRaw("CF_REDIRECT", 1, []any{pattern, target}, globalDC)
|
||||
rec, err := rtypecontrol.NewRecordConfigFromRaw("CF_REDIRECT", 1, []any{pattern, target}, globalDCN)
|
||||
panicOnErr(err)
|
||||
return rec
|
||||
}
|
||||
|
||||
func cfRedirTemp(pattern, target string) *models.RecordConfig {
|
||||
rec, err := rtypecontrol.NewRecordConfigFromRaw("CF_TEMP_REDIRECT", 1, []any{pattern, target}, globalDC)
|
||||
rec, err := rtypecontrol.NewRecordConfigFromRaw("CF_TEMP_REDIRECT", 1, []any{pattern, target}, globalDCN)
|
||||
panicOnErr(err)
|
||||
return rec
|
||||
}
|
||||
|
|
@ -487,7 +488,7 @@ func r53alias(name, aliasType, target, evalTargetHealth string) *models.RecordCo
|
|||
}
|
||||
|
||||
func rp(name string, m, t string) *models.RecordConfig {
|
||||
rec, err := rtypecontrol.NewRecordConfigFromRaw("RP", 300, []any{name, m, t}, globalDC)
|
||||
rec, err := rtypecontrol.NewRecordConfigFromRaw("RP", 300, []any{name, m, t}, globalDCN)
|
||||
panicOnErr(err)
|
||||
return rec
|
||||
}
|
||||
|
|
|
|||
|
|
@ -233,13 +233,14 @@ func (dc *DomainConfig) GetPopulateCorrections(providerName string) []*Correctio
|
|||
return dc.pendingPopulateCorrections[providerName]
|
||||
}
|
||||
|
||||
// MakeFakeDomainConfig makes a DomainConfig with the given domain name. This is a workaround so we don't have to change sygnatures of every function that needs a DomainConfig.
|
||||
// In the future we'll eliminate this by passing a DomainFixedForms instead (and possibly renaming DomainFixedForms).
|
||||
func MakeFakeDomainConfig(domain string) *DomainConfig {
|
||||
v := domaintags.MakeDomainNameVarieties(domain)
|
||||
return &DomainConfig{
|
||||
Name: v.NameASCII,
|
||||
NameRaw: v.NameRaw,
|
||||
NameUnicode: v.NameUnicode,
|
||||
// DomainNameVarieties returns the domain's names in various forms.
|
||||
func (dc *DomainConfig) DomainNameVarieties() *domaintags.DomainNameVarieties {
|
||||
return &domaintags.DomainNameVarieties{
|
||||
NameRaw: dc.NameRaw,
|
||||
NameASCII: dc.Name,
|
||||
NameUnicode: dc.NameUnicode,
|
||||
UniqueName: dc.UniqueName,
|
||||
Tag: dc.Tag,
|
||||
HasBang: dc.Tag != "",
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,25 +6,24 @@ import (
|
|||
"golang.org/x/net/idna"
|
||||
)
|
||||
|
||||
// DomainFixedForms stores the various fixed forms of a domain name and tag.
|
||||
// TODO(tlim): Rename this to DomainNameVarieties or something similar.
|
||||
type DomainFixedForms struct {
|
||||
NameRaw string // "originalinput.com" (name as input by the user, lowercased (no tag))
|
||||
NameASCII string // "punycode.com"
|
||||
NameUnicode string // "unicode.com" (converted to downcase BEFORE unicode conversion)
|
||||
UniqueName string // "punycode.com!tag"
|
||||
// DomainNameVarieties stores the various forms of a domain name and tag.
|
||||
type DomainNameVarieties struct {
|
||||
NameRaw string // "originalinput.com" (name as input by the user (no tag))
|
||||
NameASCII string // "punycode.com" (converted to punycode and downcase)
|
||||
NameUnicode string // "unicode.com" (converted to unicode, ASCII portions downcased)
|
||||
UniqueName string // "punycode.com!tag" (canonical unique name with tag)
|
||||
|
||||
Tag string // The tag portion of `example.com!tag`
|
||||
HasBang bool // Was there a "!" in the input when creating this struct?
|
||||
}
|
||||
|
||||
// MakeDomainFixedForms turns the user-supplied name into the fixed forms.
|
||||
// MakeDomainNameVarieties turns the user-supplied name into the varioius forms.
|
||||
// * .Tag: the domain tag (of "example.com!tag")
|
||||
// * .NameRaw: lowercase version of how the user input the name in dnsconfig.js.
|
||||
// * .Name: punycode version, downcased.
|
||||
// * .NameRaw: how the user input the name in dnsconfig.js (no tag)
|
||||
// * .NameASCII: punycode version, downcased
|
||||
// * .NameUnicode: unicode version of the name, downcased.
|
||||
// * .UniqueName: "example.com!tag" unique across the entire config.
|
||||
func MakeDomainNameVarieties(n string) DomainFixedForms {
|
||||
func MakeDomainNameVarieties(n string) *DomainNameVarieties {
|
||||
var err error
|
||||
var tag, nameRaw, nameASCII, nameUnicode, uniqueName string
|
||||
var hasBang bool
|
||||
|
|
@ -74,7 +73,7 @@ func MakeDomainNameVarieties(n string) DomainFixedForms {
|
|||
uniqueName = nameASCII
|
||||
}
|
||||
|
||||
return DomainFixedForms{
|
||||
return &DomainNameVarieties{
|
||||
Tag: tag,
|
||||
NameRaw: nameRaw,
|
||||
NameASCII: nameASCII,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import (
|
|||
type PermitList struct {
|
||||
// If the permit list is "all" or "".
|
||||
all bool
|
||||
items []DomainFixedForms
|
||||
items []*DomainNameVarieties
|
||||
}
|
||||
|
||||
// CompilePermitList compiles a list of domain strings into a PermitList structure. The
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package rtype
|
|||
|
||||
import (
|
||||
"github.com/StackExchange/dnscontrol/v4/models"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
|
@ -20,7 +21,7 @@ func (handle *RP) Name() string {
|
|||
}
|
||||
|
||||
// FromArgs fills in the RecordConfig from []any, which is typically from a parsed config file.
|
||||
func (handle *RP) FromArgs(dc *models.DomainConfig, rec *models.RecordConfig, args []any) error {
|
||||
func (handle *RP) FromArgs(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, args []any) error {
|
||||
if err := rtypecontrol.PaveArgs(args[1:], "ss"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -31,11 +32,11 @@ func (handle *RP) FromArgs(dc *models.DomainConfig, rec *models.RecordConfig, ar
|
|||
},
|
||||
}
|
||||
|
||||
return handle.FromStruct(dc, rec, args[0].(string), fields)
|
||||
return handle.FromStruct(dcn, rec, args[0].(string), fields)
|
||||
}
|
||||
|
||||
// FromStruct fills in the RecordConfig from a struct, typically from an API response.
|
||||
func (handle *RP) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, name string, fields any) error {
|
||||
func (handle *RP) FromStruct(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, name string, fields any) error {
|
||||
rec.F = fields
|
||||
|
||||
rec.ZonefilePartial = rec.GetTargetRFC1035Quoted()
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ func ImportRawRecords(domains []*models.DomainConfig) error {
|
|||
for _, dc := range domains {
|
||||
for _, rawRec := range dc.RawRecords {
|
||||
|
||||
rec, err := NewRecordConfigFromRaw(rawRec.Type, rawRec.TTL, rawRec.Args, dc)
|
||||
rec, err := NewRecordConfigFromRaw(rawRec.Type, rawRec.TTL, rawRec.Args, dc.DomainNameVarieties())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -32,7 +32,7 @@ func ImportRawRecords(domains []*models.DomainConfig) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func NewRecordConfigFromRaw(t string, ttl uint32, args []any, dc *models.DomainConfig) (*models.RecordConfig, error) {
|
||||
func NewRecordConfigFromRaw(t string, ttl uint32, args []any, dcn *domaintags.DomainNameVarieties) (*models.RecordConfig, error) {
|
||||
if _, ok := Func[t]; !ok {
|
||||
return nil, fmt.Errorf("record type %q is not supported", t)
|
||||
}
|
||||
|
|
@ -46,10 +46,10 @@ func NewRecordConfigFromRaw(t string, ttl uint32, args []any, dc *models.DomainC
|
|||
TTL: ttl,
|
||||
Metadata: map[string]string{},
|
||||
}
|
||||
setRecordNames(rec, dc, args[0].(string))
|
||||
setRecordNames(rec, dcn, args[0].(string))
|
||||
|
||||
// Fill in the .F/.Fields* fields.
|
||||
err := Func[t].FromArgs(dc, rec, args)
|
||||
err := Func[t].FromArgs(dcn, rec, args)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -57,7 +57,7 @@ func NewRecordConfigFromRaw(t string, ttl uint32, args []any, dc *models.DomainC
|
|||
return rec, nil
|
||||
}
|
||||
|
||||
func NewRecordConfigFromString(name string, ttl uint32, t string, s string, dc *models.DomainConfig) (*models.RecordConfig, error) {
|
||||
func NewRecordConfigFromString(name string, ttl uint32, t string, s string, dcn *domaintags.DomainNameVarieties) (*models.RecordConfig, error) {
|
||||
if _, ok := Func[t]; !ok {
|
||||
return nil, fmt.Errorf("record type %q is not supported", t)
|
||||
}
|
||||
|
|
@ -69,11 +69,11 @@ func NewRecordConfigFromString(name string, ttl uint32, t string, s string, dc *
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return NewRecordConfigFromStruct(name, ttl, t, rec, dc)
|
||||
return NewRecordConfigFromStruct(name, ttl, t, rec, dcn)
|
||||
|
||||
}
|
||||
|
||||
func NewRecordConfigFromStruct(name string, ttl uint32, t string, fields any, dc *models.DomainConfig) (*models.RecordConfig, error) {
|
||||
func NewRecordConfigFromStruct(name string, ttl uint32, t string, fields any, dcn *domaintags.DomainNameVarieties) (*models.RecordConfig, error) {
|
||||
if _, ok := Func[t]; !ok {
|
||||
return nil, fmt.Errorf("record type %q is not supported", t)
|
||||
}
|
||||
|
|
@ -87,9 +87,9 @@ func NewRecordConfigFromStruct(name string, ttl uint32, t string, fields any, dc
|
|||
TTL: ttl,
|
||||
Metadata: map[string]string{},
|
||||
}
|
||||
setRecordNames(rec, dc, name)
|
||||
setRecordNames(rec, dcn, name)
|
||||
|
||||
err := Func[t].FromStruct(dc, rec, name, fields)
|
||||
err := Func[t].FromStruct(dcn, rec, name, fields)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ func NewRecordConfigFromStruct(name string, ttl uint32, t string, fields any, dc
|
|||
}
|
||||
|
||||
// setRecordNames updates the .Name* fields.
|
||||
func setRecordNames(rec *models.RecordConfig, dc *models.DomainConfig, n string) {
|
||||
func setRecordNames(rec *models.RecordConfig, dcn *domaintags.DomainNameVarieties, n string) {
|
||||
// FYI(tlim): This code could be collapse
|
||||
if rec.SubDomain == "" {
|
||||
// Not _EXTEND() mode:
|
||||
|
|
@ -106,19 +106,19 @@ func setRecordNames(rec *models.RecordConfig, dc *models.DomainConfig, n string)
|
|||
rec.Name = "@"
|
||||
rec.NameRaw = "@"
|
||||
rec.NameUnicode = "@"
|
||||
rec.NameFQDN = dc.Name
|
||||
rec.NameFQDNRaw = dc.NameRaw
|
||||
rec.NameFQDNUnicode = dc.NameUnicode
|
||||
rec.NameFQDN = dc.Name
|
||||
rec.NameFQDNRaw = dc.NameRaw
|
||||
rec.NameFQDNUnicode = dc.NameUnicode
|
||||
rec.NameFQDN = dcn.NameASCII
|
||||
rec.NameFQDNRaw = dcn.NameRaw
|
||||
rec.NameFQDNUnicode = dcn.NameUnicode
|
||||
rec.NameFQDN = dcn.NameASCII
|
||||
rec.NameFQDNRaw = dcn.NameRaw
|
||||
rec.NameFQDNUnicode = dcn.NameUnicode
|
||||
} else {
|
||||
rec.Name = strings.ToLower(domaintags.EfficientToASCII(n))
|
||||
rec.NameRaw = n
|
||||
rec.NameUnicode = domaintags.EfficientToUnicode(n)
|
||||
rec.NameFQDN = rec.Name + "." + dc.Name
|
||||
rec.NameFQDNRaw = rec.NameRaw + "." + dc.NameRaw
|
||||
rec.NameFQDNUnicode = rec.NameUnicode + "." + dc.NameUnicode
|
||||
rec.NameFQDN = rec.Name + "." + dcn.NameASCII
|
||||
rec.NameFQDNRaw = rec.NameRaw + "." + dcn.NameRaw
|
||||
rec.NameFQDNUnicode = rec.NameUnicode + "." + dcn.NameUnicode
|
||||
}
|
||||
} else {
|
||||
// D_EXTEND() mode:
|
||||
|
|
@ -129,16 +129,16 @@ func setRecordNames(rec *models.RecordConfig, dc *models.DomainConfig, n string)
|
|||
rec.Name = sdASCII
|
||||
rec.NameRaw = sdRaw
|
||||
rec.NameUnicode = sdUnicode
|
||||
rec.NameFQDN = rec.Name + "." + dc.Name
|
||||
rec.NameFQDNRaw = rec.NameRaw + "." + dc.NameRaw
|
||||
rec.NameFQDNUnicode = rec.NameUnicode + "." + dc.NameUnicode
|
||||
rec.NameFQDN = rec.Name + "." + dcn.NameASCII
|
||||
rec.NameFQDNRaw = rec.NameRaw + "." + dcn.NameRaw
|
||||
rec.NameFQDNUnicode = rec.NameUnicode + "." + dcn.NameUnicode
|
||||
} else {
|
||||
rec.Name = domaintags.EfficientToASCII(n) + "." + sdASCII
|
||||
rec.NameRaw = n + "." + sdRaw
|
||||
rec.NameUnicode = domaintags.EfficientToUnicode(rec.Name)
|
||||
rec.NameFQDN = rec.Name + "." + dc.Name
|
||||
rec.NameFQDNRaw = rec.NameRaw + "." + dc.NameRaw
|
||||
rec.NameFQDNUnicode = rec.NameUnicode + "." + dc.NameUnicode
|
||||
rec.NameFQDN = rec.Name + "." + dcn.NameASCII
|
||||
rec.NameFQDNRaw = rec.NameRaw + "." + dcn.NameRaw
|
||||
rec.NameFQDNUnicode = rec.NameUnicode + "." + dcn.NameUnicode
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v4/models"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||
"github.com/StackExchange/dnscontrol/v4/providers"
|
||||
)
|
||||
|
||||
|
|
@ -15,8 +16,8 @@ type RType interface {
|
|||
Name() string
|
||||
|
||||
// RecordConfig factory. Updates a RecordConfig's fields based on args.
|
||||
FromArgs(*models.DomainConfig, *models.RecordConfig, []any) error
|
||||
FromStruct(*models.DomainConfig, *models.RecordConfig, string, any) error
|
||||
FromArgs(*domaintags.DomainNameVarieties, *models.RecordConfig, []any) error
|
||||
FromStruct(*domaintags.DomainNameVarieties, *models.RecordConfig, string, any) error
|
||||
|
||||
CopyToLegacyFields(*models.RecordConfig)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,16 +4,17 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v4/models"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||
)
|
||||
|
||||
func TestSetRecordNames(t *testing.T) {
|
||||
dc := &models.DomainConfig{
|
||||
Name: "example.com",
|
||||
dc := &domaintags.DomainNameVarieties{
|
||||
NameASCII: "example.com",
|
||||
NameRaw: "example.com",
|
||||
NameUnicode: "example.com",
|
||||
}
|
||||
dcIDN := &models.DomainConfig{
|
||||
Name: "xn--bcher-kva.com",
|
||||
dcIDN := &domaintags.DomainNameVarieties{
|
||||
NameASCII: "xn--bcher-kva.com",
|
||||
NameRaw: "bücher.com",
|
||||
NameUnicode: "bücher.com",
|
||||
}
|
||||
|
|
@ -21,7 +22,7 @@ func TestSetRecordNames(t *testing.T) {
|
|||
tests := []struct {
|
||||
name string
|
||||
rec *models.RecordConfig
|
||||
dc *models.DomainConfig
|
||||
dc *domaintags.DomainNameVarieties
|
||||
n string
|
||||
expectedRec *models.RecordConfig
|
||||
}{
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ func (c *bindProvider) GetZoneRecords(domain string, meta map[string]string) (mo
|
|||
if _, err := os.Stat(c.directory); os.IsNotExist(err) {
|
||||
printer.Printf("\nWARNING: BIND directory %q does not exist! (will create)\n", c.directory)
|
||||
}
|
||||
ff := domaintags.DomainFixedForms{
|
||||
ff := domaintags.DomainNameVarieties{
|
||||
Tag: meta[models.DomainTag],
|
||||
NameRaw: meta[models.DomainNameRaw],
|
||||
NameASCII: domain,
|
||||
|
|
@ -216,7 +216,7 @@ func ParseZoneContents(content string, zoneName string, zonefileName string) (mo
|
|||
case dns.TypeRP:
|
||||
name := rr.Header().Name
|
||||
name = strings.TrimSuffix(name, ".")
|
||||
prec, err = rtypecontrol.NewRecordConfigFromStruct(name, rr.Header().Ttl, "RP", rr, models.MakeFakeDomainConfig(zoneName))
|
||||
prec, err = rtypecontrol.NewRecordConfigFromStruct(name, rr.Header().Ttl, "RP", rr, domaintags.MakeDomainNameVarieties(zoneName))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -301,7 +301,7 @@ func (c *bindProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, foundR
|
|||
zonefile = filepath.Join(c.directory,
|
||||
makeFileName(
|
||||
c.filenameformat,
|
||||
domaintags.DomainFixedForms{
|
||||
domaintags.DomainNameVarieties{
|
||||
Tag: dc.Tag,
|
||||
NameRaw: dc.NameRaw,
|
||||
NameASCII: dc.Name,
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import (
|
|||
)
|
||||
|
||||
// makeFileName uses format to generate a zone's filename. See the
|
||||
func makeFileName(format string, ff domaintags.DomainFixedForms) string {
|
||||
func makeFileName(format string, ff domaintags.DomainNameVarieties) string {
|
||||
//fmt.Printf("DEBUG: makeFileName(%q, %+v)\n", format, ff)
|
||||
if format == "" {
|
||||
panic("BUG: makeFileName called with null format")
|
||||
|
|
|
|||
|
|
@ -15,14 +15,14 @@ func Test_makeFileName(t *testing.T) {
|
|||
fmtErrorOpt := "literal%?"
|
||||
fmtErrorUnk := "literal%o" // Unknown % verb
|
||||
|
||||
ff := domaintags.DomainFixedForms{
|
||||
ff := domaintags.DomainNameVarieties{
|
||||
NameRaw: "domy",
|
||||
NameASCII: "idn",
|
||||
NameUnicode: "uni",
|
||||
UniqueName: "unique!taga",
|
||||
Tag: "tagy",
|
||||
}
|
||||
tagless := domaintags.DomainFixedForms{
|
||||
tagless := domaintags.DomainNameVarieties{
|
||||
NameRaw: "domy",
|
||||
NameASCII: "idn",
|
||||
NameUnicode: "uni",
|
||||
|
|
@ -32,7 +32,7 @@ func Test_makeFileName(t *testing.T) {
|
|||
|
||||
type args struct {
|
||||
format string
|
||||
ff domaintags.DomainFixedForms
|
||||
ff domaintags.DomainNameVarieties
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
|
|
@ -63,9 +63,9 @@ func Test_makeFileName(t *testing.T) {
|
|||
}
|
||||
|
||||
func Test_makeFileName_2(t *testing.T) {
|
||||
ff1 := domaintags.MakeDomainNameVarieties(`EXAMple.com`)
|
||||
ff2 := domaintags.MakeDomainNameVarieties(`EXAMple.com!myTag`)
|
||||
ff3 := domaintags.MakeDomainNameVarieties(`рф.com!myTag`)
|
||||
ff1 := *domaintags.MakeDomainNameVarieties(`EXAMple.com`)
|
||||
ff2 := *domaintags.MakeDomainNameVarieties(`EXAMple.com!myTag`)
|
||||
ff3 := *domaintags.MakeDomainNameVarieties(`рф.com!myTag`)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import (
|
|||
"golang.org/x/net/idna"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v4/models"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
|
||||
"github.com/StackExchange/dnscontrol/v4/providers/cloudflare/rtypes/cfsingleredirect"
|
||||
)
|
||||
|
|
@ -325,7 +326,7 @@ func (c *cloudflareProvider) getSingleRedirects(id string, domain string) ([]*mo
|
|||
"CLOUDFLAREAPI_SINGLE_REDIRECT",
|
||||
1,
|
||||
[]any{srName, code, srWhen, srThen},
|
||||
models.MakeFakeDomainConfig(domain))
|
||||
domaintags.MakeDomainNameVarieties(domain))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
"sync"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v4/models"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
|
||||
)
|
||||
|
||||
|
|
@ -20,11 +21,11 @@ func (handle *CfRedirect) Name() string {
|
|||
return "CF_REDIRECT"
|
||||
}
|
||||
|
||||
func (handle *CfRedirect) FromArgs(dc *models.DomainConfig, rec *models.RecordConfig, args []any) error {
|
||||
return FromArgs_helper(dc, rec, args, 301)
|
||||
func (handle *CfRedirect) FromArgs(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, args []any) error {
|
||||
return FromArgs_helper(dcn, rec, args, 301)
|
||||
}
|
||||
|
||||
func (handle *CfRedirect) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, name string, fields any) error {
|
||||
func (handle *CfRedirect) FromStruct(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, name string, fields any) error {
|
||||
panic("CF_REDIRECT: FromStruct not implemented")
|
||||
}
|
||||
|
||||
|
|
@ -39,11 +40,11 @@ func (handle *CfTempRedirect) Name() string {
|
|||
return "CF_TEMP_REDIRECT"
|
||||
}
|
||||
|
||||
func (handle *CfTempRedirect) FromArgs(dc *models.DomainConfig, rec *models.RecordConfig, args []any) error {
|
||||
return FromArgs_helper(dc, rec, args, 302)
|
||||
func (handle *CfTempRedirect) FromArgs(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, args []any) error {
|
||||
return FromArgs_helper(dcn, rec, args, 302)
|
||||
}
|
||||
|
||||
func (handle *CfTempRedirect) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, name string, fields any) error {
|
||||
func (handle *CfTempRedirect) FromStruct(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, name string, fields any) error {
|
||||
panic("CF_TEMP_REDIRECT: FromStruct not implemented")
|
||||
}
|
||||
|
||||
|
|
@ -51,7 +52,7 @@ func (handle *CfTempRedirect) CopyToLegacyFields(rec *models.RecordConfig) {
|
|||
// Nothing needs to be copied. The CLOUDFLAREAPI_SINGLE_REDIRECT FromArgs copies everything needed.
|
||||
}
|
||||
|
||||
func FromArgs_helper(dc *models.DomainConfig, rec *models.RecordConfig, args []any, code int) error {
|
||||
func FromArgs_helper(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, args []any, code int) error {
|
||||
|
||||
// Pave the args to be the expected types.
|
||||
if err := rtypecontrol.PaveArgs(args, "ss"); err != nil {
|
||||
|
|
@ -67,12 +68,12 @@ func FromArgs_helper(dc *models.DomainConfig, rec *models.RecordConfig, args []a
|
|||
}
|
||||
|
||||
// Create the old-school name with a count prefix.
|
||||
incRedirCount(dc.UniqueName)
|
||||
name := fmt.Sprintf("%03d,%03d,%s,%s", getRedirCount(dc.UniqueName), code, prWhen, prThen)
|
||||
incRedirCount(dcn.UniqueName)
|
||||
name := fmt.Sprintf("%03d,%03d,%s,%s", getRedirCount(dcn.UniqueName), code, prWhen, prThen)
|
||||
|
||||
sr := SingleRedirectConfig{}
|
||||
rec.Type = sr.Name() // This record is now a CLOUDFLAREAPI_SINGLE_REDIRECT
|
||||
err = sr.FromArgs(dc, rec, []any{name, code, srWhen, srThen})
|
||||
err = sr.FromArgs(dcn, rec, []any{name, code, srWhen, srThen})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v4/models"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
|
||||
)
|
||||
|
||||
|
|
@ -30,7 +31,7 @@ func (handle *SingleRedirectConfig) Name() string {
|
|||
return "CLOUDFLAREAPI_SINGLE_REDIRECT"
|
||||
}
|
||||
|
||||
func (handle *SingleRedirectConfig) FromArgs(dc *models.DomainConfig, rec *models.RecordConfig, args []any) error {
|
||||
func (handle *SingleRedirectConfig) FromArgs(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, args []any) error {
|
||||
// Pave the args to be the expected types.
|
||||
if err := rtypecontrol.PaveArgs(args, "siss"); err != nil {
|
||||
return err
|
||||
|
|
@ -66,9 +67,9 @@ func (handle *SingleRedirectConfig) FromArgs(dc *models.DomainConfig, rec *model
|
|||
rec.Name = "@"
|
||||
rec.NameRaw = "@"
|
||||
rec.NameUnicode = "@"
|
||||
rec.NameFQDN = dc.Name
|
||||
rec.NameFQDNRaw = dc.NameRaw
|
||||
rec.NameFQDNUnicode = dc.NameUnicode
|
||||
rec.NameFQDN = dcn.NameASCII
|
||||
rec.NameFQDNRaw = dcn.NameRaw
|
||||
rec.NameFQDNUnicode = dcn.NameUnicode
|
||||
rec.TTL = 1
|
||||
|
||||
// Fill in the legacy fields:
|
||||
|
|
@ -76,7 +77,7 @@ func (handle *SingleRedirectConfig) FromArgs(dc *models.DomainConfig, rec *model
|
|||
return nil
|
||||
}
|
||||
|
||||
func (handle *SingleRedirectConfig) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, name string, fields any) error {
|
||||
func (handle *SingleRedirectConfig) FromStruct(dcn *domaintags.DomainNameVarieties, rec *models.RecordConfig, name string, fields any) error {
|
||||
panic("CLOUDFLAREAPI_SINGLE_REDIRECT: FromStruct not implemented")
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v4/models"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/printer"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol"
|
||||
"github.com/StackExchange/dnscontrol/v4/pkg/rtypeinfo"
|
||||
|
|
@ -21,7 +22,7 @@ func nativeToRecords(n livedns.DomainRecord, origin string) (rcs []*models.Recor
|
|||
// n.RrsetValues rather than having many livedns.DomainRecord's.
|
||||
// We must split them out into individual records, one for each value.
|
||||
|
||||
dc := models.MakeFakeDomainConfig(origin)
|
||||
dcn := domaintags.MakeDomainNameVarieties(origin)
|
||||
|
||||
for _, value := range n.RrsetValues {
|
||||
var rc *models.RecordConfig
|
||||
|
|
@ -30,7 +31,7 @@ func nativeToRecords(n livedns.DomainRecord, origin string) (rcs []*models.Recor
|
|||
rtype := n.RrsetType
|
||||
|
||||
if rtypeinfo.IsModernType(rtype) {
|
||||
rc, err = rtypecontrol.NewRecordConfigFromString(n.RrsetName, uint32(n.RrsetTTL), rtype, value, dc)
|
||||
rc, err = rtypecontrol.NewRecordConfigFromString(n.RrsetName, uint32(n.RrsetTTL), rtype, value, dcn)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unparsable record received from gandi: %w", err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue