Initial commit
This commit is contained in:
commit
ba0edf6ada
22 changed files with 2520 additions and 0 deletions
102
checker/types.go
Normal file
102
checker/types.go
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
package checker
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
const ObservationKeyAlias = "alias"
|
||||
|
||||
type AliasKind string
|
||||
|
||||
const (
|
||||
KindCNAME AliasKind = "CNAME"
|
||||
KindDNAME AliasKind = "DNAME"
|
||||
KindALIAS AliasKind = "ALIAS" // provider-flattened apex alias, no real RR on the wire
|
||||
KindTarget AliasKind = "TARGET"
|
||||
)
|
||||
|
||||
type ChainHop struct {
|
||||
Owner string `json:"owner"`
|
||||
Kind AliasKind `json:"kind"`
|
||||
Target string `json:"target,omitempty"`
|
||||
TTL uint32 `json:"ttl,omitempty"`
|
||||
Server string `json:"server,omitempty"`
|
||||
Synthesized bool `json:"synthesized,omitempty"` // CNAME synthesized from DNAME
|
||||
}
|
||||
|
||||
type CoexistingRRset struct {
|
||||
Type string `json:"type"`
|
||||
TTL uint32 `json:"ttl,omitempty"`
|
||||
}
|
||||
|
||||
type TerminationReason string
|
||||
|
||||
const (
|
||||
TermOK TerminationReason = "ok"
|
||||
TermLoop TerminationReason = "loop"
|
||||
TermTooLong TerminationReason = "too_long"
|
||||
TermQueryErr TerminationReason = "query_error"
|
||||
TermRcode TerminationReason = "rcode"
|
||||
)
|
||||
|
||||
// ChainTermination is always populated after a walk; rules key off Reason.
|
||||
type ChainTermination struct {
|
||||
Reason TerminationReason `json:"reason"`
|
||||
Subject string `json:"subject,omitempty"`
|
||||
Detail string `json:"detail,omitempty"`
|
||||
Rcode string `json:"rcode,omitempty"` // only with TermRcode
|
||||
}
|
||||
|
||||
// AliasData carries raw facts only; judgement is delegated to the rules.
|
||||
type AliasData struct {
|
||||
Owner string `json:"owner"`
|
||||
|
||||
// Apex is empty iff the apex lookup failed; ApexLookupError explains why.
|
||||
Apex string `json:"apex,omitempty"`
|
||||
ApexLookupError string `json:"apex_lookup_error,omitempty"`
|
||||
AuthServers []string `json:"auth_servers,omitempty"`
|
||||
|
||||
Chain []ChainHop `json:"chain,omitempty"`
|
||||
ChainTerminated ChainTermination `json:"chain_terminated"`
|
||||
|
||||
// FinalTarget is the last name in the chain — equal to Owner when there is
|
||||
// no indirection.
|
||||
FinalTarget string `json:"final_target,omitempty"`
|
||||
FinalA []string `json:"final_a,omitempty"`
|
||||
FinalAAAA []string `json:"final_aaaa,omitempty"`
|
||||
FinalRcode string `json:"final_rcode,omitempty"`
|
||||
|
||||
// Coexisting is populated only when Owner has a CNAME.
|
||||
Coexisting []CoexistingRRset `json:"coexisting,omitempty"`
|
||||
|
||||
OwnerIsApex bool `json:"owner_is_apex,omitempty"`
|
||||
OwnerHasCNAME bool `json:"owner_has_cname,omitempty"`
|
||||
|
||||
// Apex* fields are populated only when OwnerIsApex.
|
||||
ApexHasA bool `json:"apex_has_a,omitempty"`
|
||||
ApexHasAAAA bool `json:"apex_has_aaaa,omitempty"`
|
||||
ApexHasCNAME bool `json:"apex_has_cname,omitempty"`
|
||||
ApexFlattening bool `json:"apex_flattening,omitempty"`
|
||||
|
||||
ZoneSigned bool `json:"zone_signed,omitempty"`
|
||||
// CNAMESigCheckDone gates CNAMESigned: a false here means we never probed
|
||||
// (zone unsigned or no CNAME), so CNAMESigned must not be interpreted.
|
||||
CNAMESigCheckDone bool `json:"cname_sig_check_done,omitempty"`
|
||||
CNAMESigned bool `json:"cname_signed,omitempty"`
|
||||
|
||||
DNAMESubstitutions []ChainHop `json:"dname_substitutions,omitempty"`
|
||||
}
|
||||
|
||||
// cnameService mirrors happyDomain's svcs.CNAME / svcs.SpecialCNAME wire shape.
|
||||
type cnameService struct {
|
||||
Record *dns.CNAME `json:"cname"`
|
||||
}
|
||||
|
||||
// serviceMessage mirrors happyDomain's ServiceMessage envelope.
|
||||
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