dnscontrol/vendor/github.com/billputer/go-namecheap/domain.go

137 lines
3.5 KiB
Go
Raw Normal View History

2016-08-23 08:31:50 +08:00
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,attr"`
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
}