records.go raw
1 package auroradns
2
3 import (
4 "bytes"
5 "encoding/json"
6 "fmt"
7 "net/http"
8 )
9
10 // Record types.
11 const (
12 RecordTypeA = "A"
13 RecordTypeAAAA = "AAAA"
14 RecordTypeCNAME = "CNAME"
15 RecordTypeMX = "MX"
16 RecordTypeNS = "NS"
17 RecordTypeSOA = "SOA"
18 RecordTypeSRV = "SRV"
19 RecordTypeTXT = "TXT"
20 RecordTypeDS = "DS"
21 RecordTypePTR = "PTR"
22 RecordTypeSSHFP = "SSHFP"
23 RecordTypeTLSA = "TLS"
24 )
25
26 // Record a DNS record.
27 type Record struct {
28 ID string `json:"id,omitempty"`
29 RecordType string `json:"type"`
30 Name string `json:"name"`
31 Content string `json:"content"`
32 TTL int `json:"ttl,omitempty"`
33 }
34
35 // CreateRecord Creates a new record.
36 func (c *Client) CreateRecord(zoneID string, record Record) (*Record, *http.Response, error) {
37 body, err := json.Marshal(record)
38 if err != nil {
39 return nil, nil, fmt.Errorf("failed to marshall request body: %w", err)
40 }
41
42 resource := fmt.Sprintf("/zones/%s/records", zoneID)
43
44 req, err := c.newRequest(http.MethodPost, resource, bytes.NewReader(body))
45 if err != nil {
46 return nil, nil, err
47 }
48
49 newRecord := new(Record)
50 resp, err := c.do(req, newRecord)
51 if err != nil {
52 return nil, resp, err
53 }
54
55 return newRecord, resp, nil
56 }
57
58 // DeleteRecord Delete a record.
59 func (c *Client) DeleteRecord(zoneID, recordID string) (bool, *http.Response, error) {
60 resource := fmt.Sprintf("/zones/%s/records/%s", zoneID, recordID)
61
62 req, err := c.newRequest(http.MethodDelete, resource, nil)
63 if err != nil {
64 return false, nil, err
65 }
66
67 resp, err := c.do(req, nil)
68 if err != nil {
69 return false, resp, err
70 }
71
72 return true, resp, nil
73 }
74
75 // ListRecords returns a list of all records in given zone.
76 func (c *Client) ListRecords(zoneID string) ([]Record, *http.Response, error) {
77 resource := fmt.Sprintf("/zones/%s/records", zoneID)
78
79 req, err := c.newRequest(http.MethodGet, resource, nil)
80 if err != nil {
81 return nil, nil, err
82 }
83
84 var records []Record
85 resp, err := c.do(req, &records)
86 if err != nil {
87 return nil, resp, err
88 }
89
90 return records, resp, nil
91 }
92