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