-
Notifications
You must be signed in to change notification settings - Fork 21
/
record.go
106 lines (94 loc) · 2.41 KB
/
record.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
package namecheap
import (
"bytes"
"fmt"
)
func (c *Client) AddRecord(domain string, record *Record) (*Record, error) {
allRecords, err := c.GetHosts(domain)
if err != nil {
return nil, err
}
records := RemoveParkingRecords(domain, allRecords)
records = append(records, *record)
_, err = c.SetHosts(domain, records)
if err != nil {
return nil, err
}
return record, nil
}
func (c *Client) ReadRecord(domain string, hashId int) (*Record, error) {
records, err := c.GetHosts(domain)
if err != nil {
return nil, err
}
record, err := c.FindRecordByHash(hashId, records)
if err != nil {
return nil, err
}
return record, nil
}
func (c *Client) UpdateRecord(domain string, hashId int, record *Record) error {
allRecords, err := c.GetHosts(domain)
if err != nil {
return err
}
records := c.RemoveRecordByHash(hashId, allRecords)
records = append(records, *record)
_, err = c.SetHosts(domain, records)
if err != nil {
return err
}
return nil
}
func (c *Client) DeleteRecord(domain string, hashId int) error {
allRecords, err := c.GetHosts(domain)
if err != nil {
return err
}
records := c.RemoveRecordByHash(hashId, allRecords)
_, err = c.SetHosts(domain, records)
if err != nil {
return err
}
return nil
}
func (c *Client) CreateHash(record *Record) int {
var buf bytes.Buffer
buf.WriteString(fmt.Sprintf(record.Name))
buf.WriteString(fmt.Sprintf(record.RecordType))
buf.WriteString(fmt.Sprintf(record.Address))
return HashString(buf.String())
}
func (c *Client) FindRecordByHash(hashId int, records []Record) (*Record, error) {
for _, record := range records {
recordHash := c.CreateHash(&record)
if recordHash == hashId {
return &record, nil
}
}
return nil, fmt.Errorf("Could not find the record with hash %v", hashId)
}
func (c *Client) RemoveRecordByHash(hashId int, records []Record) []Record {
var ret []Record
for _, record := range records {
recordHash := c.CreateHash(&record)
if recordHash == hashId {
continue
}
ret = append(ret, record)
}
return ret
}
func RemoveParkingRecords(domain string, records []Record) []Record {
var ret []Record
for _, record := range records {
if record.RecordType == "CNAME" && record.Name == "www" && record.Address == "parkingpage.namecheap.com." {
continue
}
if record.RecordType == "URL" && record.Name == "@" && record.Address == "http://www."+domain+"/?from=@" {
continue
}
ret = append(ret, record)
}
return ret
}