-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrewrite.go
130 lines (108 loc) · 2.78 KB
/
rewrite.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package adguard
import (
"encoding/json"
"fmt"
"net/http"
"strings"
)
// GetAllRewrites - Returns all DNS rewrite rules
func (c *ADG) GetAllRewrites() (*[]RewriteEntry, error) {
// initialize request
req, err := http.NewRequest("GET", fmt.Sprintf("%s/rewrite/list", c.HostURL), nil)
if err != nil {
return nil, err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
// convert response to a list of RewriteEntry objects
var allRewrites []RewriteEntry
err = json.Unmarshal(body, &allRewrites)
if err != nil {
return nil, err
}
return &allRewrites, nil
}
// GetRewrite - Return a DNS rewrite rule based on the domain
func (c *ADG) GetRewrite(domain string) (*RewriteEntry, error) {
// retrieve all DNS rewrite rules
allRewrites, err := c.GetAllRewrites()
if err != nil {
return nil, err
}
// loop over the results until we find the one we want
for _, rewrite := range *allRewrites {
if rewrite.Domain == domain {
return &rewrite, nil
}
}
// when no matches are found
return nil, nil
}
// CreateRewrite - Create a DNS rewrite rule
func (c *ADG) CreateRewrite(rewrite RewriteEntry) (*RewriteEntry, error) {
// convert provided rewrite rule to JSON
rb, err := json.Marshal(rewrite)
if err != nil {
return nil, err
}
// initialize request
req, err := http.NewRequest("POST", fmt.Sprintf("%s/rewrite/add", c.HostURL), strings.NewReader(string(rb)))
if err != nil {
return nil, err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
// appease Go
_ = body
// return the same rewrite rule that was passed
return &rewrite, nil
}
// UpdateRewrite - Update a DNS rewrite rule
func (c *ADG) UpdateRewrite(rewrite RewriteEntry) (*RewriteEntry, error) {
// there is no real update endpoint in ADG, need to delete and re-create
err := c.DeleteRewrite(rewrite.Domain)
if err != nil {
return nil, err
}
_, err = c.CreateRewrite(rewrite)
if err != nil {
return nil, err
}
// return the rewrite rule that was passed
return &rewrite, nil
}
// DeleteRewrite - Delete a DNS rewrite rule based on the domain
func (c *ADG) DeleteRewrite(domain string) error {
// confirm the DNS rewrite rule entry exists
rewrite, err := c.GetRewrite(domain)
if err != nil {
return err
} else if rewrite == nil {
return fmt.Errorf("unable to find a DNS rewrite rule for `%s`", domain)
}
// convert DNS rewrite to JSON
rb, err := json.Marshal(rewrite)
if err != nil {
return err
}
// initialize request
req, err := http.NewRequest("POST", fmt.Sprintf("%s/rewrite/delete", c.HostURL), strings.NewReader(string(rb)))
if err != nil {
return err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return err
}
// appease Go
_ = body
// no need to return anything
return nil
}