Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 14 additions & 11 deletions provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ type Provider struct {
Context string `json:"context"`
Primary string `json:"primary"`
HttpClient *http.Client `json:"-"`
// Optional fields to skip zone lookup if already known
Zone *string `json:"origin,omitempty"`
Nameserver *string `json:"nameserver,omitempty"`
}

// NewWithDefaults is a convenience method to create the provider with sensible defaults.
Expand All @@ -39,12 +42,12 @@ func NewWithDefaults(username, password string) *Provider {
func (p *Provider) GetRecords(ctx context.Context, zone string) ([]libdns.Record, error) {
var records []libdns.Record

zoneInfo, err := p.checkZone(ctx, zone)
origin, nameserver, err := p.getZoneInfo(ctx, zone)
if err != nil {
return nil, err
}

result, err := p.getZone(ctx, zoneInfo.Origin, zoneInfo.Nameserver, zone)
result, err := p.getZone(ctx, origin, nameserver, zone)
if err != nil {
return nil, err
}
Expand All @@ -63,12 +66,12 @@ func (p *Provider) GetRecords(ctx context.Context, zone string) ([]libdns.Record

// AppendRecords adds records to the zone. It returns the records that were added.
func (p *Provider) AppendRecords(ctx context.Context, zone string, records []libdns.Record) ([]libdns.Record, error) {
zoneInfo, err := p.checkZone(ctx, zone)
origin, nameserver, err := p.getZoneInfo(ctx, zone)
if err != nil {
return nil, err
}

result, err := p.getZone(ctx, zoneInfo.Origin, zoneInfo.Nameserver, zone)
result, err := p.getZone(ctx, origin, nameserver, zone)
if err != nil {
return nil, err
}
Expand All @@ -81,7 +84,7 @@ func (p *Provider) AppendRecords(ctx context.Context, zone string, records []lib
result.Data[0].Records = append(result.Data[0].Records, zoneRecord)
}

if err := p.updateZone(ctx, zoneInfo.Origin, zoneInfo.Nameserver, result.Data[0]); err != nil {
if err := p.updateZone(ctx, origin, nameserver, result.Data[0]); err != nil {
return nil, err
}

Expand All @@ -91,12 +94,12 @@ func (p *Provider) AppendRecords(ctx context.Context, zone string, records []lib
// SetRecords sets the records in the zone, either by updating existing records or creating new ones.
// It returns the updated records.
func (p *Provider) SetRecords(ctx context.Context, zone string, records []libdns.Record) ([]libdns.Record, error) {
zoneInfo, err := p.checkZone(ctx, zone)
origin, nameserver, err := p.getZoneInfo(ctx, zone)
if err != nil {
return nil, err
}

result, err := p.getZone(ctx, zoneInfo.Origin, zoneInfo.Nameserver, zone)
result, err := p.getZone(ctx, origin, nameserver, zone)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -126,7 +129,7 @@ func (p *Provider) SetRecords(ctx context.Context, zone string, records []libdns
set = append(set, r)
}

if err := p.updateZone(ctx, zoneInfo.Origin, zoneInfo.Nameserver, result.Data[0]); err != nil {
if err := p.updateZone(ctx, origin, nameserver, result.Data[0]); err != nil {
return nil, err
}

Expand All @@ -135,12 +138,12 @@ func (p *Provider) SetRecords(ctx context.Context, zone string, records []libdns

// DeleteRecords deletes the records from the zone. It returns the records that were deleted.
func (p *Provider) DeleteRecords(ctx context.Context, zone string, records []libdns.Record) ([]libdns.Record, error) {
zoneInfo, err := p.checkZone(ctx, zone)
origin, nameserver, err := p.getZoneInfo(ctx, zone)
if err != nil {
return nil, err
}

result, err := p.getZone(ctx, zoneInfo.Origin, zoneInfo.Nameserver, zone)
result, err := p.getZone(ctx, origin, nameserver, zone)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -168,7 +171,7 @@ func (p *Provider) DeleteRecords(ctx context.Context, zone string, records []lib
deleted = append(deleted, r)
}

if err := p.updateZone(ctx, zoneInfo.Origin, zoneInfo.Nameserver, result.Data[0]); err != nil {
if err := p.updateZone(ctx, origin, nameserver, result.Data[0]); err != nil {
if _, ok := err.(*AutoDNSError); ok {
return nil, err
}
Expand Down
18 changes: 18 additions & 0 deletions sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,24 @@ import (
"strings"
)

// getZoneInfo returns the origin and nameserver needed for API calls.
// If Zone and Nameserver are set on the provider, it uses those.
// Otherwise, it performs a zone lookup via checkZone.
func (p *Provider) getZoneInfo(ctx context.Context, zone string) (origin, nameserver string, err error) {
// Use configured values if both are provided
if p.Zone != nil && p.Nameserver != nil {
return *p.Zone, *p.Nameserver, nil
}

// Otherwise, perform lookup
zoneInfo, err := p.checkZone(ctx, zone)
if err != nil {
return "", "", err
}

return zoneInfo.Origin, zoneInfo.Nameserver, nil
}

// checkZone servers as a check if the zone exists and returns the required data
// (origin and nameserver to retrieve the actual zone).
func (p *Provider) checkZone(ctx context.Context, zone string) (*ResponseSearchItem, error) {
Expand Down