122 lines
3.3 KiB
Go
122 lines
3.3 KiB
Go
|
package dnsimple
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// DomainsService handles communication with the domain related
|
||
|
// methods of the DNSimple API.
|
||
|
//
|
||
|
// DNSimple API docs: http://developer.dnsimple.com/domains/
|
||
|
type DomainsService struct {
|
||
|
client *Client
|
||
|
}
|
||
|
|
||
|
type Domain struct {
|
||
|
Id int `json:"id,omitempty"`
|
||
|
UserId int `json:"user_id,omitempty"`
|
||
|
RegistrantId int `json:"registrant_id,omitempty"`
|
||
|
Name string `json:"name,omitempty"`
|
||
|
UnicodeName string `json:"unicode_name,omitempty"`
|
||
|
Token string `json:"token,omitempty"`
|
||
|
State string `json:"state,omitempty"`
|
||
|
Language string `json:"language,omitempty"`
|
||
|
Lockable bool `json:"lockable,omitempty"`
|
||
|
AutoRenew bool `json:"auto_renew,omitempty"`
|
||
|
WhoisProtected bool `json:"whois_protected,omitempty"`
|
||
|
RecordCount int `json:"record_count,omitempty"`
|
||
|
ServiceCount int `json:"service_count,omitempty"`
|
||
|
ExpiresOn *Date `json:"expires_on,omitempty"`
|
||
|
CreatedAt *time.Time `json:"created_at,omitempty"`
|
||
|
UpdatedAt *time.Time `json:"updated_at,omitempty"`
|
||
|
}
|
||
|
|
||
|
type domainWrapper struct {
|
||
|
Domain Domain `json:"domain"`
|
||
|
}
|
||
|
|
||
|
// domainRequest represents a generic wrapper for a domain request,
|
||
|
// when domainWrapper cannot be used because of type constraint on Domain.
|
||
|
type domainRequest struct {
|
||
|
Domain interface{} `json:"domain"`
|
||
|
}
|
||
|
|
||
|
func domainIdentifier(value interface{}) string {
|
||
|
switch value := value.(type) {
|
||
|
case string:
|
||
|
return value
|
||
|
case int:
|
||
|
return fmt.Sprintf("%d", value)
|
||
|
}
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
// domainPath generates the resource path for given domain.
|
||
|
func domainPath(domain interface{}) string {
|
||
|
if domain != nil {
|
||
|
return fmt.Sprintf("domains/%s", domainIdentifier(domain))
|
||
|
}
|
||
|
return "domains"
|
||
|
}
|
||
|
|
||
|
// List the domains.
|
||
|
//
|
||
|
// DNSimple API docs: http://developer.dnsimple.com/domains/#list
|
||
|
func (s *DomainsService) List() ([]Domain, *Response, error) {
|
||
|
path := domainPath(nil)
|
||
|
returnedDomains := []domainWrapper{}
|
||
|
|
||
|
res, err := s.client.get(path, &returnedDomains)
|
||
|
if err != nil {
|
||
|
return []Domain{}, res, err
|
||
|
}
|
||
|
|
||
|
domains := []Domain{}
|
||
|
for _, domain := range returnedDomains {
|
||
|
domains = append(domains, domain.Domain)
|
||
|
}
|
||
|
|
||
|
return domains, res, nil
|
||
|
}
|
||
|
|
||
|
// Create a new domain.
|
||
|
//
|
||
|
// DNSimple API docs: http://developer.dnsimple.com/domains/#create
|
||
|
func (s *DomainsService) Create(domainAttributes Domain) (Domain, *Response, error) {
|
||
|
path := domainPath(nil)
|
||
|
wrappedDomain := domainWrapper{Domain: domainAttributes}
|
||
|
returnedDomain := domainWrapper{}
|
||
|
|
||
|
res, err := s.client.post(path, wrappedDomain, &returnedDomain)
|
||
|
if err != nil {
|
||
|
return Domain{}, res, err
|
||
|
}
|
||
|
|
||
|
return returnedDomain.Domain, res, nil
|
||
|
}
|
||
|
|
||
|
// Get fetches a domain.
|
||
|
//
|
||
|
// DNSimple API docs: http://developer.dnsimple.com/domains/#get
|
||
|
func (s *DomainsService) Get(domain interface{}) (Domain, *Response, error) {
|
||
|
path := domainPath(domain)
|
||
|
returnedDomain := domainWrapper{}
|
||
|
|
||
|
res, err := s.client.get(path, &returnedDomain)
|
||
|
if err != nil {
|
||
|
return Domain{}, res, err
|
||
|
}
|
||
|
|
||
|
return returnedDomain.Domain, res, nil
|
||
|
}
|
||
|
|
||
|
// Delete a domain.
|
||
|
//
|
||
|
// DNSimple API docs: http://developer.dnsimple.com/domains/#delete
|
||
|
func (s *DomainsService) Delete(domain interface{}) (*Response, error) {
|
||
|
path := domainPath(domain)
|
||
|
|
||
|
return s.client.delete(path, nil)
|
||
|
}
|