Initial commit
This commit is contained in:
commit
00de0f9780
16 changed files with 1351 additions and 0 deletions
89
checker/types.go
Normal file
89
checker/types.go
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
package checker
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
// ObservationKeyDelegation is the observation key for delegation data.
|
||||
const ObservationKeyDelegation = "delegation"
|
||||
|
||||
// Severity classifies a finding emitted by the delegation checker.
|
||||
type Severity string
|
||||
|
||||
const (
|
||||
SeverityInfo Severity = "info"
|
||||
SeverityWarn Severity = "warn"
|
||||
SeverityCrit Severity = "crit"
|
||||
)
|
||||
|
||||
// DelegationFinding describes a single observation produced while running
|
||||
// the delegation testsuite.
|
||||
type DelegationFinding struct {
|
||||
// Code is a stable machine-readable identifier (e.g. "delegation_ns_mismatch").
|
||||
Code string `json:"code"`
|
||||
|
||||
// Severity grades the finding.
|
||||
Severity Severity `json:"severity"`
|
||||
|
||||
// Message is a human-readable explanation.
|
||||
Message string `json:"message"`
|
||||
|
||||
// Server is the DNS server that exhibited the finding (parent or child),
|
||||
// when applicable. Empty for findings tied to the service definition itself.
|
||||
Server string `json:"server,omitempty"`
|
||||
}
|
||||
|
||||
// DelegationData is the observation payload stored by the checker. It carries
|
||||
// every finding emitted by the testsuite plus the raw observed state from the
|
||||
// parent and from each delegated server.
|
||||
type DelegationData struct {
|
||||
// DelegatedFQDN is the FQDN of the delegated zone (subdomain + parent).
|
||||
DelegatedFQDN string `json:"delegated_fqdn"`
|
||||
|
||||
// ParentZone is the FQDN of the parent zone that delegates DelegatedFQDN.
|
||||
ParentZone string `json:"parent_zone"`
|
||||
|
||||
// ParentNS lists the parent zone's authoritative servers that were
|
||||
// queried (FQDNs of NS records).
|
||||
ParentNS []string `json:"parent_ns,omitempty"`
|
||||
|
||||
// AdvertisedNS holds the NS RRset returned by the parent for the
|
||||
// delegated FQDN, normalized as lowercase FQDNs.
|
||||
AdvertisedNS []string `json:"advertised_ns,omitempty"`
|
||||
|
||||
// AdvertisedGlue maps an in-bailiwick NS hostname to the glue addresses
|
||||
// returned by the parent for that name.
|
||||
AdvertisedGlue map[string][]string `json:"advertised_glue,omitempty"`
|
||||
|
||||
// ParentDS lists the DS records returned by the parent for the
|
||||
// delegated FQDN, in their textual presentation form.
|
||||
ParentDS []string `json:"parent_ds,omitempty"`
|
||||
|
||||
// ChildSerials maps an NS hostname to the SOA serial it returns for
|
||||
// the delegated FQDN.
|
||||
ChildSerials map[string]uint32 `json:"child_serials,omitempty"`
|
||||
|
||||
// Findings is the list of issues / observations produced by the run.
|
||||
Findings []DelegationFinding `json:"findings"`
|
||||
}
|
||||
|
||||
// delegationService is the minimal local mirror of happyDomain's
|
||||
// `services/abstract.Delegation` type. It is duplicated on purpose so that
|
||||
// this checker does not have to import the (heavy) happyDomain server module
|
||||
// just to decode the service payload. github.com/miekg/dns marshals
|
||||
// dns.NS / dns.DS to JSON in the same shape happyDomain uses.
|
||||
type delegationService struct {
|
||||
NameServers []*dns.NS `json:"ns"`
|
||||
DS []*dns.DS `json:"ds"`
|
||||
}
|
||||
|
||||
// serviceMessage is the minimal local mirror of happyDomain's ServiceMessage
|
||||
// envelope. We only need the embedded service JSON; the rest of the meta
|
||||
// fields are ignored.
|
||||
type serviceMessage struct {
|
||||
Type string `json:"_svctype"`
|
||||
Domain string `json:"_domain"`
|
||||
Service json.RawMessage `json:"Service"`
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue