transdep/messages/zonecut/entry.go

83 lines
2.1 KiB
Go
Raw Normal View History

2018-01-23 20:25:00 +00:00
package zonecut
import (
"encoding/json"
"github.com/miekg/dns"
"strings"
)
// serializedEntry is a proxy for Entry, used for JSON serialization
type serializedEntry struct {
Domain string `json:"domain"`
DNSSEC bool `json:"dnssec"`
NameServers []NameSrvInfo `json:"nameservers"`
}
// Entry contains the response to a zonecut request when no error occurred. It contains information about the delegation
// of a zone,
type Entry struct {
// domain is the name that is being delegated (so if we query "d.nic.fr" for the delegation of "ssi.gouv.fr", domain
// contains "ssi.gouv.fr")
domain string
// dnssec values true if there was a DS record at the parent zone for the domain referenced in the "attribute" name
dnssec bool
// nameServers contains the list of NameSrvInfo records
nameServers []*NameSrvInfo
}
// NewEntry builds a new entry, and performs some normalization on the input values.
func NewEntry(domain string, DNSSECEnabled bool, nameServers []*NameSrvInfo) *Entry {
e := new(Entry)
e.domain = strings.ToLower(dns.Fqdn(domain))
e.dnssec = DNSSECEnabled
e.nameServers = nameServers
return e
}
// SetDNSSEC allows modification of the DNSSEC status relative to that entry, if need be afterwards
func (e *Entry) SetDNSSEC(val bool) {
e.dnssec = val
}
func (e *Entry) Domain() string {
return e.domain
}
func (e *Entry) DNSSEC() bool {
return e.dnssec
}
func (e *Entry) NameServers() []*NameSrvInfo {
return e.nameServers
}
func (e *Entry) MarshalJSON() ([]byte, error) {
se := new(serializedEntry)
se.Domain = e.domain
se.DNSSEC = e.dnssec
for _, val := range e.nameServers {
se.NameServers = append(se.NameServers, *val)
}
return json.Marshal(se)
}
func (e *Entry) UnmarshalJSON(bstr []byte) error {
se := new(serializedEntry)
if err := json.Unmarshal(bstr, se); err != nil {
return err
}
e.domain = se.Domain
e.dnssec = se.DNSSEC
for _, srvInfo := range se.NameServers {
val := srvInfo
e.nameServers = append(e.nameServers, &val)
}
return nil
}
func (e *Entry) String() string {
jsonrepr, _ := json.Marshal(e)
return string(jsonrepr)
}