82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
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)
|
|
}
|