Initial euclide.org release
This commit is contained in:
90
pdns_search.go
Normal file
90
pdns_search.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package main
|
||||
|
||||
type (
|
||||
// DNSSearch is the json structure of a search query response
|
||||
DNSSearch []*DNSSearchEntry
|
||||
|
||||
// DNSSearchEntry is an element of a DNSSearch
|
||||
DNSSearchEntry struct {
|
||||
Content string `json:"content"`
|
||||
Disabled bool `json:"disabled"`
|
||||
Name string `json:"name"`
|
||||
ObjectType string `json:"object_type"`
|
||||
TTL int `json:"ttl"`
|
||||
Type string `json:"type"`
|
||||
Zone string `json:"zone"`
|
||||
ZoneID string `json:"zone_id"`
|
||||
}
|
||||
)
|
||||
|
||||
// IsRecord tells if d is a record or not
|
||||
func (d DNSSearchEntry) IsRecord() bool {
|
||||
return d.ObjectType == "record"
|
||||
}
|
||||
|
||||
// IsComment tells if d is a comment or not
|
||||
func (d DNSSearchEntry) IsComment() bool {
|
||||
return d.ObjectType == "comment"
|
||||
}
|
||||
|
||||
// DNSQuery converts a DNSSearch to a DNSQuery
|
||||
func (d DNSSearch) DNSQuery() *DNSQuery {
|
||||
tempRet := map[string]map[string]*DNSRRSet{}
|
||||
tempContent := map[string]map[string][]*DNSRecord{}
|
||||
comments := map[string][]*DNSComments{}
|
||||
|
||||
for _, record := range d {
|
||||
switch {
|
||||
// ignore disabled records
|
||||
case record.Disabled:
|
||||
continue
|
||||
// store the comments
|
||||
case record.IsComment():
|
||||
comments[record.Name] = []*DNSComments{{Content: record.Content}}
|
||||
continue
|
||||
// ignore non records
|
||||
case !record.IsRecord():
|
||||
continue
|
||||
}
|
||||
// check if we already encounter this record
|
||||
if _, ok := tempRet[record.Name]; !ok {
|
||||
tempRet[record.Name] = map[string]*DNSRRSet{}
|
||||
tempContent[record.Name] = map[string][]*DNSRecord{}
|
||||
}
|
||||
// store the entry
|
||||
if _, ok := tempRet[record.Name][record.Type]; !ok {
|
||||
tempRet[record.Name][record.Type] = &DNSRRSet{
|
||||
Name: record.Name,
|
||||
Type: record.Type,
|
||||
ChangeType: "REPLACE",
|
||||
TTL: record.TTL,
|
||||
}
|
||||
tempContent[record.Name][record.Type] = []*DNSRecord{}
|
||||
}
|
||||
// and store the content
|
||||
tempContent[record.Name][record.Type] = append(tempContent[record.Name][record.Type], &DNSRecord{
|
||||
Content: record.Content,
|
||||
Disabled: false,
|
||||
SetPTR: false,
|
||||
})
|
||||
}
|
||||
// stitch everything together
|
||||
retRRSet := []*DNSRRSet{}
|
||||
|
||||
for rName, recordsByName := range tempRet {
|
||||
for rType, record := range recordsByName {
|
||||
if c, ok := comments[rName]; ok {
|
||||
record.Comment = c
|
||||
}
|
||||
if content, ok := tempContent[rName][rType]; ok {
|
||||
record.Records = content
|
||||
}
|
||||
retRRSet = append(retRRSet, record)
|
||||
}
|
||||
}
|
||||
return &DNSQuery{RRSets: retRRSet}
|
||||
}
|
||||
|
||||
func (d *DNSSearch) String() string {
|
||||
return string(printJSON(d))
|
||||
}
|
||||
Reference in New Issue
Block a user