Skip to content

Commit 1cd9ce5

Browse files
committed
[feature] Add Virtual DNS Support (#75)
1 parent 9f46967 commit 1cd9ce5

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ The current feature list includes:
2727
- [x] Web Application Firewall (WAF)
2828
- [x] CloudFlare IPs
2929
- [x] User Administration (partial)
30+
- [x] Virtual DNS Management
3031
- [ ] Organization Administration
3132
- [ ] [Railgun](https://www.cloudflare.com/railgun/) administration
3233
- [ ] [Keyless SSL](https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/)

virtualdns.go

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package cloudflare
2+
3+
import (
4+
"encoding/json"
5+
6+
"github.com/pkg/errors"
7+
)
8+
9+
// VirtualDNS represents a Virtual DNS configuration.
10+
type VirtualDNS struct {
11+
ID string `json:"id"`
12+
Name string `json:"name"`
13+
OriginIPs []string `json:"origin_ips"`
14+
VirtualDNSIPs []string `json:"virtual_dns_ips"`
15+
MinimumCacheTTL uint `json:"minimum_cache_ttl"`
16+
MaximumCacheTTL uint `json:"maximum_cache_ttl"`
17+
DeprecateAnyRequests bool `json:"deprecate_any_requests"`
18+
ModifiedOn string `json:"modified_on"`
19+
}
20+
21+
// VirtualDNSResponse represents a Virtual DNS response.
22+
type VirtualDNSResponse struct {
23+
Response
24+
Result *VirtualDNS `json:"result"`
25+
}
26+
27+
// VirtualDNSListResponse represents an array of Virtual DNS responses.
28+
type VirtualDNSListResponse struct {
29+
Response
30+
Result []*VirtualDNS `json:"result"`
31+
}
32+
33+
// CreateVirtualDNS creates a new Virtual DNS cluster.
34+
// API reference:
35+
// https://api.cloudflare.com/#virtual-dns-users--create-a-virtual-dns-cluster
36+
// POST /user/virtual_dns
37+
func (api *API) CreateVirtualDNS(v *VirtualDNS) (*VirtualDNS, error) {
38+
res, err := api.makeRequest("POST", "/user/virtual_dns", v)
39+
if err != nil {
40+
return nil, errors.Wrap(err, errMakeRequestError)
41+
}
42+
43+
response := &VirtualDNSResponse{}
44+
err = json.Unmarshal(res, &response)
45+
if err != nil {
46+
return nil, errors.Wrap(err, errUnmarshalError)
47+
}
48+
49+
return response.Result, nil
50+
}
51+
52+
// VirtualDNS fetches a single virtual DNS cluster.
53+
// API reference:
54+
// https://api.cloudflare.com/#virtual-dns-users--get-a-virtual-dns-cluster
55+
// GET /user/virtual_dns/:identifier
56+
func (api *API) VirtualDNS(virtualDNSID string) (*VirtualDNS, error) {
57+
uri := "/user/virtual_dns/" + virtualDNSID
58+
res, err := api.makeRequest("GET", uri, nil)
59+
if err != nil {
60+
return nil, errors.Wrap(err, errMakeRequestError)
61+
}
62+
63+
response := &VirtualDNSResponse{}
64+
err = json.Unmarshal(res, &response)
65+
if err != nil {
66+
return nil, errors.Wrap(err, errUnmarshalError)
67+
}
68+
69+
return response.Result, nil
70+
}
71+
72+
// ListVirtualDNS lists the virtual DNS clusters associated with an account.
73+
// API reference:
74+
// https://api.cloudflare.com/#virtual-dns-users--get-virtual-dns-clusters
75+
// GET /user/virtual_dns
76+
func (api *API) ListVirtualDNS() ([]*VirtualDNS, error) {
77+
res, err := api.makeRequest("GET", "/user/virtual_dns", nil)
78+
if err != nil {
79+
return nil, errors.Wrap(err, errMakeRequestError)
80+
}
81+
82+
response := &VirtualDNSListResponse{}
83+
err = json.Unmarshal(res, &response)
84+
if err != nil {
85+
return nil, errors.Wrap(err, errUnmarshalError)
86+
}
87+
88+
return response.Result, nil
89+
}
90+
91+
// UpdateVirtualDNS updates a Virtual DNS cluster.
92+
// API reference:
93+
// https://api.cloudflare.com/#virtual-dns-users--modify-a-virtual-dns-cluster
94+
// PATCH /user/virtual_dns/:identifier
95+
func (api *API) UpdateVirtualDNS(virtualDNSID string, vv VirtualDNS) error {
96+
uri := "/user/virtual_dns/" + virtualDNSID
97+
res, err := api.makeRequest("PUT", uri, vv)
98+
if err != nil {
99+
return errors.Wrap(err, errMakeRequestError)
100+
}
101+
102+
response := &VirtualDNSResponse{}
103+
err = json.Unmarshal(res, &response)
104+
if err != nil {
105+
return errors.Wrap(err, errUnmarshalError)
106+
}
107+
108+
return nil
109+
}
110+
111+
// DeleteVirtualDNS deletes a Virtual DNS cluster. Note that this cannot be
112+
// undone, and will stop all traffic to that cluster.
113+
// API reference:
114+
// https://api.cloudflare.com/#virtual-dns-users--delete-a-virtual-dns-cluster
115+
// DELETE /user/virtual_dns/:identifier
116+
func (api *API) DeleteVirtualDNS(virtualDNSID string) error {
117+
uri := "/user/virtual_dns/" + virtualDNSID
118+
res, err := api.makeRequest("DELETE", uri, nil)
119+
if err != nil {
120+
return errors.Wrap(err, errMakeRequestError)
121+
}
122+
123+
response := &VirtualDNSResponse{}
124+
err = json.Unmarshal(res, &response)
125+
if err != nil {
126+
return errors.Wrap(err, errUnmarshalError)
127+
}
128+
129+
return nil
130+
}

0 commit comments

Comments
 (0)