This commit is contained in:
Thomas Limoncelli 2025-11-30 20:06:03 -05:00
parent cbbb396026
commit 29dbdbbd5c
No known key found for this signature in database
5 changed files with 27 additions and 16 deletions

View file

@ -19,20 +19,27 @@ func (handle *RP) Name() string {
return "RP" return "RP"
} }
// 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(dc *models.DomainConfig, rec *models.RecordConfig, args []any) error {
if err := rtypecontrol.PaveArgs(args[1:], "ss"); err != nil { if err := rtypecontrol.PaveArgs(args[1:], "ss"); err != nil {
return err return err
} }
rec.F = &RP{ fields := &RP{
dns.RP{ dns.RP{
Mbox: args[1].(string), Mbox: args[1].(string),
Txt: args[2].(string), Txt: args[2].(string),
}, },
} }
// TODO: Generate friendly Comparable and ZonefilePartial values. return handle.FromStruct(dc, rec, args[0].(string), fields)
rec.Comparable = rec.F.(*RP).Mbox + " " + rec.F.(*RP).Txt }
rec.ZonefilePartial = rec.Comparable
// 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 {
rec.F = fields
rec.ZonefilePartial = rec.GetTargetRFC1035Quoted()
rec.Comparable = rec.ZonefilePartial
return nil return nil
} }

View file

@ -5,7 +5,6 @@ import (
"github.com/StackExchange/dnscontrol/v4/models" "github.com/StackExchange/dnscontrol/v4/models"
"github.com/StackExchange/dnscontrol/v4/pkg/domaintags" "github.com/StackExchange/dnscontrol/v4/pkg/domaintags"
"github.com/miekg/dns"
"github.com/miekg/dns/dnsutil" "github.com/miekg/dns/dnsutil"
) )
@ -74,8 +73,12 @@ func NewRecordConfigFromStruct(name string, ttl uint32, t string, fields any, dc
} }
setRecordNames(rec, dc, name) setRecordNames(rec, dc, name)
// Fill in the .F/.Fields* fields. // // Fill in the .F/.Fields* fields.
err := Func[t].FromArgs(dc, rec, []any{name, fields.(*dns.RP).Mbox, fields.(*dns.RP).Txt}) // err := Func[t].FromArgs(dc, rec, []any{name, fields.(*dns.RP).Mbox, fields.(*dns.RP).Txt})
// if err != nil {
// return nil, err
// }
err := Func[t].FromStruct(dc, rec, name, fields)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -16,6 +16,7 @@ type RType interface {
// RecordConfig factory. Updates a RecordConfig's fields based on args. // RecordConfig factory. Updates a RecordConfig's fields based on args.
FromArgs(*models.DomainConfig, *models.RecordConfig, []any) error FromArgs(*models.DomainConfig, *models.RecordConfig, []any) error
FromStruct(*models.DomainConfig, *models.RecordConfig, string, any) error
CopyToLegacyFields(*models.RecordConfig) CopyToLegacyFields(*models.RecordConfig)
} }

View file

@ -24,9 +24,9 @@ func (handle *CfRedirect) FromArgs(dc *models.DomainConfig, rec *models.RecordCo
return FromArgs_helper(dc, rec, args, 301) return FromArgs_helper(dc, rec, args, 301)
} }
// func (handle *CfRedirect) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, fields any) error { func (handle *CfRedirect) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, name string, fields any) error {
// panic("CF_REDIRECT: FromStruct not implemented") panic("CF_REDIRECT: FromStruct not implemented")
// } }
func (handle *CfRedirect) CopyToLegacyFields(rec *models.RecordConfig) { func (handle *CfRedirect) CopyToLegacyFields(rec *models.RecordConfig) {
// Nothing needs to be copied. The CLOUDFLAREAPI_SINGLE_REDIRECT FromArgs copies everything needed. // Nothing needs to be copied. The CLOUDFLAREAPI_SINGLE_REDIRECT FromArgs copies everything needed.
@ -43,9 +43,9 @@ func (handle *CfTempRedirect) FromArgs(dc *models.DomainConfig, rec *models.Reco
return FromArgs_helper(dc, rec, args, 302) return FromArgs_helper(dc, rec, args, 302)
} }
// func (handle *CfTempRedirect) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, fields any) error { func (handle *CfTempRedirect) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, name string, fields any) error {
// panic("CF_TEMP_REDIRECT: FromStruct not implemented") panic("CF_TEMP_REDIRECT: FromStruct not implemented")
// } }
func (handle *CfTempRedirect) CopyToLegacyFields(rec *models.RecordConfig) { func (handle *CfTempRedirect) CopyToLegacyFields(rec *models.RecordConfig) {
// Nothing needs to be copied. The CLOUDFLAREAPI_SINGLE_REDIRECT FromArgs copies everything needed. // Nothing needs to be copied. The CLOUDFLAREAPI_SINGLE_REDIRECT FromArgs copies everything needed.

View file

@ -76,9 +76,9 @@ func (handle *SingleRedirectConfig) FromArgs(dc *models.DomainConfig, rec *model
return nil return nil
} }
// func (handle *SingleRedirectConfig) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, fields any) error { func (handle *SingleRedirectConfig) FromStruct(dc *models.DomainConfig, rec *models.RecordConfig, name string, fields any) error {
// panic("CLOUDFLAREAPI_SINGLE_REDIRECT: FromStruct not implemented") panic("CLOUDFLAREAPI_SINGLE_REDIRECT: FromStruct not implemented")
// } }
// targetFromRaw create the display text used for a normal Redirect. // targetFromRaw create the display text used for a normal Redirect.
func targetFromRaw(name string, code uint16, when, then string) string { func targetFromRaw(name string, code uint16, when, then string) string {