dnscontrol/providers/bunnydns/bunnydnsProvider.go
2024-07-10 15:53:50 -04:00

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())
}