forked from TrueCloudLab/lego
64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
|
package dns
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/timewasted/linode"
|
||
|
)
|
||
|
|
||
|
type (
|
||
|
// Domain represents a domain.
|
||
|
Domain struct {
|
||
|
AXFR_IPs string `json:"AXFR_IPS"`
|
||
|
Description string `json:"DESCRIPTION"`
|
||
|
Domain string `json:"DOMAIN"`
|
||
|
DomainID int `json:"DOMAINID"`
|
||
|
Expire_Sec int `json:"EXPIRE_SEC"`
|
||
|
LPM_DisplayGroup string `json:"LPM_DISPLAYGROUP"`
|
||
|
Master_IPs string `json:"MASTER_IPS"`
|
||
|
Refresh_Sec int `json:"REFRESH_SEC"`
|
||
|
Retry_Sec int `json:"RETRY_SEC"`
|
||
|
SOA_Email string `json:"SOA_EMAIL"`
|
||
|
Status int `json:"STATUS"`
|
||
|
TTL_Sec int `json:"TTL_SEC"`
|
||
|
Type string `json:"TYPE"`
|
||
|
}
|
||
|
// DomainResponse represents the response to a create, update, or
|
||
|
// delete domain API call.
|
||
|
DomainResponse struct {
|
||
|
DomainID int `json:"DomainID"`
|
||
|
}
|
||
|
)
|
||
|
|
||
|
// DeleteDomain executes the "domain.delete" API call. This will delete the
|
||
|
// domain specified by domainID.
|
||
|
func (d *DNS) DeleteDomain(domainID int) (*DomainResponse, error) {
|
||
|
params := linode.Parameters{
|
||
|
"DomainID": strconv.Itoa(domainID),
|
||
|
}
|
||
|
var response *DomainResponse
|
||
|
_, err := d.linode.Request("domain.delete", params, &response)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return response, nil
|
||
|
}
|
||
|
|
||
|
// GetDomain returns the specified domain. This search is not case-sensitive.
|
||
|
func (d *DNS) GetDomain(domain string) (*Domain, error) {
|
||
|
list, err := d.GetDomains(nil)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
for _, d := range list {
|
||
|
if strings.EqualFold(d.Domain, domain) {
|
||
|
return d, nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil, linode.NewError(errors.New("dns: requested domain not found"))
|
||
|
}
|