traefik/vendor/github.com/nrdcg/goinwx/domain.go
Ludovic Fernandez 2b2cfdfb32 Updates of Lego.
2019-02-13 17:26:04 +01:00

307 lines
9.3 KiB
Go

package goinwx
import (
"errors"
"fmt"
"time"
"github.com/fatih/structs"
"github.com/mitchellh/mapstructure"
)
const (
methodDomainCheck = "domain.check"
methodDomainCreate = "domain.create"
methodDomainDelete = "domain.delete"
methodDomainGetPrices = "domain.getPrices"
methodDomainGetRules = "domain.getRules"
methodDomainInfo = "domain.info"
methodDomainList = "domain.list"
methodDomainLog = "domain.log"
methodDomainPush = "domain.push"
methodDomainRenew = "domain.renew"
methodDomainRestore = "domain.restore"
methodDomainStats = "domain.stats"
methodDomainTrade = "domain.trade"
methodDomainTransfer = "domain.transfer"
methodDomainTransferOut = "domain.transferOut"
methodDomainUpdate = "domain.update"
methodDomainWhois = "domain.whois"
)
// DomainService API access to Domain.
type DomainService service
// Check Checks domains.
func (s *DomainService) Check(domains []string) ([]DomainCheckResponse, error) {
req := s.client.NewRequest(methodDomainCheck, map[string]interface{}{
"domain": domains,
"wide": "2",
})
resp, err := s.client.Do(*req)
if err != nil {
return nil, err
}
root := new(domainCheckResponseRoot)
err = mapstructure.Decode(*resp, &root)
if err != nil {
return nil, err
}
return root.Domains, nil
}
// GetPrices Gets TLDS prices.
func (s *DomainService) GetPrices(tlds []string) ([]DomainPriceResponse, error) {
req := s.client.NewRequest(methodDomainGetPrices, map[string]interface{}{
"tld": tlds,
"vat": false,
})
resp, err := s.client.Do(*req)
if err != nil {
return nil, err
}
root := new(domainPriceResponseRoot)
err = mapstructure.Decode(*resp, &root)
if err != nil {
return nil, err
}
return root.Prices, nil
}
// Register Register a domain.
func (s *DomainService) Register(request *DomainRegisterRequest) (*DomainRegisterResponse, error) {
req := s.client.NewRequest(methodDomainCreate, structs.Map(request))
resp, err := s.client.Do(*req)
if err != nil {
return nil, err
}
var result DomainRegisterResponse
err = mapstructure.Decode(*resp, &result)
if err != nil {
return nil, err
}
return &result, nil
}
// Delete Deletes a domain.
func (s *DomainService) Delete(domain string, scheduledDate time.Time) error {
req := s.client.NewRequest(methodDomainDelete, map[string]interface{}{
"domain": domain,
"scDate": scheduledDate.Format(time.RFC3339),
})
_, err := s.client.Do(*req)
return err
}
// Info Gets information about a domain.
func (s *DomainService) Info(domain string, roID int) (*DomainInfoResponse, error) {
req := s.client.NewRequest(methodDomainInfo, map[string]interface{}{
"domain": domain,
"wide": "2",
})
if roID != 0 {
req.Args["roId"] = roID
}
resp, err := s.client.Do(*req)
if err != nil {
return nil, err
}
var result DomainInfoResponse
err = mapstructure.Decode(*resp, &result)
if err != nil {
return nil, err
}
fmt.Println("Response", result)
return &result, nil
}
// List List domains.
func (s *DomainService) List(request *DomainListRequest) (*DomainList, error) {
if request == nil {
return nil, errors.New("request can't be nil")
}
requestMap := structs.Map(request)
requestMap["wide"] = "2"
req := s.client.NewRequest(methodDomainList, requestMap)
resp, err := s.client.Do(*req)
if err != nil {
return nil, err
}
var result DomainList
err = mapstructure.Decode(*resp, &result)
if err != nil {
return nil, err
}
return &result, nil
}
// Whois Whois about a domains.
func (s *DomainService) Whois(domain string) (string, error) {
req := s.client.NewRequest(methodDomainWhois, map[string]interface{}{
"domain": domain,
})
resp, err := s.client.Do(*req)
if err != nil {
return "", err
}
var result map[string]string
err = mapstructure.Decode(*resp, &result)
if err != nil {
return "", err
}
return result["whois"], nil
}
type domainCheckResponseRoot struct {
Domains []DomainCheckResponse `mapstructure:"domain"`
}
// DomainCheckResponse API model.
type DomainCheckResponse struct {
Available int `mapstructure:"avail"`
Status string `mapstructure:"status"`
Name string `mapstructure:"name"`
Domain string `mapstructure:"domain"`
TLD string `mapstructure:"tld"`
CheckMethod string `mapstructure:"checkmethod"`
Price float32 `mapstructure:"price"`
CheckTime float32 `mapstructure:"checktime"`
}
type domainPriceResponseRoot struct {
Prices []DomainPriceResponse `mapstructure:"price"`
}
// DomainPriceResponse API model.
type DomainPriceResponse struct {
Tld string `mapstructure:"tld"`
Currency string `mapstructure:"currency"`
CreatePrice float32 `mapstructure:"createPrice"`
MonthlyCreatePrice float32 `mapstructure:"monthlyCreatePrice"`
TransferPrice float32 `mapstructure:"transferPrice"`
RenewalPrice float32 `mapstructure:"renewalPrice"`
MonthlyRenewalPrice float32 `mapstructure:"monthlyRenewalPrice"`
UpdatePrice float32 `mapstructure:"updatePrice"`
TradePrice float32 `mapstructure:"tradePrice"`
TrusteePrice float32 `mapstructure:"trusteePrice"`
MonthlyTrusteePrice float32 `mapstructure:"monthlyTrusteePrice"`
CreatePeriod int `mapstructure:"createPeriod"`
TransferPeriod int `mapstructure:"transferPeriod"`
RenewalPeriod int `mapstructure:"renewalPeriod"`
TradePeriod int `mapstructure:"tradePeriod"`
}
// DomainRegisterRequest API model.
type DomainRegisterRequest struct {
Domain string `structs:"domain"`
Period string `structs:"period,omitempty"`
Registrant int `structs:"registrant"`
Admin int `structs:"admin"`
Tech int `structs:"tech"`
Billing int `structs:"billing"`
Nameservers []string `structs:"ns,omitempty"`
TransferLock string `structs:"transferLock,omitempty"`
RenewalMode string `structs:"renewalMode,omitempty"`
WhoisProvider string `structs:"whoisProvider,omitempty"`
WhoisURL string `structs:"whoisUrl,omitempty"`
ScDate string `structs:"scDate,omitempty"`
ExtDate string `structs:"extDate,omitempty"`
Asynchron string `structs:"asynchron,omitempty"`
Voucher string `structs:"voucher,omitempty"`
Testing string `structs:"testing,omitempty"`
}
// DomainRegisterResponse API model.
type DomainRegisterResponse struct {
RoID int `mapstructure:"roId"`
Price float32 `mapstructure:"price"`
Currency string `mapstructure:"currency"`
}
// DomainInfoResponse API model.
type DomainInfoResponse struct {
RoID int `mapstructure:"roId"`
Domain string `mapstructure:"domain"`
DomainAce string `mapstructure:"domainAce"`
Period string `mapstructure:"period"`
CrDate time.Time `mapstructure:"crDate"`
ExDate time.Time `mapstructure:"exDate"`
UpDate time.Time `mapstructure:"upDate"`
ReDate time.Time `mapstructure:"reDate"`
ScDate time.Time `mapstructure:"scDate"`
TransferLock int `mapstructure:"transferLock"`
Status string `mapstructure:"status"`
AuthCode string `mapstructure:"authCode"`
RenewalMode string `mapstructure:"renewalMode"`
TransferMode string `mapstructure:"transferMode"`
Registrant int `mapstructure:"registrant"`
Admin int `mapstructure:"admin"`
Tech int `mapstructure:"tech"`
Billing int `mapstructure:"billing"`
Nameservers []string `mapstructure:"ns"`
NoDelegation string `mapstructure:"noDelegation"`
Contacts map[string]Contact `mapstructure:"contact"`
}
// Contact API model.
type Contact struct {
RoID int `mapstructure:"roId"`
ID string `mapstructure:"id"`
Type string `mapstructure:"type"`
Name string `mapstructure:"name"`
Org string `mapstructure:"org"`
Street string `mapstructure:"street"`
City string `mapstructure:"city"`
PostalCode string `mapstructure:"pc"`
StateProvince string `mapstructure:"sp"`
Country string `mapstructure:"cc"`
Phone string `mapstructure:"voice"`
Fax string `mapstructure:"fax"`
Email string `mapstructure:"email"`
Remarks string `mapstructure:"remarks"`
Protection string `mapstructure:"protection"`
}
// DomainListRequest API model.
type DomainListRequest struct {
Domain string `structs:"domain,omitempty"`
RoID int `structs:"roId,omitempty"`
Status int `structs:"status,omitempty"`
Registrant int `structs:"registrant,omitempty"`
Admin int `structs:"admin,omitempty"`
Tech int `structs:"tech,omitempty"`
Billing int `structs:"billing,omitempty"`
RenewalMode int `structs:"renewalMode,omitempty"`
TransferLock int `structs:"transferLock,omitempty"`
NoDelegation int `structs:"noDelegation,omitempty"`
Tag int `structs:"tag,omitempty"`
Order int `structs:"order,omitempty"`
Page int `structs:"page,omitempty"`
PageLimit int `structs:"pagelimit,omitempty"`
}
// DomainList API model.
type DomainList struct {
Count int
Domains []DomainInfoResponse `mapstructure:"domain"`
}