2016-08-22 18:31:50 -06:00
|
|
|
package models
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
)
|
|
|
|
|
2018-01-09 12:53:16 -05:00
|
|
|
// DefaultTTL is applied to any DNS record without an explicit TTL.
|
2016-08-22 18:31:50 -06:00
|
|
|
const DefaultTTL = uint32(300)
|
|
|
|
|
2018-01-09 12:53:16 -05:00
|
|
|
// DNSConfig describes the desired DNS configuration, usually loaded from dnsconfig.js.
|
2016-08-22 18:31:50 -06:00
|
|
|
type DNSConfig struct {
|
2018-02-01 11:45:53 -05:00
|
|
|
Registrars []*RegistrarConfig `json:"registrars"`
|
|
|
|
DNSProviders []*DNSProviderConfig `json:"dns_providers"`
|
|
|
|
Domains []*DomainConfig `json:"domains"`
|
|
|
|
RegistrarsByName map[string]*RegistrarConfig `json:"-"`
|
|
|
|
DNSProvidersByName map[string]*DNSProviderConfig `json:"-"`
|
2016-08-22 18:31:50 -06:00
|
|
|
}
|
|
|
|
|
2018-01-09 12:53:16 -05:00
|
|
|
// FindDomain returns the *DomainConfig for domain query in config.
|
2016-08-22 18:31:50 -06:00
|
|
|
func (config *DNSConfig) FindDomain(query string) *DomainConfig {
|
|
|
|
for _, b := range config.Domains {
|
|
|
|
if b.Name == query {
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2018-01-09 12:53:16 -05:00
|
|
|
// RegistrarConfig describes a registrar.
|
2016-08-22 18:31:50 -06:00
|
|
|
type RegistrarConfig struct {
|
|
|
|
Name string `json:"name"`
|
|
|
|
Type string `json:"type"`
|
|
|
|
Metadata json.RawMessage `json:"meta,omitempty"`
|
|
|
|
}
|
|
|
|
|
2018-01-09 12:53:16 -05:00
|
|
|
// DNSProviderConfig describes a DNS service provider.
|
2016-08-22 18:31:50 -06:00
|
|
|
type DNSProviderConfig struct {
|
|
|
|
Name string `json:"name"`
|
|
|
|
Type string `json:"type"`
|
|
|
|
Metadata json.RawMessage `json:"meta,omitempty"`
|
|
|
|
}
|
|
|
|
|
2018-01-09 12:53:16 -05:00
|
|
|
// Nameserver describes a nameserver.
|
2016-08-22 18:31:50 -06:00
|
|
|
type Nameserver struct {
|
2018-03-22 11:52:52 -04:00
|
|
|
Name string `json:"name"` // Normalized to a FQDN with NO trailing "."
|
2016-08-22 18:31:50 -06:00
|
|
|
}
|
|
|
|
|
2018-01-09 12:53:16 -05:00
|
|
|
// StringsToNameservers constructs a list of *Nameserver structs using a list of FQDNs.
|
2016-12-16 13:10:27 -07:00
|
|
|
func StringsToNameservers(nss []string) []*Nameserver {
|
|
|
|
nservers := []*Nameserver{}
|
|
|
|
for _, ns := range nss {
|
|
|
|
nservers = append(nservers, &Nameserver{Name: ns})
|
|
|
|
}
|
|
|
|
return nservers
|
|
|
|
}
|
|
|
|
|
2018-01-09 12:53:16 -05:00
|
|
|
// Correction is anything that can be run. Implementation is up to the specific provider.
|
2016-08-22 18:31:50 -06:00
|
|
|
type Correction struct {
|
|
|
|
F func() error `json:"-"`
|
|
|
|
Msg string
|
|
|
|
}
|