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