diff --git a/build/generate/generate.go b/build/generate/generate.go index 4753aed48..ec505c3e9 100644 --- a/build/generate/generate.go +++ b/build/generate/generate.go @@ -6,6 +6,9 @@ func main() { if err := generateFeatureMatrix(); err != nil { log.Fatal(err) } + if err := generateOwnersFile(); err != nil { + log.Fatal(err) + } funcs, err := generateFunctionTypes() if err != nil { log.Fatal(err) diff --git a/build/generate/ownersFile.go b/build/generate/ownersFile.go new file mode 100644 index 000000000..b9c9009ea --- /dev/null +++ b/build/generate/ownersFile.go @@ -0,0 +1,68 @@ +package main + +import ( + "github.com/StackExchange/dnscontrol/v4/providers" + "os" + "sort" + "strings" +) + +func generateOwnersFile() error { + maintainers := providers.ProviderMaintainers + sortedProviderNames := getSortedProviderNames(maintainers) + + var ownersData strings.Builder + for _, providerName := range sortedProviderNames { + providerMaintainer := maintainers[providerName] + if providerMaintainer == "NEEDS VOLUNTEER" { + ownersData.WriteString("# ") + } + ownersData.WriteString("providers/") + ownersData.WriteString(getProviderDirectory(providerName)) + ownersData.WriteString(" ") + ownersData.WriteString(providerMaintainer) + ownersData.WriteString("\n") + } + + file, err := os.Create("OWNERS") + if err != nil { + return err + } + defer file.Close() + + _, err = file.WriteString(ownersData.String()) + if err != nil { + return err + } + + return nil +} + +func getProviderDirectory(providerName string) string { + // Strip the underscores from the providerName constants + providerDirectory := strings.ToLower( + strings.ReplaceAll( + providerName, "_", "", + ), + ) + + // These providers use a different directory name + if providerDirectory == "cloudflareapi" { + providerDirectory = "cloudflare" + } + if providerDirectory == "dnsoverhttps" { + providerDirectory = "doh" + } + + return providerDirectory +} + +func getSortedProviderNames(maintainers map[string]string) []string { + providerNameSorted := make([]string, 0, len(maintainers)) + for providerNameKey := range maintainers { + providerNameSorted = append(providerNameSorted, providerNameKey) + } + sort.Strings(providerNameSorted) + + return providerNameSorted +} diff --git a/documentation/writing-providers.md b/documentation/writing-providers.md index 81f4aaded..663f79e88 100644 --- a/documentation/writing-providers.md +++ b/documentation/writing-providers.md @@ -224,8 +224,6 @@ an automated way to test for this bug. The manual steps are here in * Add the provider to the "Providers" list. * Create `documentation/provider/PROVIDERNAME.md`: * Use one of the other files in that directory as a base. -* Edit `OWNERS`: - * Add the directory name and your GitHub username. {% hint style="success" %} **Need feedback?** Submit a draft PR! It's a great way to get early feedback, ask about fixing diff --git a/main.go b/main.go index b0737bc5a..02ee05b8d 100644 --- a/main.go +++ b/main.go @@ -10,7 +10,7 @@ import ( "github.com/fatih/color" ) -//go:generate go run build/generate/generate.go build/generate/featureMatrix.go build/generate/functionTypes.go build/generate/dtsFile.go +//go:generate go run build/generate/generate.go build/generate/featureMatrix.go build/generate/functionTypes.go build/generate/dtsFile.go build/generate/ownersFile.go // Version management. Goals: // 1. Someone who just does "go get" has at least some information. diff --git a/providers/akamaiedgedns/akamaiEdgeDnsProvider.go b/providers/akamaiedgedns/akamaiEdgeDnsProvider.go index 59da28e5e..dbe6fb5f7 100644 --- a/providers/akamaiedgedns/akamaiEdgeDnsProvider.go +++ b/providers/akamaiedgedns/akamaiEdgeDnsProvider.go @@ -49,12 +49,15 @@ type edgeDNSProvider struct { } func init() { + const providerName = "AKAMAIEDGEDNS" + const providerMaintainer = "@edglynes" fns := providers.DspFuncs{ Initializer: newEdgeDNSDSP, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("AKAMAIEDGEDNS", fns, features) - providers.RegisterCustomRecordType("AKAMAICDN", "AKAMAIEDGEDNS", "") + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterCustomRecordType("AKAMAICDN", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } // DnsServiceProvider diff --git a/providers/autodns/autoDnsProvider.go b/providers/autodns/autoDnsProvider.go index 6dfb1d341..38a7184c7 100644 --- a/providers/autodns/autoDnsProvider.go +++ b/providers/autodns/autoDnsProvider.go @@ -37,11 +37,14 @@ type autoDNSProvider struct { } func init() { + const providerName = "AUTODNS" + const providerMaintainer = "@arnoschoon" fns := providers.DspFuncs{ Initializer: New, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("AUTODNS", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // New creates a new API handle. diff --git a/providers/axfrddns/axfrddnsProvider.go b/providers/axfrddns/axfrddnsProvider.go index 5408e24fd..3033df4be 100644 --- a/providers/axfrddns/axfrddnsProvider.go +++ b/providers/axfrddns/axfrddnsProvider.go @@ -172,11 +172,14 @@ func initAxfrDdns(config map[string]string, providermeta json.RawMessage) (provi } func init() { + const providerName = "AXFRDDNS" + const providerMaintainer = "@hnrgrgr" fns := providers.DspFuncs{ Initializer: initAxfrDdns, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("AXFRDDNS", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // Param is used to decode extra parameters sent to provider. diff --git a/providers/azuredns/azureDnsProvider.go b/providers/azuredns/azureDnsProvider.go index 916cc56b6..0ab74a72a 100644 --- a/providers/azuredns/azureDnsProvider.go +++ b/providers/azuredns/azureDnsProvider.go @@ -78,12 +78,15 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "AZURE_DNS" + const providerMaintainer = "@vatsalyagoel" fns := providers.DspFuncs{ Initializer: newAzureDNSDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("AZURE_DNS", fns, features) - providers.RegisterCustomRecordType("AZURE_ALIAS", "AZURE_DNS", "") + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterCustomRecordType("AZURE_ALIAS", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } func (a *azurednsProvider) getExistingZones() ([]*adns.Zone, error) { diff --git a/providers/azureprivatedns/azurePrivateDnsProvider.go b/providers/azureprivatedns/azurePrivateDnsProvider.go index 6e72bec7b..5a901380e 100644 --- a/providers/azureprivatedns/azurePrivateDnsProvider.go +++ b/providers/azureprivatedns/azurePrivateDnsProvider.go @@ -82,12 +82,15 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "AZURE_PRIVATE_DNS" + const providerMaintainer = "@matthewmgamble" fns := providers.DspFuncs{ Initializer: newAzureDNSDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("AZURE_PRIVATE_DNS", fns, features) - providers.RegisterCustomRecordType("AZURE_ALIAS", "AZURE_PRIVATE_DNS", "") + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterCustomRecordType("AZURE_ALIAS", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } func (a *azurednsProvider) getExistingZones() ([]*adns.PrivateZone, error) { diff --git a/providers/bind/bindProvider.go b/providers/bind/bindProvider.go index 27dbb1598..a8509542d 100644 --- a/providers/bind/bindProvider.go +++ b/providers/bind/bindProvider.go @@ -93,11 +93,14 @@ func initBind(config map[string]string, providermeta json.RawMessage) (providers } func init() { + const providerName = "BIND" + const providerMaintainer = "@tlimoncelli" fns := providers.DspFuncs{ Initializer: initBind, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("BIND", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // SoaDefaults contains the parts of the default SOA settings. diff --git a/providers/bunnydns/bunnydnsProvider.go b/providers/bunnydns/bunnydnsProvider.go index 3450b71a4..aa797b288 100644 --- a/providers/bunnydns/bunnydnsProvider.go +++ b/providers/bunnydns/bunnydnsProvider.go @@ -37,11 +37,14 @@ type bunnydnsProvider struct { } func init() { + const providerName = "BUNNY_DNS" + const providerMaintainer = "@ppmathis" fns := providers.DspFuncs{ Initializer: newBunnydns, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("BUNNY_DNS", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newBunnydns(settings map[string]string, _ json.RawMessage) (providers.DNSServiceProvider, error) { diff --git a/providers/cloudflare/cloudflareProvider.go b/providers/cloudflare/cloudflareProvider.go index 11fa80b07..bb79575ca 100644 --- a/providers/cloudflare/cloudflareProvider.go +++ b/providers/cloudflare/cloudflareProvider.go @@ -64,14 +64,17 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "CLOUDFLAREAPI" + const providerMaintainer = "@tresni" fns := providers.DspFuncs{ Initializer: newCloudflare, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("CLOUDFLAREAPI", fns, features) - providers.RegisterCustomRecordType("CF_REDIRECT", "CLOUDFLAREAPI", "") - providers.RegisterCustomRecordType("CF_TEMP_REDIRECT", "CLOUDFLAREAPI", "") - providers.RegisterCustomRecordType("CF_WORKER_ROUTE", "CLOUDFLAREAPI", "") + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterCustomRecordType("CF_REDIRECT", providerName, "") + providers.RegisterCustomRecordType("CF_TEMP_REDIRECT", providerName, "") + providers.RegisterCustomRecordType("CF_WORKER_ROUTE", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } // cloudflareProvider is the handle for API calls. diff --git a/providers/cloudns/cloudnsProvider.go b/providers/cloudns/cloudnsProvider.go index 2e71a3ec3..d3f7952e5 100644 --- a/providers/cloudns/cloudnsProvider.go +++ b/providers/cloudns/cloudnsProvider.go @@ -57,12 +57,15 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "CLOUDNS" + const providerMaintainer = "@pragmaton" fns := providers.DspFuncs{ Initializer: NewCloudns, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("CLOUDNS", fns, features) - providers.RegisterCustomRecordType("CLOUDNS_WR", "CLOUDNS", "") + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterCustomRecordType("CLOUDNS_WR", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } // GetNameservers returns the nameservers for a domain. diff --git a/providers/cscglobal/cscglobalProvider.go b/providers/cscglobal/cscglobalProvider.go index e52c2a526..8b0d431f9 100644 --- a/providers/cscglobal/cscglobalProvider.go +++ b/providers/cscglobal/cscglobalProvider.go @@ -61,11 +61,14 @@ func newProvider(m map[string]string) (*providerClient, error) { } func init() { - providers.RegisterRegistrarType("CSCGLOBAL", newReg) + const providerName = "CSCGLOBAL" + const providerMaintainer = "@mikenz" + providers.RegisterRegistrarType(providerName, newReg) fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("CSCGLOBAL", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } diff --git a/providers/desec/desecProvider.go b/providers/desec/desecProvider.go index dee3f4fb1..1e08d6c29 100644 --- a/providers/desec/desecProvider.go +++ b/providers/desec/desecProvider.go @@ -58,11 +58,14 @@ var defaultNameServerNames = []string{ } func init() { + const providerName = "DESEC" + const providerMaintainer = "@D3luxee" fns := providers.DspFuncs{ Initializer: NewDeSec, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("DESEC", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // GetNameservers returns the nameservers for a domain. diff --git a/providers/digitalocean/digitaloceanProvider.go b/providers/digitalocean/digitaloceanProvider.go index 409776b45..1d4d4c2dd 100644 --- a/providers/digitalocean/digitaloceanProvider.go +++ b/providers/digitalocean/digitaloceanProvider.go @@ -82,11 +82,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "DIGITALOCEAN" + const providerMaintainer = "@Deraen" fns := providers.DspFuncs{ Initializer: NewDo, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("DIGITALOCEAN", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // EnsureZoneExists creates a zone if it does not exist diff --git a/providers/dnsimple/dnsimpleProvider.go b/providers/dnsimple/dnsimpleProvider.go index cf1acf318..68ef7a005 100644 --- a/providers/dnsimple/dnsimpleProvider.go +++ b/providers/dnsimple/dnsimpleProvider.go @@ -41,12 +41,15 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("DNSIMPLE", newReg) + const providerName = "DNSIMPLE" + const providerMaintainer = "@onlyhavecans" + providers.RegisterRegistrarType(providerName, newReg) fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("DNSIMPLE", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } const stateRegistered = "registered" diff --git a/providers/dnsmadeeasy/dnsMadeEasyProvider.go b/providers/dnsmadeeasy/dnsMadeEasyProvider.go index 1b1a96bcd..4364ab5ee 100644 --- a/providers/dnsmadeeasy/dnsMadeEasyProvider.go +++ b/providers/dnsmadeeasy/dnsMadeEasyProvider.go @@ -31,12 +31,15 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "DNSMADEEASY" + const providerMaintainer = "@vojtad" fns := providers.DspFuncs{ Initializer: New, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("DNSMADEEASY", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // New creates a new API handle. diff --git a/providers/doh/dohProvider.go b/providers/doh/dohProvider.go index c8e4d62b1..2cc91e168 100644 --- a/providers/doh/dohProvider.go +++ b/providers/doh/dohProvider.go @@ -24,7 +24,10 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("DNSOVERHTTPS", newDNSOverHTTPS, features) + const providerName = "DNSOVERHTTPS" + const providerMaintainer = "@mikenz" + providers.RegisterRegistrarType(providerName, newDNSOverHTTPS, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newDNSOverHTTPS(m map[string]string) (providers.Registrar, error) { diff --git a/providers/domainnameshop/domainnameshopProvider.go b/providers/domainnameshop/domainnameshopProvider.go index af8fed0a7..ed92f3816 100644 --- a/providers/domainnameshop/domainnameshopProvider.go +++ b/providers/domainnameshop/domainnameshopProvider.go @@ -47,12 +47,15 @@ var features = providers.DocumentationNotes{ // Register with the dnscontrol system. // This establishes the name (all caps), and the function to call to initialize it. func init() { + const providerName = "DOMAINNAMESHOP" + const providerMaintainer = "@SimenBai" fns := providers.DspFuncs{ Initializer: newDomainNameShopProvider, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("DOMAINNAMESHOP", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // newDomainNameShopProvider creates a Domainnameshop specific DNS provider. diff --git a/providers/dynadot/dynadotProvider.go b/providers/dynadot/dynadotProvider.go index 46d688573..23da0ec34 100644 --- a/providers/dynadot/dynadotProvider.go +++ b/providers/dynadot/dynadotProvider.go @@ -25,7 +25,10 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("DYNADOT", newDynadot, features) + const providerName = "DYNADOT" + const providerMaintainer = "@e-im" + providers.RegisterRegistrarType(providerName, newDynadot, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newDynadot(m map[string]string) (providers.Registrar, error) { diff --git a/providers/easyname/easynameProvider.go b/providers/easyname/easynameProvider.go index d6625bc24..3c4ec58f0 100644 --- a/providers/easyname/easynameProvider.go +++ b/providers/easyname/easynameProvider.go @@ -23,7 +23,10 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("EASYNAME", newEasyname, features) + const providerName = "EASYNAME" + const providerMaintainer = "@tresni" + providers.RegisterRegistrarType(providerName, newEasyname, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newEasyname(m map[string]string) (providers.Registrar, error) { diff --git a/providers/exoscale/exoscaleProvider.go b/providers/exoscale/exoscaleProvider.go index ff726bee9..7d77a1daf 100644 --- a/providers/exoscale/exoscaleProvider.go +++ b/providers/exoscale/exoscaleProvider.go @@ -70,11 +70,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "EXOSCALE" + const providerMaintainer = "@pierre-emmanuelJ" fns := providers.DspFuncs{ Initializer: NewExoscale, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("EXOSCALE", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // EnsureZoneExists creates a zone if it does not exist diff --git a/providers/gandiv5/gandi_v5Provider.go b/providers/gandiv5/gandi_v5Provider.go index 449523948..4385e3627 100644 --- a/providers/gandiv5/gandi_v5Provider.go +++ b/providers/gandiv5/gandi_v5Provider.go @@ -34,12 +34,15 @@ import ( // init registers the provider to dnscontrol. func init() { + const providerName = "GANDI_V5" + const providerMaintainer = "@TomOnTime" fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("GANDI_V5", fns, features) - providers.RegisterRegistrarType("GANDI_V5", newReg) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterRegistrarType(providerName, newReg) + providers.RegisterMaintainer(providerName, providerMaintainer) } // features declares which features and options are available. diff --git a/providers/gcloud/gcloudProvider.go b/providers/gcloud/gcloudProvider.go index 1f429d0b8..026103f44 100644 --- a/providers/gcloud/gcloudProvider.go +++ b/providers/gcloud/gcloudProvider.go @@ -53,11 +53,14 @@ func sPtr(s string) *string { } func init() { + const providerName = "GCLOUD" + const providerMaintainer = "@riyadhalnur" fns := providers.DspFuncs{ Initializer: New, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("GCLOUD", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } type gcloudProvider struct { diff --git a/providers/gcore/gcoreProvider.go b/providers/gcore/gcoreProvider.go index f984e9dda..14123c94d 100644 --- a/providers/gcore/gcoreProvider.go +++ b/providers/gcore/gcoreProvider.go @@ -68,11 +68,14 @@ var defaultNameServerNames = []string{ } func init() { + const providerName = "GCORE" + const providerMaintainer = "@xddxdd" fns := providers.DspFuncs{ Initializer: NewGCore, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("GCORE", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // GetNameservers returns the nameservers for a domain. diff --git a/providers/hedns/hednsProvider.go b/providers/hedns/hednsProvider.go index 3201a58ba..d5e3f7276 100644 --- a/providers/hedns/hednsProvider.go +++ b/providers/hedns/hednsProvider.go @@ -66,11 +66,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "HEDNS" + const providerMaintainer = "@rblenkinsopp" fns := providers.DspFuncs{ Initializer: newHEDNSProvider, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("HEDNS", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } var defaultNameservers = []string{ diff --git a/providers/hetzner/hetznerProvider.go b/providers/hetzner/hetznerProvider.go index 3ccea1787..242c826f3 100644 --- a/providers/hetzner/hetznerProvider.go +++ b/providers/hetzner/hetznerProvider.go @@ -33,11 +33,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "HETZNER" + const providerMaintainer = "@das7pad" fns := providers.DspFuncs{ Initializer: New, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("HETZNER", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // New creates a new API handle. diff --git a/providers/hexonet/hexonetProvider.go b/providers/hexonet/hexonetProvider.go index 98f3742bf..3b24e1b0b 100644 --- a/providers/hexonet/hexonetProvider.go +++ b/providers/hexonet/hexonetProvider.go @@ -72,10 +72,13 @@ func newDsp(conf map[string]string, meta json.RawMessage) (providers.DNSServiceP } func init() { + const providerName = "HEXONET" + const providerMaintainer = "@KaiSchwarz-cnic" fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterRegistrarType("HEXONET", newReg) - providers.RegisterDomainServiceProviderType("HEXONET", fns, features) + providers.RegisterRegistrarType(providerName, newReg) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } diff --git a/providers/hostingde/hostingdeProvider.go b/providers/hostingde/hostingdeProvider.go index 38ee265b8..80a0fabed 100644 --- a/providers/hostingde/hostingdeProvider.go +++ b/providers/hostingde/hostingdeProvider.go @@ -37,12 +37,15 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("HOSTINGDE", newHostingdeReg) + const providerName = "HOSTINGDE" + const providerMaintainer = "@juliusrickert" + providers.RegisterRegistrarType(providerName, newHostingdeReg) fns := providers.DspFuncs{ Initializer: newHostingdeDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("HOSTINGDE", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } type providerMeta struct { diff --git a/providers/huaweicloud/huaweicloudProvider.go b/providers/huaweicloud/huaweicloudProvider.go index aa73fa12d..11c3eba82 100644 --- a/providers/huaweicloud/huaweicloudProvider.go +++ b/providers/huaweicloud/huaweicloudProvider.go @@ -111,11 +111,14 @@ var defaultNameServerNames = []string{ } func init() { + const providerName = "HUAWEICLOUD" + const providerMaintainer = "@huihuimoe" fns := providers.DspFuncs{ Initializer: newHuaweicloud, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("HUAWEICLOUD", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // huaweicloud has request limiting like above. diff --git a/providers/internetbs/internetbsProvider.go b/providers/internetbs/internetbsProvider.go index df7641bf5..a1224ff20 100644 --- a/providers/internetbs/internetbsProvider.go +++ b/providers/internetbs/internetbsProvider.go @@ -26,7 +26,10 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("INTERNETBS", newInternetBs, features) + const providerName = "INTERNETBS" + const providerMaintainer = "@pragmaton" + providers.RegisterRegistrarType(providerName, newInternetBs, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newInternetBs(m map[string]string) (providers.Registrar, error) { diff --git a/providers/inwx/inwxProvider.go b/providers/inwx/inwxProvider.go index 224406d25..020460814 100644 --- a/providers/inwx/inwxProvider.go +++ b/providers/inwx/inwxProvider.go @@ -71,12 +71,15 @@ type inwxAPI struct { // init registers the registrar and the domain service provider with dnscontrol. func init() { - providers.RegisterRegistrarType("INWX", newInwxReg) + const providerName = "INWX" + const providerMaintainer = "@patschi" + providers.RegisterRegistrarType(providerName, newInwxReg) fns := providers.DspFuncs{ Initializer: newInwxDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("INWX", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // getOTP either returns the TOTPValue or uses TOTPKey and the current time to generate a valid TOTPValue. diff --git a/providers/linode/linodeProvider.go b/providers/linode/linodeProvider.go index 9e25e82fe..efa45980c 100644 --- a/providers/linode/linodeProvider.go +++ b/providers/linode/linodeProvider.go @@ -99,12 +99,15 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "LINODE" + const providerMaintainer = "@koesie10" // SRV support is in this provider, but Linode doesn't seem to support it properly fns := providers.DspFuncs{ Initializer: NewLinode, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("LINODE", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // GetNameservers returns the nameservers for a domain. diff --git a/providers/loopia/loopiaProvider.go b/providers/loopia/loopiaProvider.go index 3862bfaa7..8e6d1dc2f 100644 --- a/providers/loopia/loopiaProvider.go +++ b/providers/loopia/loopiaProvider.go @@ -33,12 +33,15 @@ import ( // init registers the provider to dnscontrol. func init() { + const providerName = "LOOPIA" + const providerMaintainer = "@systemcrash" fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("LOOPIA", fns, features) - providers.RegisterRegistrarType("LOOPIA", newReg) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterRegistrarType(providerName, newReg) + providers.RegisterMaintainer(providerName, providerMaintainer) } // features declares which features and options are available. diff --git a/providers/luadns/luadnsProvider.go b/providers/luadns/luadnsProvider.go index 4086f8ab2..ac301c14e 100644 --- a/providers/luadns/luadnsProvider.go +++ b/providers/luadns/luadnsProvider.go @@ -36,11 +36,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "LUADNS" + const providerMaintainer = "@riku22" fns := providers.DspFuncs{ Initializer: NewLuaDNS, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("LUADNS", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // NewLuaDNS creates the provider. diff --git a/providers/msdns/msdnsProvider.go b/providers/msdns/msdnsProvider.go index 65880b214..c543f7eb7 100644 --- a/providers/msdns/msdnsProvider.go +++ b/providers/msdns/msdnsProvider.go @@ -40,11 +40,14 @@ var features = providers.DocumentationNotes{ // // This establishes the name (all caps), and the function to call to initialize it. func init() { + const providerName = "MSDNS" + const providerMaintainer = "@tlimoncelli" fns := providers.DspFuncs{ Initializer: newDNS, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("MSDNS", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newDNS(config map[string]string, metadata json.RawMessage) (providers.DNSServiceProvider, error) { diff --git a/providers/mythicbeasts/mythicbeastsProvider.go b/providers/mythicbeasts/mythicbeastsProvider.go index e55470d91..9bef9de87 100644 --- a/providers/mythicbeasts/mythicbeastsProvider.go +++ b/providers/mythicbeasts/mythicbeastsProvider.go @@ -47,11 +47,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "MYTHICBEASTS" + const providerMaintainer = "@tomfitzhenry" fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("MYTHICBEASTS", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newDsp(conf map[string]string, metadata json.RawMessage) (providers.DNSServiceProvider, error) { diff --git a/providers/namecheap/namecheapProvider.go b/providers/namecheap/namecheapProvider.go index 717178980..a69dfe6f9 100644 --- a/providers/namecheap/namecheapProvider.go +++ b/providers/namecheap/namecheapProvider.go @@ -42,15 +42,18 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("NAMECHEAP", newReg) + const providerName = "NAMECHEAP" + const providerMaintainer = "@willpower232" + providers.RegisterRegistrarType(providerName, newReg) fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("NAMECHEAP", fns, features) - providers.RegisterCustomRecordType("URL", "NAMECHEAP", "") - providers.RegisterCustomRecordType("URL301", "NAMECHEAP", "") - providers.RegisterCustomRecordType("FRAME", "NAMECHEAP", "") + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterCustomRecordType("URL", providerName, "") + providers.RegisterCustomRecordType("URL301", providerName, "") + providers.RegisterCustomRecordType("FRAME", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } func newDsp(conf map[string]string, metadata json.RawMessage) (providers.DNSServiceProvider, error) { diff --git a/providers/namedotcom/namedotcomProvider.go b/providers/namedotcom/namedotcomProvider.go index b7b820b98..a4f8c5fd0 100644 --- a/providers/namedotcom/namedotcomProvider.go +++ b/providers/namedotcom/namedotcomProvider.go @@ -65,10 +65,13 @@ func newProvider(conf map[string]string) (*namedotcomProvider, error) { } func init() { - providers.RegisterRegistrarType("NAMEDOTCOM", newReg) + const providerName = "NAMEDOTCOM" + const providerMaintainer = "NEEDS VOLUNTEER" + providers.RegisterRegistrarType(providerName, newReg) fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } providers.RegisterDomainServiceProviderType("NAMEDOTCOM", fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } diff --git a/providers/netcup/netcupProvider.go b/providers/netcup/netcupProvider.go index 846dd154d..3483b387b 100644 --- a/providers/netcup/netcupProvider.go +++ b/providers/netcup/netcupProvider.go @@ -24,11 +24,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "NETCUP" + const providerMaintainer = "@kordianbruck" fns := providers.DspFuncs{ Initializer: New, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("NETCUP", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // New creates a new API handle. diff --git a/providers/netlify/netlifyProvider.go b/providers/netlify/netlifyProvider.go index fe83a5cfe..ad90aac5b 100644 --- a/providers/netlify/netlifyProvider.go +++ b/providers/netlify/netlifyProvider.go @@ -33,13 +33,16 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "NETLIFY" + const providerMaintainer = "@SphericalKat" fns := providers.DspFuncs{ Initializer: newNetlify, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("NETLIFY", fns, features) - providers.RegisterCustomRecordType("NETLIFY", "NETLIFY", "") - providers.RegisterCustomRecordType("NETLIFYv6", "NETLIFY", "") + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterCustomRecordType(providerName, providerName, "") + providers.RegisterCustomRecordType("NETLIFYv6", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } type netlifyProvider struct { diff --git a/providers/ns1/ns1Provider.go b/providers/ns1/ns1Provider.go index f195fb1f4..bde47e02d 100644 --- a/providers/ns1/ns1Provider.go +++ b/providers/ns1/ns1Provider.go @@ -42,12 +42,15 @@ var docNotes = providers.DocumentationNotes{ const clientRetries = 10 func init() { + const providerName = "NS1" + const providerMaintainer = "@costasd" fns := providers.DspFuncs{ Initializer: newProvider, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("NS1", fns, providers.CanUseSRV, docNotes) - providers.RegisterCustomRecordType("NS1_URLFWD", "NS1", "") + providers.RegisterDomainServiceProviderType(providerName, fns, providers.CanUseSRV, docNotes) + providers.RegisterCustomRecordType("NS1_URLFWD", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } type nsone struct { diff --git a/providers/opensrs/opensrsProvider.go b/providers/opensrs/opensrsProvider.go index a74d67619..3f9f41c8f 100644 --- a/providers/opensrs/opensrsProvider.go +++ b/providers/opensrs/opensrsProvider.go @@ -19,7 +19,10 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("OPENSRS", newReg, features) + const providerName = "OPENSRS" + const providerMaintainer = "@philhug" + providers.RegisterRegistrarType(providerName, newReg, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } var defaultNameServerNames = []string{ diff --git a/providers/oracle/oracleProvider.go b/providers/oracle/oracleProvider.go index 0a560919a..1bcca0e5e 100644 --- a/providers/oracle/oracleProvider.go +++ b/providers/oracle/oracleProvider.go @@ -35,11 +35,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "ORACLE" + const providerMaintainer = "@kallsyms" fns := providers.DspFuncs{ Initializer: New, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("ORACLE", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } type oracleProvider struct { diff --git a/providers/ovh/ovhProvider.go b/providers/ovh/ovhProvider.go index 572250806..c78a5e3e1 100644 --- a/providers/ovh/ovhProvider.go +++ b/providers/ovh/ovhProvider.go @@ -74,12 +74,15 @@ func newReg(conf map[string]string) (providers.Registrar, error) { } func init() { + const providerName = "OVH" + const providerMaintainer = "@masterzen" fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterRegistrarType("OVH", newReg) - providers.RegisterDomainServiceProviderType("OVH", fns, features) + providers.RegisterRegistrarType(providerName, newReg) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func (c *ovhProvider) GetNameservers(domain string) ([]*models.Nameserver, error) { diff --git a/providers/packetframe/packetframeProvider.go b/providers/packetframe/packetframeProvider.go index b0aae570c..7a9342a01 100644 --- a/providers/packetframe/packetframeProvider.go +++ b/providers/packetframe/packetframeProvider.go @@ -50,11 +50,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "PACKETFRAME" + const providerMaintainer = "@hamptonmoore" fns := providers.DspFuncs{ Initializer: newPacketframe, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("PACKETFRAME", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // GetNameservers returns the nameservers for a domain. diff --git a/providers/porkbun/porkbunProvider.go b/providers/porkbun/porkbunProvider.go index 7b3d47bf1..7b21c602c 100644 --- a/providers/porkbun/porkbunProvider.go +++ b/providers/porkbun/porkbunProvider.go @@ -69,12 +69,15 @@ var features = providers.DocumentationNotes{ } func init() { - providers.RegisterRegistrarType("PORKBUN", newReg) + const providerName = "PORKBUN" + const providerMaintainer = "@imlonghao" + providers.RegisterRegistrarType(providerName, newReg) fns := providers.DspFuncs{ Initializer: newDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("PORKBUN", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // GetNameservers returns the nameservers for a domain. diff --git a/providers/powerdns/powerdnsProvider.go b/providers/powerdns/powerdnsProvider.go index 0f386d903..4e4c49f71 100644 --- a/providers/powerdns/powerdnsProvider.go +++ b/providers/powerdns/powerdnsProvider.go @@ -33,11 +33,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "POWERDNS" + const providerMaintainer = "@jpbede" fns := providers.DspFuncs{ Initializer: newDSP, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("POWERDNS", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // powerdnsProvider represents the powerdnsProvider DNSServiceProvider. diff --git a/providers/providers.go b/providers/providers.go index 79f86523b..fd36c2d8d 100644 --- a/providers/providers.go +++ b/providers/providers.go @@ -72,6 +72,15 @@ func RegisterDomainServiceProviderType(name string, fns DspFuncs, pm ...Provider unwrapProviderCapabilities(name, pm) } +var ProviderMaintainers = map[string]string{} + +func RegisterMaintainer( + providerName string, + gitHubUsername string, +) { + ProviderMaintainers[providerName] = gitHubUsername +} + // CreateRegistrar initializes a registrar instance from given credentials. func CreateRegistrar(rType string, config map[string]string) (Registrar, error) { var err error diff --git a/providers/realtimeregister/realtimeregisterProvider.go b/providers/realtimeregister/realtimeregisterProvider.go index 4cb3a3b33..807b2d98d 100644 --- a/providers/realtimeregister/realtimeregisterProvider.go +++ b/providers/realtimeregister/realtimeregisterProvider.go @@ -50,12 +50,15 @@ var features = providers.DocumentationNotes{ // init registers the domain service provider with dnscontrol. func init() { + const providerName = "REALTIMEREGISTER" + const providerMaintainer = "@PJEilers" fns := providers.DspFuncs{ Initializer: newRtrDsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("REALTIMEREGISTER", fns, features) - providers.RegisterRegistrarType("REALTIMEREGISTER", newRtrReg) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterRegistrarType(providerName, newRtrReg) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newRtr(config map[string]string, _ json.RawMessage) (*realtimeregisterAPI, error) { diff --git a/providers/route53/route53Provider.go b/providers/route53/route53Provider.go index d88658f17..ad2c1c598 100644 --- a/providers/route53/route53Provider.go +++ b/providers/route53/route53Provider.go @@ -91,13 +91,16 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "ROUTE53" + const providerMaintainer = "@tresni" fns := providers.DspFuncs{ Initializer: newRoute53Dsp, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("ROUTE53", fns, features) - providers.RegisterRegistrarType("ROUTE53", newRoute53Reg) - providers.RegisterCustomRecordType("R53_ALIAS", "ROUTE53", "") + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterRegistrarType(providerName, newRoute53Reg) + providers.RegisterCustomRecordType("R53_ALIAS", providerName, "") + providers.RegisterMaintainer(providerName, providerMaintainer) } func withRetry(f func() error) { diff --git a/providers/rwth/rwthProvider.go b/providers/rwth/rwthProvider.go index 3a6a56bf2..69468587f 100644 --- a/providers/rwth/rwthProvider.go +++ b/providers/rwth/rwthProvider.go @@ -35,11 +35,14 @@ var features = providers.DocumentationNotes{ // init registers the registrar and the domain service provider with dnscontrol. func init() { + const providerName = "RWTH" + const providerMaintainer = "@mistererwin" fns := providers.DspFuncs{ Initializer: New, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("RWTH", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // New allocates a DNS service provider. diff --git a/providers/softlayer/softlayerProvider.go b/providers/softlayer/softlayerProvider.go index 41775f09f..81e4446f3 100644 --- a/providers/softlayer/softlayerProvider.go +++ b/providers/softlayer/softlayerProvider.go @@ -31,11 +31,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "SOFTLAYER" + const providerMaintainer = "NEEDS VOLUNTEER" fns := providers.DspFuncs{ Initializer: newReg, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("SOFTLAYER", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func newReg(conf map[string]string, _ json.RawMessage) (providers.DNSServiceProvider, error) { diff --git a/providers/transip/transipProvider.go b/providers/transip/transipProvider.go index ad9882b46..a2e715473 100644 --- a/providers/transip/transipProvider.go +++ b/providers/transip/transipProvider.go @@ -87,11 +87,14 @@ func NewTransip(m map[string]string, metadata json.RawMessage) (providers.DNSSer } func init() { + const providerName = "TRANSIP" + const providerMaintainer = "@blackshadev" fns := providers.DspFuncs{ Initializer: NewTransip, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("TRANSIP", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } func (n *transipProvider) ListZones() ([]string, error) { diff --git a/providers/vultr/vultrProvider.go b/providers/vultr/vultrProvider.go index 2d75d092b..0c6151945 100644 --- a/providers/vultr/vultrProvider.go +++ b/providers/vultr/vultrProvider.go @@ -42,11 +42,14 @@ var features = providers.DocumentationNotes{ } func init() { + const providerName = "VULTR" + const providerMaintainer = "@pgaskin" fns := providers.DspFuncs{ Initializer: NewProvider, RecordAuditor: AuditRecords, } - providers.RegisterDomainServiceProviderType("VULTR", fns, features) + providers.RegisterDomainServiceProviderType(providerName, fns, features) + providers.RegisterMaintainer(providerName, providerMaintainer) } // vultrProvider represents the Vultr DNSServiceProvider.