records.go raw

   1  package auroradns
   2  
   3  import (
   4  	"bytes"
   5  	"encoding/json"
   6  	"fmt"
   7  	"net/http"
   8  )
   9  
  10  // Record types.
  11  const (
  12  	RecordTypeA     = "A"
  13  	RecordTypeAAAA  = "AAAA"
  14  	RecordTypeCNAME = "CNAME"
  15  	RecordTypeMX    = "MX"
  16  	RecordTypeNS    = "NS"
  17  	RecordTypeSOA   = "SOA"
  18  	RecordTypeSRV   = "SRV"
  19  	RecordTypeTXT   = "TXT"
  20  	RecordTypeDS    = "DS"
  21  	RecordTypePTR   = "PTR"
  22  	RecordTypeSSHFP = "SSHFP"
  23  	RecordTypeTLSA  = "TLS"
  24  )
  25  
  26  // Record a DNS record.
  27  type Record struct {
  28  	ID         string `json:"id,omitempty"`
  29  	RecordType string `json:"type"`
  30  	Name       string `json:"name"`
  31  	Content    string `json:"content"`
  32  	TTL        int    `json:"ttl,omitempty"`
  33  }
  34  
  35  // CreateRecord Creates a new record.
  36  func (c *Client) CreateRecord(zoneID string, record Record) (*Record, *http.Response, error) {
  37  	body, err := json.Marshal(record)
  38  	if err != nil {
  39  		return nil, nil, fmt.Errorf("failed to marshall request body: %w", err)
  40  	}
  41  
  42  	resource := fmt.Sprintf("/zones/%s/records", zoneID)
  43  
  44  	req, err := c.newRequest(http.MethodPost, resource, bytes.NewReader(body))
  45  	if err != nil {
  46  		return nil, nil, err
  47  	}
  48  
  49  	newRecord := new(Record)
  50  	resp, err := c.do(req, newRecord)
  51  	if err != nil {
  52  		return nil, resp, err
  53  	}
  54  
  55  	return newRecord, resp, nil
  56  }
  57  
  58  // DeleteRecord Delete a record.
  59  func (c *Client) DeleteRecord(zoneID, recordID string) (bool, *http.Response, error) {
  60  	resource := fmt.Sprintf("/zones/%s/records/%s", zoneID, recordID)
  61  
  62  	req, err := c.newRequest(http.MethodDelete, resource, nil)
  63  	if err != nil {
  64  		return false, nil, err
  65  	}
  66  
  67  	resp, err := c.do(req, nil)
  68  	if err != nil {
  69  		return false, resp, err
  70  	}
  71  
  72  	return true, resp, nil
  73  }
  74  
  75  // ListRecords returns a list of all records in given zone.
  76  func (c *Client) ListRecords(zoneID string) ([]Record, *http.Response, error) {
  77  	resource := fmt.Sprintf("/zones/%s/records", zoneID)
  78  
  79  	req, err := c.newRequest(http.MethodGet, resource, nil)
  80  	if err != nil {
  81  		return nil, nil, err
  82  	}
  83  
  84  	var records []Record
  85  	resp, err := c.do(req, &records)
  86  	if err != nil {
  87  		return nil, resp, err
  88  	}
  89  
  90  	return records, resp, nil
  91  }
  92