forked from billputer/go-namecheap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdomain.go
136 lines (114 loc) · 3.51 KB
/
domain.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
131
132
133
134
135
136
package namecheap
import (
"errors"
"net/url"
"strconv"
"strings"
)
const (
domainsGetList = "namecheap.domains.getList"
domainsGetInfo = "namecheap.domains.getInfo"
domainsCheck = "namecheap.domains.check"
domainsCreate = "namecheap.domains.create"
)
// DomainGetListResult represents the data returned by 'domains.getList'
type DomainGetListResult struct {
ID int `xml:"ID,attr"`
Name string `xml:"Name,attr"`
User string `xml:"User,attr"`
Created string `xml:"Created,attr"`
Expires string `xml:"Expires,attr"`
IsExpired bool `xml:"IsExpired,attr"`
IsLocked bool `xml:"IsLocked,attr"`
AutoRenew bool `xml:"AutoRenew,attr"`
WhoisGuard string `xml:"WhoisGuard,attr"`
}
// DomainInfo represents the data returned by 'domains.getInfo'
type DomainInfo struct {
ID int `xml:"ID,attr"`
Name string `xml:"DomainName,attr"`
Owner string `xml:"OwnerName,attr"`
Created string `xml:"DomainDetails>CreatedDate"`
Expires string `xml:"DomainDetails>ExpiredDate"`
IsExpired bool `xml:"IsExpired,attr"`
IsLocked bool `xml:"IsLocked,attr"`
AutoRenew bool `xml:"AutoRenew,attr"`
DNSDetails DNSDetails `xml:"DnsDetails"`
}
type DNSDetails struct {
ProviderType string `xml:"ProviderType,attr"`
IsUsingOurDNS bool `xml:"IsUsingOurDNS"`
Nameservers []string `xml:"Nameserver"`
}
type DomainCheckResult struct {
Domain string `xml:"Domain,attr"`
Available bool `xml:"Available,attr"`
}
type DomainCreateResult struct {
Domain string `xml:"Domain,attr"`
Registered bool `xml:"Registered,attr"`
ChargedAmount float64 `xml:"ChargedAmount,attr"`
DomainID int `xml:"DomainID,attr"`
OrderID int `xml:"OrderID,attr"`
TransactionID int `xml:"TransactionID,attr"`
WhoisGuardEnable bool `xml:"WhoisGuardEnable,attr"`
NonRealTimeDomain bool `xml:"NonRealTimeDomain,attr"`
}
func (client *Client) DomainsGetList() ([]DomainGetListResult, error) {
requestInfo := &ApiRequest{
command: domainsGetList,
method: "GET",
params: url.Values{},
}
resp, err := client.do(requestInfo)
if err != nil {
return nil, err
}
return resp.Domains, nil
}
func (client *Client) DomainGetInfo(domainName string) (*DomainInfo, error) {
requestInfo := &ApiRequest{
command: domainsGetInfo,
method: "GET",
params: url.Values{},
}
requestInfo.params.Set("DomainName", domainName)
resp, err := client.do(requestInfo)
if err != nil {
return nil, err
}
return resp.DomainInfo, nil
}
func (client *Client) DomainsCheck(domainNames ...string) ([]DomainCheckResult, error) {
requestInfo := &ApiRequest{
command: domainsCheck,
method: "GET",
params: url.Values{},
}
requestInfo.params.Set("DomainList", strings.Join(domainNames, ","))
resp, err := client.do(requestInfo)
if err != nil {
return nil, err
}
return resp.DomainsCheck, nil
}
func (client *Client) DomainCreate(domainName string, years int) (*DomainCreateResult, error) {
if client.Registrant == nil {
return nil, errors.New("Registrant information on client cannot be empty")
}
requestInfo := &ApiRequest{
command: domainsCreate,
method: "POST",
params: url.Values{},
}
requestInfo.params.Set("DomainName", domainName)
requestInfo.params.Set("Years", strconv.Itoa(years))
if err := client.Registrant.addValues(requestInfo.params); err != nil {
return nil, err
}
resp, err := client.do(requestInfo)
if err != nil {
return nil, err
}
return resp.DomainCreate, nil
}