zones.go raw
1 package auroradns
2
3 import (
4 "bytes"
5 "encoding/json"
6 "fmt"
7 "net/http"
8 )
9
10 // Zone a DNS zone.
11 type Zone struct {
12 ID string `json:"id,omitempty"`
13 Name string `json:"name"`
14 }
15
16 // CreateZone Creates a zone.
17 func (c *Client) CreateZone(domain string) (*Zone, *http.Response, error) {
18 body, err := json.Marshal(Zone{Name: domain})
19 if err != nil {
20 return nil, nil, fmt.Errorf("failed to marshall request body: %w", err)
21 }
22
23 req, err := c.newRequest(http.MethodPost, "/zones", bytes.NewReader(body))
24 if err != nil {
25 return nil, nil, err
26 }
27
28 zone := new(Zone)
29 resp, err := c.do(req, zone)
30 if err != nil {
31 return nil, resp, err
32 }
33
34 return zone, resp, nil
35 }
36
37 // DeleteZone Delete a zone.
38 func (c *Client) DeleteZone(zoneID string) (bool, *http.Response, error) {
39 resource := fmt.Sprintf("/zones/%s", zoneID)
40
41 req, err := c.newRequest(http.MethodDelete, resource, nil)
42 if err != nil {
43 return false, nil, err
44 }
45
46 resp, err := c.do(req, nil)
47 if err != nil {
48 return false, resp, err
49 }
50
51 return true, resp, nil
52 }
53
54 // ListZones returns a list of all zones.
55 func (c *Client) ListZones() ([]Zone, *http.Response, error) {
56 req, err := c.newRequest(http.MethodGet, "/zones", nil)
57 if err != nil {
58 return nil, nil, err
59 }
60
61 var zones []Zone
62 resp, err := c.do(req, &zones)
63 if err != nil {
64 return nil, resp, err
65 }
66
67 return zones, resp, nil
68 }
69