1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
package govultr
import (
"context"
"net/http"
"net/url"
)
// UserService is the interface to interact with the user management endpoints on the Vultr API
// Link: https://www.vultr.com/api/#user
type UserService interface {
Create(ctx context.Context, email, name, password, apiEnabled string, acls []string) (*User, error)
Delete(ctx context.Context, userID string) error
List(ctx context.Context) ([]User, error)
Update(ctx context.Context, user *User) error
}
// UserServiceHandler handles interaction with the user methods for the Vultr API
type UserServiceHandler struct {
client *Client
}
// User represents an user on Vultr
type User struct {
UserID string `json:"USERID"`
Name string `json:"name"`
Email string `json:"email"`
Password string `json:"password"`
APIEnabled string `json:"api_enabled"`
ACL []string `json:"acls"`
APIKey string `json:"api_key"`
}
// Create will add the specified user to your Vultr account
func (u *UserServiceHandler) Create(ctx context.Context, email, name, password, apiEnabled string, acls []string) (*User, error) {
uri := "/v1/user/create"
values := url.Values{
"email": {email},
"name": {name},
"password": {password},
"acls[]": acls,
}
if apiEnabled != "" {
values.Add("api_enabled", apiEnabled)
}
req, err := u.client.NewRequest(ctx, http.MethodPost, uri, values)
if err != nil {
return nil, err
}
user := new(User)
err = u.client.DoWithContext(ctx, req, user)
if err != nil {
return nil, err
}
user.Name = name
user.Email = email
user.APIEnabled = apiEnabled
user.ACL = acls
return user, nil
}
// Delete will remove the specified user from your Vultr account
func (u *UserServiceHandler) Delete(ctx context.Context, userID string) error {
uri := "/v1/user/delete"
values := url.Values{
"USERID": {userID},
}
req, err := u.client.NewRequest(ctx, http.MethodPost, uri, values)
if err != nil {
return err
}
err = u.client.DoWithContext(ctx, req, nil)
if err != nil {
return err
}
return nil
}
// List will list all the users associated with your Vultr account
func (u *UserServiceHandler) List(ctx context.Context) ([]User, error) {
uri := "/v1/user/list"
req, err := u.client.NewRequest(ctx, http.MethodGet, uri, nil)
if err != nil {
return nil, err
}
var users []User
err = u.client.DoWithContext(ctx, req, &users)
if err != nil {
return nil, err
}
return users, nil
}
// Update will update the given user. Empty strings will be ignored.
func (u *UserServiceHandler) Update(ctx context.Context, user *User) error {
uri := "/v1/user/update"
values := url.Values{
"USERID": {user.UserID},
}
// Optional
if user.Email != "" {
values.Add("email", user.Email)
}
if user.Name != "" {
values.Add("name", user.Name)
}
if user.Password != "" {
values.Add("password", user.Password)
}
if user.APIEnabled != "" {
values.Add("api_enabled", user.APIEnabled)
}
if len(user.ACL) > 0 {
for _, acl := range user.ACL {
values.Add("acls[]", acl)
}
}
req, err := u.client.NewRequest(ctx, http.MethodPost, uri, values)
if err != nil {
return err
}
err = u.client.DoWithContext(ctx, req, nil)
if err != nil {
return err
}
return nil
}
|