zones.go raw

   1  package auroradns
   2  
   3  import (
   4  	"bytes"
   5  	"encoding/json"
   6  	"fmt"
   7  	"net/http"
   8  )
   9  
  10  // Zone a DNS zone.
  11  type Zone struct {
  12  	ID   string `json:"id,omitempty"`
  13  	Name string `json:"name"`
  14  }
  15  
  16  // CreateZone Creates a zone.
  17  func (c *Client) CreateZone(domain string) (*Zone, *http.Response, error) {
  18  	body, err := json.Marshal(Zone{Name: domain})
  19  	if err != nil {
  20  		return nil, nil, fmt.Errorf("failed to marshall request body: %w", err)
  21  	}
  22  
  23  	req, err := c.newRequest(http.MethodPost, "/zones", bytes.NewReader(body))
  24  	if err != nil {
  25  		return nil, nil, err
  26  	}
  27  
  28  	zone := new(Zone)
  29  	resp, err := c.do(req, zone)
  30  	if err != nil {
  31  		return nil, resp, err
  32  	}
  33  
  34  	return zone, resp, nil
  35  }
  36  
  37  // DeleteZone Delete a zone.
  38  func (c *Client) DeleteZone(zoneID string) (bool, *http.Response, error) {
  39  	resource := fmt.Sprintf("/zones/%s", zoneID)
  40  
  41  	req, err := c.newRequest(http.MethodDelete, resource, nil)
  42  	if err != nil {
  43  		return false, nil, err
  44  	}
  45  
  46  	resp, err := c.do(req, nil)
  47  	if err != nil {
  48  		return false, resp, err
  49  	}
  50  
  51  	return true, resp, nil
  52  }
  53  
  54  // ListZones returns a list of all zones.
  55  func (c *Client) ListZones() ([]Zone, *http.Response, error) {
  56  	req, err := c.newRequest(http.MethodGet, "/zones", nil)
  57  	if err != nil {
  58  		return nil, nil, err
  59  	}
  60  
  61  	var zones []Zone
  62  	resp, err := c.do(req, &zones)
  63  	if err != nil {
  64  		return nil, resp, err
  65  	}
  66  
  67  	return zones, resp, nil
  68  }
  69