mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-01-12 02:17:43 +08:00
44a7ba5711
* vultr: Switched to official API library (closes #528) * vultr: Renamed vultr.VultrApi to vultr.Provider * vendor: Updated govultr
157 lines
3.2 KiB
Go
157 lines
3.2 KiB
Go
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
|
|
}
|