Support for multiple records with the same name

This commit is contained in:
Magnus Åhall 2026-02-23 12:58:55 +01:00
parent ab08d745a1
commit 42c5d43610

36
dns.go
View file

@ -21,12 +21,11 @@ type DNSRecord struct {
} }
type DomainPart struct { type DomainPart struct {
Record DNSRecord Record []DNSRecord
Subparts map[string]*DomainPart `json:",omitempty"` Subparts map[string]*DomainPart `json:",omitempty"`
} }
type RecordsTree struct { type RecordsTree struct {
Record DNSRecord
Children []RecordsTree Children []RecordsTree
} }
@ -106,11 +105,12 @@ func BuildRecordsTree(records []DNSRecord) *DomainPart {
for _, part := range currentDomainNameSplit { for _, part := range currentDomainNameSplit {
if nextDomainPart, found := curPart.Subparts[part]; !found { if nextDomainPart, found := curPart.Subparts[part]; !found {
newPart := new(DomainPart) newPart := new(DomainPart)
newPart.Record = record newPart.Record = []DNSRecord{record}
newPart.Subparts = make(map[string]*DomainPart) newPart.Subparts = make(map[string]*DomainPart)
curPart.Subparts[strings.ToLower(part)] = newPart curPart.Subparts[strings.ToLower(part)] = newPart
curPart = newPart curPart = newPart
} else { } else {
nextDomainPart.Record = append(nextDomainPart.Record, record)
curPart = nextDomainPart curPart = nextDomainPart
} }
} }
@ -192,20 +192,22 @@ func (dp *DomainPart) ToHTMLElements(parts []string) []HTMLElement {
} }
if len(subpart.Subparts) == 0 { if len(subpart.Subparts) == 0 {
html := fmt.Sprintf( for _, rec := range subpart.Record {
` html := fmt.Sprintf(
<div class="record" style="padding-left: %dpx" data-top="%s"><span>%s</span><span>%s</span></div> `
<div class="type">%s</div> <div class="record" style="padding-left: %dpx" data-top="%s"><span>%s</span><span>%s</span></div>
<div class="value">%s</div> <div class="type">%s</div>
`, <div class="value">%s</div>
(len(newParts)-1)*32, `,
restPart, // data-top (len(newParts)-1)*32,
mostSpecificPart, restPart, // data-top
restPart, mostSpecificPart,
subpart.Record.Type, restPart,
subpart.Record.String(), rec.Type,
) rec.String(),
lines = append(lines, HTMLElement{Header: false, HTML: html}) )
lines = append(lines, HTMLElement{Header: false, HTML: html})
}
} }
} }