| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package cloudflare
- import (
- "context"
- "fmt"
- "github.com/cloudflare/cloudflare-go"
- "github.com/porter-dev/porter/internal/integrations/dns"
- )
- // RecordType strongly types cloudflare dns entry types
- type RecordType string
- const (
- // RecordType_A declares an A record type for cloudflare
- RecordType_A RecordType = "A"
- // RecordType_CNAME declares an CNME record type for cloudflare
- RecordType_CNAME = "CNAME"
- )
- // TTL sets the TTL for Cloudflare DNS records
- const TTL = 300
- // Client is a struct wrapper around the cloudflare client
- type Client struct {
- zoneID string
- client *cloudflare.API
- }
- // NewClient creates a new cloudflare API client
- func NewClient(apiToken string, runDomain string) (Client, error) {
- client, err := cloudflare.NewWithAPIToken(apiToken)
- if err != nil {
- return Client{}, err
- }
- zoneID, err := client.ZoneIDByName(runDomain)
- if err != nil {
- return Client{}, err
- }
- return Client{client: client, zoneID: zoneID}, nil
- }
- // CreateCNAMERecord creates a new CNAME record for the nameserver
- //
- // The method ignores record.RootDomain in favor of the zoneID derived from c.runDomain
- func (c Client) CreateCNAMERecord(record dns.Record) error {
- proxy := false
- cloudflareRecord := cloudflare.CreateDNSRecordParams{
- Name: record.Name,
- Type: string(RecordType_CNAME),
- Content: record.Value,
- TTL: TTL,
- Proxied: &proxy,
- }
- _, err := c.client.CreateDNSRecord(context.Background(), cloudflare.ZoneIdentifier(c.zoneID), cloudflareRecord)
- if err != nil {
- return fmt.Errorf("failed to create CNAME dns record: %w", err)
- }
- return err
- }
- // CreateARecord creates a new A record for the nameserver
- //
- // The method ignores record.RootDomain in favor of the zoneID derived from c.runDomain
- func (c Client) CreateARecord(record dns.Record) error {
- proxy := false
- cloudflareRecord := cloudflare.CreateDNSRecordParams{
- Name: record.Name,
- Type: string(RecordType_A),
- Content: record.Value,
- TTL: TTL,
- Proxied: &proxy,
- }
- _, err := c.client.CreateDNSRecord(context.Background(), cloudflare.ZoneIdentifier(c.zoneID), cloudflareRecord)
- if err != nil {
- return fmt.Errorf("failed to create A dns record: %w", err)
- }
- return nil
- }
|