108 lines
2.8 KiB
Go
108 lines
2.8 KiB
Go
package dnsimple
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// ZonesService handles communication with the zone related
|
|
// methods of the DNSimple API.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/zones/
|
|
type ZonesService struct {
|
|
client *Client
|
|
}
|
|
|
|
// Zone represents a Zone in DNSimple.
|
|
type Zone struct {
|
|
ID int `json:"id,omitempty"`
|
|
AccountID int `json:"account_id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Reverse bool `json:"reverse,omitempty"`
|
|
CreatedAt string `json:"created_at,omitempty"`
|
|
UpdatedAt string `json:"updated_at,omitempty"`
|
|
}
|
|
|
|
// ZoneFile represents a Zone File in DNSimple.
|
|
type ZoneFile struct {
|
|
Zone string `json:"zone,omitempty"`
|
|
}
|
|
|
|
// zoneResponse represents a response from an API method that returns a Zone struct.
|
|
type zoneResponse struct {
|
|
Response
|
|
Data *Zone `json:"data"`
|
|
}
|
|
|
|
// zonesResponse represents a response from an API method that returns a collection of Zone struct.
|
|
type zonesResponse struct {
|
|
Response
|
|
Data []Zone `json:"data"`
|
|
}
|
|
|
|
// zoneFileResponse represents a response from an API method that returns a ZoneFile struct.
|
|
type zoneFileResponse struct {
|
|
Response
|
|
Data *ZoneFile `json:"data"`
|
|
}
|
|
|
|
// ZoneListOptions specifies the optional parameters you can provide
|
|
// to customize the ZonesService.ListZones method.
|
|
type ZoneListOptions struct {
|
|
// Select domains where the name contains given string.
|
|
NameLike string `url:"name_like,omitempty"`
|
|
|
|
ListOptions
|
|
}
|
|
|
|
// ListZones the zones for an account.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/zones/#list
|
|
func (s *ZonesService) ListZones(accountID string, options *ZoneListOptions) (*zonesResponse, error) {
|
|
path := versioned(fmt.Sprintf("/%v/zones", accountID))
|
|
zonesResponse := &zonesResponse{}
|
|
|
|
path, err := addURLQueryOptions(path, options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := s.client.get(path, zonesResponse)
|
|
if err != nil {
|
|
return zonesResponse, err
|
|
}
|
|
|
|
zonesResponse.HttpResponse = resp
|
|
return zonesResponse, nil
|
|
}
|
|
|
|
// GetZone fetches a zone.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/zones/#get
|
|
func (s *ZonesService) GetZone(accountID string, zoneName string) (*zoneResponse, error) {
|
|
path := versioned(fmt.Sprintf("/%v/zones/%v", accountID, zoneName))
|
|
zoneResponse := &zoneResponse{}
|
|
|
|
resp, err := s.client.get(path, zoneResponse)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
zoneResponse.HttpResponse = resp
|
|
return zoneResponse, nil
|
|
}
|
|
|
|
// GetZoneFile fetches a zone file.
|
|
//
|
|
// See https://developer.dnsimple.com/v2/zones/#get-file
|
|
func (s *ZonesService) GetZoneFile(accountID string, zoneName string) (*zoneFileResponse, error) {
|
|
path := versioned(fmt.Sprintf("/%v/zones/%v/file", accountID, zoneName))
|
|
zoneFileResponse := &zoneFileResponse{}
|
|
|
|
resp, err := s.client.get(path, zoneFileResponse)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
zoneFileResponse.HttpResponse = resp
|
|
return zoneFileResponse, nil
|
|
}
|