dns_client.go raw
1 package network
2
3 import (
4 "fmt"
5
6 liquidweb "github.com/liquidweb/liquidweb-go"
7 )
8
9 type DNSZoneBackend interface {
10 List(liquidweb.ListMeta) (DNSZoneList, error)
11 ListAll() (DNSZoneList, error)
12 Create(DNSZoneCreateParams) (DNSZone, error)
13 Details(string) (DNSZone, error)
14 DeleteByName(string) error
15 }
16
17 type DNSZoneClient struct {
18 Backend liquidweb.Backend
19 }
20
21 func (c *DNSZoneClient) List(params liquidweb.ListMeta) (result DNSZoneList, err error) {
22 err = c.Backend.CallIntoInterface("bleed/Network/DNS/Zone/list", params, &result)
23 return
24 }
25
26 func (c *DNSZoneClient) ListAll() (result DNSZoneList, err error) {
27 var reqParams liquidweb.ListMeta
28 var incrementalResult DNSZoneList
29 incrementalResult.PageTotal = 2
30
31 for incrementalResult.PageTotal > incrementalResult.PageNum {
32 incrementalResult, err = c.List(reqParams)
33 if err != nil {
34 return DNSZoneList{}, err
35 }
36 result.Items = append(result.Items, incrementalResult.Items...)
37 reqParams.PageNum = incrementalResult.PageNum + 1
38 }
39 return
40 }
41
42 func (c *DNSZoneClient) Create(params DNSZoneCreateParams) (result DNSZone, err error) {
43 err = c.Backend.CallIntoInterface("bleed/Network/DNS/Zone/create", params, &result)
44 return
45 }
46
47 func (c *DNSZoneClient) DeleteByName(zoneName string) (err error) {
48 result := struct {
49 DeletedDomain string `json:"name"`
50 }{}
51 err = c.Backend.CallIntoInterface("bleed/Network/DNS/Zone/delete", struct {
52 Name string `json:"name"`
53 }{
54 Name: zoneName,
55 }, &result)
56 if err != nil {
57 return err
58 }
59 if result.DeletedDomain != zoneName {
60 return fmt.Errorf("requested delete of %s deleted %s", zoneName, result.DeletedDomain)
61 }
62 return nil
63 }
64
65 func (c *DNSZoneClient) Details(zoneName string) (zone DNSZone, err error) {
66 var result DNSZone
67 err = c.Backend.CallIntoInterface("bleed/Network/DNS/Zone/details", struct {
68 Name string `json:"name"`
69 }{
70 Name: zoneName,
71 }, &result)
72 return result, err
73 }
74
75 // DNSBackend describes the interface for interactions with the API.
76 type DNSBackend interface {
77 Create(*DNSRecordParams) (*DNSRecord, error)
78 Details(int) (*DNSRecord, error)
79 List(*DNSRecordParams) (*DNSRecordList, error)
80 ListAll(string) (DNSRecordList, error)
81 Update(*DNSRecordParams) (*DNSRecord, error)
82 Delete(*DNSRecordParams) (*DNSRecordDeletion, error)
83 }
84
85 // DNSClient is the backend implementation for interacting with DNS Records.
86 type DNSClient struct {
87 Backend liquidweb.Backend
88 }
89
90 // Create creates a new DNS Record.
91 func (c *DNSClient) Create(params *DNSRecordParams) (*DNSRecord, error) {
92 var result DNSRecord
93 err := c.Backend.CallIntoInterface("v1/Network/DNS/Record/create", params, &result)
94 if err != nil {
95 return nil, err
96 }
97
98 return &result, nil
99 }
100
101 // Details returns details about a DNS Record.
102 func (c *DNSClient) Details(id int) (*DNSRecord, error) {
103 var result DNSRecord
104 params := DNSRecordParams{ID: id}
105
106 err := c.Backend.CallIntoInterface("v1/Network/DNS/Record/details", params, &result)
107 if err != nil {
108 return nil, err
109 }
110 return &result, nil
111 }
112
113 // List returns a list of DNS Records.
114 func (c *DNSClient) List(params *DNSRecordParams) (*DNSRecordList, error) {
115 list := &DNSRecordList{}
116
117 err := c.Backend.CallIntoInterface("v1/Network/DNS/Record/list", params, list)
118 if err != nil {
119 return nil, err
120 }
121 return list, nil
122 }
123
124 // List returns a list of DNS Records.
125 func (c *DNSClient) ListAll(zone string) (result DNSRecordList, err error) {
126 var reqParams DNSRecordParams
127 incrementalResult := &DNSRecordList{}
128 reqParams.PageNum = 1
129 reqParams.Zone = zone
130 incrementalResult.PageTotal = 2
131
132 for incrementalResult.PageTotal > incrementalResult.PageNum {
133 incrementalResult, err = c.List(&reqParams)
134 if err != nil {
135 return DNSRecordList{}, err
136 }
137 result.Items = append(result.Items, incrementalResult.Items...)
138 reqParams.PageNum++
139 }
140 return
141 }
142
143 // Update will update a DNS Record.
144 func (c *DNSClient) Update(params *DNSRecordParams) (*DNSRecord, error) {
145 var result DNSRecord
146 err := c.Backend.CallIntoInterface("v1/Network/DNS/Record/update", params, &result)
147 if err != nil {
148 return nil, err
149 }
150 return &result, nil
151 }
152
153 // Delete will delete a DNS Record.
154 func (c *DNSClient) Delete(params *DNSRecordParams) (*DNSRecordDeletion, error) {
155 var result DNSRecordDeletion
156 err := c.Backend.CallIntoInterface("v1/Network/DNS/Record/delete", params, &result)
157 if err != nil {
158 return nil, err
159 }
160 return &result, nil
161 }
162