forked from tangled.org/core
this repo has no description
1package dns 2 3import ( 4 "context" 5 "fmt" 6 7 "github.com/cloudflare/cloudflare-go" 8 "tangled.org/core/appview/config" 9) 10 11type Record struct { 12 Type string 13 Name string 14 Content string 15 TTL int 16 Proxied bool 17} 18 19type Cloudflare struct { 20 api *cloudflare.API 21 zone string 22} 23 24func NewCloudflare(c *config.Config) (*Cloudflare, error) { 25 apiToken := c.Cloudflare.ApiToken 26 api, err := cloudflare.NewWithAPIToken(apiToken) 27 if err != nil { 28 return nil, err 29 } 30 return &Cloudflare{api: api, zone: c.Cloudflare.ZoneId}, nil 31} 32 33func (cf *Cloudflare) CreateDNSRecord(ctx context.Context, record Record) error { 34 _, err := cf.api.CreateDNSRecord(ctx, cloudflare.ZoneIdentifier(cf.zone), cloudflare.CreateDNSRecordParams{ 35 Type: record.Type, 36 Name: record.Name, 37 Content: record.Content, 38 TTL: record.TTL, 39 Proxied: &record.Proxied, 40 }) 41 if err != nil { 42 return fmt.Errorf("failed to create DNS record: %w", err) 43 } 44 return nil 45} 46 47func (cf *Cloudflare) DeleteDNSRecord(ctx context.Context, recordID string) error { 48 err := cf.api.DeleteDNSRecord(ctx, cloudflare.ZoneIdentifier(cf.zone), recordID) 49 if err != nil { 50 return fmt.Errorf("failed to delete DNS record: %w", err) 51 } 52 return nil 53}