tsig_key.go raw

   1  package rest
   2  
   3  import (
   4  	"errors"
   5  	"fmt"
   6  	"net/http"
   7  
   8  	"gopkg.in/ns1/ns1-go.v2/rest/model/dns"
   9  )
  10  
  11  // TsigService handles 'tsig' endpoint.
  12  type TsigService service
  13  
  14  // List returns all tsig keys and basic tsig keys configuration details for each.
  15  //
  16  // NS1 API docs: https://ns1.com/api/#getlist-tsig-keys
  17  func (s *TsigService) List() ([]*dns.TSIGKey, *http.Response, error) {
  18  	req, err := s.client.NewRequest("GET", "tsig", nil)
  19  	if err != nil {
  20  		return nil, nil, err
  21  	}
  22  
  23  	tsigKeyList := []*dns.TSIGKey{}
  24  	var resp *http.Response
  25  	resp, err = s.client.Do(req, &tsigKeyList)
  26  	if err != nil {
  27  		return nil, resp, err
  28  	}
  29  
  30  	return tsigKeyList, resp, nil
  31  }
  32  
  33  // Get takes a TSIG key name and returns a single TSIG key and its basic configuration details.
  34  //
  35  // NS1 API docs: https://ns1.com/api/#getview-tsig-key-details
  36  func (s *TsigService) Get(name string) (*dns.TSIGKey, *http.Response, error) {
  37  	path := fmt.Sprintf("tsig/%s", name)
  38  
  39  	req, err := s.client.NewRequest("GET", path, nil)
  40  	if err != nil {
  41  		return nil, nil, err
  42  	}
  43  
  44  	var tk dns.TSIGKey
  45  	var resp *http.Response
  46  	resp, err = s.client.Do(req, &tk)
  47  	if err != nil {
  48  		switch errType := err.(type) {
  49  		case *Error:
  50  			if errType.Resp.StatusCode == http.StatusNotFound {
  51  				return nil, resp, ErrTsigKeyMissing
  52  			}
  53  		}
  54  		return nil, resp, err
  55  	}
  56  
  57  	return &tk, resp, nil
  58  }
  59  
  60  // Create takes a *TSIGkey and creates a new TSIG key.
  61  //
  62  // NS1 API docs: https://ns1.com/api/#putcreate-a-tsig-key
  63  func (s *TsigService) Create(tk *dns.TSIGKey) (*http.Response, error) {
  64  	path := fmt.Sprintf("tsig/%s", tk.Name)
  65  
  66  	req, err := s.client.NewRequest("PUT", path, &tk)
  67  	if err != nil {
  68  		return nil, err
  69  	}
  70  
  71  	// Update TSIG key fields with data from api(ensure consistent)
  72  	resp, err := s.client.Do(req, &tk)
  73  	if err != nil {
  74  		switch errType := err.(type) {
  75  		case *Error:
  76  			if errType.Resp.StatusCode == http.StatusConflict {
  77  				return resp, ErrTsigKeyExists
  78  			}
  79  		}
  80  		return resp, err
  81  	}
  82  
  83  	return resp, nil
  84  }
  85  
  86  // Update takes a *TSIGKey and modifies basic details of a TSIG key.
  87  //
  88  // NS1 API docs: https://ns1.com/api/#postmodify-a-tsig-key
  89  func (s *TsigService) Update(tk *dns.TSIGKey) (*http.Response, error) {
  90  	path := fmt.Sprintf("tsig/%s", tk.Name)
  91  
  92  	req, err := s.client.NewRequest("POST", path, &tk)
  93  	if err != nil {
  94  		return nil, err
  95  	}
  96  
  97  	// Update TSIG key fields with data from api(ensure consistent)
  98  	resp, err := s.client.Do(req, &tk)
  99  	if err != nil {
 100  		switch errType := err.(type) {
 101  		case *Error:
 102  			if errType.Resp.StatusCode == http.StatusNotFound {
 103  				return resp, ErrTsigKeyMissing
 104  			}
 105  		}
 106  		return resp, err
 107  	}
 108  
 109  	return resp, nil
 110  }
 111  
 112  // Delete takes a TSIG key name and destroys an existing TSIG key.
 113  //
 114  // NS1 API docs: https://ns1.com/api/#deleteremove-a-tsig-key
 115  func (s *TsigService) Delete(name string) (*http.Response, error) {
 116  	path := fmt.Sprintf("tsig/%s", name)
 117  
 118  	req, err := s.client.NewRequest("DELETE", path, nil)
 119  	if err != nil {
 120  		return nil, err
 121  	}
 122  
 123  	resp, err := s.client.Do(req, nil)
 124  	if err != nil {
 125  		switch errType := err.(type) {
 126  		case *Error:
 127  			if errType.Resp.StatusCode == http.StatusNotFound {
 128  				return resp, ErrTsigKeyMissing
 129  			}
 130  		}
 131  		return resp, err
 132  	}
 133  
 134  	return resp, nil
 135  }
 136  
 137  var (
 138  	// ErrTsigKeyExists bundles PUT create error.
 139  	ErrTsigKeyExists = errors.New("TSIG key already exists")
 140  	// ErrTsigKeyMissing bundles GET/POST/DELETE error.
 141  	ErrTsigKeyMissing = errors.New("TSIG key does not exist")
 142  )
 143