forked from
tangled.org/core
fork
Configure Feed
Select the types of activity you want to include in your feed.
this repo has no description
fork
Configure Feed
Select the types of activity you want to include in your feed.
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) (string, error) {
34 result, 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 result.ID, 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}