version.go raw

   1  package rest
   2  
   3  import (
   4  	"fmt"
   5  	"net/http"
   6  
   7  	"gopkg.in/ns1/ns1-go.v2/rest/model/dns"
   8  )
   9  
  10  // VersionsService handles 'zones/ZONE/versions' related endpoints.
  11  type VersionsService service
  12  
  13  // List returns all versions for a zone.
  14  //
  15  // NS1 API docs: https://ns1.com/api/#zones-get
  16  func (s *VersionsService) List(zone string) ([]*dns.Version, *http.Response, error) {
  17  	path := fmt.Sprintf("zones/%s/versions", zone)
  18  	req, err := s.client.NewRequest("GET", path, nil)
  19  	if err != nil {
  20  		return nil, nil, err
  21  	}
  22  
  23  	vl := []*dns.Version{}
  24  	var resp *http.Response
  25  	resp, err = s.client.Do(req, &vl)
  26  
  27  	if err != nil {
  28  		return nil, resp, err
  29  	}
  30  
  31  	return vl, resp, nil
  32  }
  33  
  34  // Create creates a new version for a zone
  35  //
  36  // NS1 API docs: https://ns1.com/api/#zones-get
  37  func (s *VersionsService) Create(zone string, force bool) (*dns.Version, *http.Response, error) {
  38  	path := fmt.Sprintf("zones/%s/versions?force=%t", zone, force)
  39  	req, err := s.client.NewRequest("PUT", path, nil)
  40  	if err != nil {
  41  		return nil, nil, err
  42  	}
  43  
  44  	var v dns.Version
  45  	var resp *http.Response
  46  	resp, err = s.client.Do(req, &v)
  47  	if err != nil {
  48  		return nil, resp, err
  49  	}
  50  
  51  	return &v, resp, nil
  52  }
  53  
  54  // Delete deletes a zone version
  55  //
  56  // NS1 API docs: https://ns1.com/api/#zones-get
  57  func (s *VersionsService) Delete(zone string, versionID int) (*http.Response, error) {
  58  	path := fmt.Sprintf("zones/%s/versions/%d", zone, versionID)
  59  	req, err := s.client.NewRequest("DELETE", path, nil)
  60  	if err != nil {
  61  		return nil, err
  62  	}
  63  
  64  	var v dns.Version
  65  	var resp *http.Response
  66  	resp, err = s.client.Do(req, &v)
  67  	if err != nil {
  68  		return resp, err
  69  	}
  70  
  71  	return resp, nil
  72  }
  73  
  74  // Activate activates a zone version
  75  //
  76  // NS1 API docs: https://ns1.com/api/#zones-get
  77  func (s *VersionsService) Activate(zone string, versionID int) (*http.Response, error) {
  78  	path := fmt.Sprintf("/v1/zones/%s/versions/%d/activate", zone, versionID)
  79  	req, err := s.client.NewRequest("POST", path, nil)
  80  	if err != nil {
  81  		return nil, err
  82  	}
  83  
  84  	var v dns.Version
  85  	var resp *http.Response
  86  	resp, err = s.client.Do(req, &v)
  87  	if err != nil {
  88  		return resp, err
  89  	}
  90  
  91  	return resp, nil
  92  }
  93