mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-02-23 23:23:05 +08:00
68 lines
2.2 KiB
Go
68 lines
2.2 KiB
Go
package bunnydns
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/StackExchange/dnscontrol/v4/models"
|
|
"github.com/StackExchange/dnscontrol/v4/providers"
|
|
)
|
|
|
|
var features = providers.DocumentationNotes{
|
|
// The default for unlisted capabilities is 'Cannot'.
|
|
// See providers/capabilities.go for the entire list of capabilities.
|
|
providers.CanAutoDNSSEC: providers.Cannot(),
|
|
providers.CanGetZones: providers.Can(),
|
|
providers.CanConcur: providers.Cannot(),
|
|
providers.CanUseAlias: providers.Can("Bunny flattens CNAME records into A/AAAA records dynamically"),
|
|
providers.CanUseCAA: providers.Can(),
|
|
providers.CanUseDHCID: providers.Cannot(),
|
|
providers.CanUseDS: providers.Cannot(),
|
|
providers.CanUseDSForChildren: providers.Cannot(),
|
|
providers.CanUseLOC: providers.Cannot(),
|
|
providers.CanUseNAPTR: providers.Cannot(),
|
|
providers.CanUsePTR: providers.Can(),
|
|
providers.CanUseSOA: providers.Cannot(),
|
|
providers.CanUseSRV: providers.Can(),
|
|
providers.CanUseSSHFP: providers.Cannot(),
|
|
providers.CanUseTLSA: providers.Cannot(),
|
|
providers.DocCreateDomains: providers.Can(),
|
|
providers.DocDualHost: providers.Cannot(),
|
|
providers.DocOfficiallySupported: providers.Cannot(),
|
|
}
|
|
|
|
type bunnydnsProvider struct {
|
|
apiKey string
|
|
zones map[string]*zone
|
|
}
|
|
|
|
func init() {
|
|
const providerName = "BUNNY_DNS"
|
|
const providerMaintainer = "@ppmathis"
|
|
fns := providers.DspFuncs{
|
|
Initializer: newBunnydns,
|
|
RecordAuditor: AuditRecords,
|
|
}
|
|
providers.RegisterDomainServiceProviderType(providerName, fns, features)
|
|
providers.RegisterMaintainer(providerName, providerMaintainer)
|
|
}
|
|
|
|
func newBunnydns(settings map[string]string, _ json.RawMessage) (providers.DNSServiceProvider, error) {
|
|
apiKey := settings["api_key"]
|
|
if apiKey == "" {
|
|
return nil, fmt.Errorf("missing BUNNY_DNS api_key")
|
|
}
|
|
|
|
return &bunnydnsProvider{
|
|
apiKey: apiKey,
|
|
}, nil
|
|
}
|
|
|
|
func (b *bunnydnsProvider) GetNameservers(domain string) ([]*models.Nameserver, error) {
|
|
zone, err := b.findZoneByDomain(domain)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return models.ToNameservers(zone.Nameservers())
|
|
}
|