diff --git a/internal/opnsense-unbound/client.go b/internal/opnsense-unbound/client.go index bade9b8..792eacf 100644 --- a/internal/opnsense-unbound/client.go +++ b/internal/opnsense-unbound/client.go @@ -141,15 +141,15 @@ func (c *httpClient) CreateHostOverride(endpoint *endpoint.Endpoint) (*DNSRecord return lookup, nil } - SplittedHost := UnboundFQDNSplitter(endpoint.DNSName) + splitHost := SplitUnboundFQDN(endpoint.DNSName) jsonBody, err := json.Marshal(unboundAddHostOverride{ Host: DNSRecord{ Enabled: "1", Rr: endpoint.RecordType, Server: endpoint.Targets[0], - Hostname: SplittedHost[0], - Domain: SplittedHost[1], + Hostname: splitHost[0], + Domain: splitHost[1], }}) if err != nil { return nil, err @@ -208,16 +208,16 @@ func (c *httpClient) lookupHostOverrideIdentifier(key, recordType string) (*DNSR return nil, err } log.Debug("lookup: Splitting FQDN") - SplittedHost := UnboundFQDNSplitter(key) + splitHost := SplitUnboundFQDN(key) for _, r := range records { - log.Debugf("lookup: Checking record: Host=%s, Domain=%s, Type=%s, UUID=%s", r.Hostname, r.Domain, UnboundTypeEmbellisher(r.Rr), r.Uuid) - if r.Hostname == SplittedHost[0] && r.Domain == SplittedHost[1] && UnboundTypeEmbellisher(r.Rr) == UnboundTypeEmbellisher(recordType) { + log.Debugf("lookup: Checking record: Host=%s, Domain=%s, Type=%s, UUID=%s", r.Hostname, r.Domain, EmbellishUnboundType(r.Rr), r.Uuid) + if r.Hostname == splitHost[0] && r.Domain == splitHost[1] && EmbellishUnboundType(r.Rr) == EmbellishUnboundType(recordType) { log.Debugf("lookup: UUID Match Found: %s", r.Uuid) return &r, nil } } - log.Debugf("lookup: No matching record found for Host=%s, Domain=%s, Type=%s", SplittedHost[0], SplittedHost[1], UnboundTypeEmbellisher(recordType)) + log.Debugf("lookup: No matching record found for Host=%s, Domain=%s, Type=%s", splitHost[0], splitHost[1], EmbellishUnboundType(recordType)) return nil, nil } diff --git a/internal/opnsense-unbound/provider.go b/internal/opnsense-unbound/provider.go index a22ea8c..39744c8 100644 --- a/internal/opnsense-unbound/provider.go +++ b/internal/opnsense-unbound/provider.go @@ -46,8 +46,8 @@ func (p *Provider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { var endpoints []*endpoint.Endpoint for _, record := range records { ep := &endpoint.Endpoint{ - DNSName: UnboundFQDNCombiner(record.Hostname, record.Domain), - RecordType: UnboundTypePrune(record.Rr), + DNSName: JoinUnboundFQDN(record.Hostname, record.Domain), + RecordType: PruneUnboundType(record.Rr), Targets: endpoint.NewTargets(record.Server), } diff --git a/internal/opnsense-unbound/utils.go b/internal/opnsense-unbound/utils.go index 6641771..22ee8ec 100644 --- a/internal/opnsense-unbound/utils.go +++ b/internal/opnsense-unbound/utils.go @@ -5,31 +5,29 @@ import "strings" // UnboundFQDNSplitter splits a DNSName into two parts, // [0] Being the top level hostname // [1] Being the subdomain/domain -func UnboundFQDNSplitter(hostname string) []string { - unboundSplittedHost := strings.SplitN(hostname, ".", 2) - - return unboundSplittedHost +// +// TODO: really this should return (hostname, domain string) +func SplitUnboundFQDN(hostname string) []string { + return strings.SplitN(hostname, ".", 2) } -func UnboundFQDNCombiner(hostname string, domain string) string { - unboundCombinededHost := hostname + "." + domain - - return unboundCombinededHost +func JoinUnboundFQDN(hostname string, domain string) string { + return strings.Join([]string{hostname, domain}, ".") } -func UnboundTypePrune(unboundType string) string { - unboundUncrufted := strings.SplitN(unboundType, " ", 2)[0] - - return unboundUncrufted +func PruneUnboundType(unboundType string) string { + if i := strings.IndexByte(unboundType, ' '); i != -1 { + return unboundType[:i] + } + return unboundType } -func UnboundTypeEmbellisher(unboundType string) string { - if unboundType == "A" { +func EmbellishUnboundType(unboundType string) string { + switch unboundType { + case "A": return unboundType + " (IPv4 address)" - } - if unboundType == "AAAA" { + case "AAAA": return unboundType + " (IPv6 address)" } - return unboundType }