account_apikey.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/account"
   9  )
  10  
  11  // APIKeysService handles 'account/apikeys' endpoint.
  12  type APIKeysService service
  13  
  14  // List returns all api keys in the account.
  15  //
  16  // NS1 API docs: https://ns1.com/api/#apikeys-get
  17  func (s *APIKeysService) List() ([]*account.APIKey, *http.Response, error) {
  18  	req, err := s.client.NewRequest("GET", "account/apikeys", nil)
  19  	if err != nil {
  20  		return nil, nil, err
  21  	}
  22  
  23  	kl := []*account.APIKey{}
  24  	resp, err := s.client.Do(req, &kl)
  25  	if err != nil {
  26  		return nil, resp, err
  27  	}
  28  
  29  	return kl, resp, nil
  30  }
  31  
  32  // Get returns details of an api key, including permissions, for a single API Key.
  33  // Note: do not use the API Key itself as the keyid in the URL — use the id of the key.
  34  //
  35  // NS1 API docs: https://ns1.com/api/#apikeys-id-get
  36  func (s *APIKeysService) Get(keyID string) (*account.APIKey, *http.Response, error) {
  37  	path := fmt.Sprintf("account/apikeys/%s", keyID)
  38  
  39  	req, err := s.client.NewRequest("GET", path, nil)
  40  	if err != nil {
  41  		return nil, nil, err
  42  	}
  43  
  44  	var a account.APIKey
  45  	resp, err := s.client.Do(req, &a)
  46  	if err != nil {
  47  		switch err.(type) {
  48  		case *Error:
  49  			if resourceMissingMatch(err.(*Error).Message) {
  50  				return nil, resp, ErrKeyMissing
  51  			}
  52  
  53  		}
  54  		return nil, resp, err
  55  	}
  56  
  57  	return &a, resp, nil
  58  }
  59  
  60  // Create takes a *APIKey and creates a new account apikey.
  61  //
  62  // NS1 API docs: https://ns1.com/api/#apikeys-put
  63  func (s *APIKeysService) Create(a *account.APIKey) (*http.Response, error) {
  64  	var (
  65  		req *http.Request
  66  		err error
  67  	)
  68  
  69  	req, err = s.client.NewRequest("PUT", "account/apikeys", a)
  70  	if err != nil {
  71  		return nil, err
  72  	}
  73  
  74  	// Update account fields with data from api(ensure consistent)
  75  	resp, err := s.client.Do(req, &a)
  76  	if err != nil {
  77  		switch err.(type) {
  78  		case *Error:
  79  			if err.(*Error).Message == fmt.Sprintf("api key with name \"%s\" exists", a.Name) {
  80  				return resp, ErrKeyExists
  81  			}
  82  		}
  83  		return resp, err
  84  	}
  85  
  86  	return resp, nil
  87  }
  88  
  89  // Update changes the name or access rights for an API Key.
  90  //
  91  // NS1 API docs: https://ns1.com/api/#apikeys-id-post
  92  func (s *APIKeysService) Update(a *account.APIKey) (*http.Response, error) {
  93  	path := fmt.Sprintf("account/apikeys/%s", a.ID)
  94  
  95  	var (
  96  		req *http.Request
  97  		err error
  98  	)
  99  
 100  	req, err = s.client.NewRequest("POST", path, a)
 101  	if err != nil {
 102  		return nil, err
 103  	}
 104  
 105  	// Update apikey fields with data from api(ensure consistent)
 106  	resp, err := s.client.Do(req, &a)
 107  	if err != nil {
 108  		switch err.(type) {
 109  		case *Error:
 110  			if resourceMissingMatch(err.(*Error).Message) {
 111  				return resp, ErrKeyMissing
 112  			}
 113  		}
 114  		return resp, err
 115  	}
 116  
 117  	return resp, nil
 118  }
 119  
 120  // Delete deletes an apikey.
 121  //
 122  // NS1 API docs: https://ns1.com/api/#apikeys-id-delete
 123  func (s *APIKeysService) Delete(keyID string) (*http.Response, error) {
 124  	path := fmt.Sprintf("account/apikeys/%s", keyID)
 125  
 126  	req, err := s.client.NewRequest("DELETE", path, nil)
 127  	if err != nil {
 128  		return nil, err
 129  	}
 130  
 131  	resp, err := s.client.Do(req, nil)
 132  	if err != nil {
 133  		switch err.(type) {
 134  		case *Error:
 135  			if resourceMissingMatch(err.(*Error).Message) {
 136  				return resp, ErrKeyMissing
 137  			}
 138  		}
 139  		return resp, err
 140  	}
 141  
 142  	return resp, nil
 143  }
 144  
 145  var (
 146  	// ErrKeyExists bundles PUT create error.
 147  	ErrKeyExists = errors.New("key already exists")
 148  	// ErrKeyMissing bundles GET/POST/DELETE error.
 149  	ErrKeyMissing = errors.New("key does not exist")
 150  )
 151