128 lines
2.7 KiB
Go
128 lines
2.7 KiB
Go
package rabbithole
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
)
|
|
|
|
type UserInfo struct {
|
|
Name string `json:"name"`
|
|
PasswordHash string `json:"password_hash"`
|
|
// Tags control permissions. Built-in tags: administrator, management, policymaker.
|
|
Tags string `json:"tags"`
|
|
}
|
|
|
|
// Settings used to create users. Tags must be comma-separated.
|
|
type UserSettings struct {
|
|
Name string `json:"name"`
|
|
// Tags control permissions. Administrator grants full
|
|
// permissions, management grants management UI and HTTP API
|
|
// access, policymaker grants policy management permissions.
|
|
Tags string `json:"tags"`
|
|
|
|
// *never* returned by RabbitMQ. Set by the client
|
|
// to create/update a user. MK.
|
|
Password string `json:"password"`
|
|
}
|
|
|
|
//
|
|
// GET /api/users
|
|
//
|
|
|
|
// Example response:
|
|
// [{"name":"guest","password_hash":"8LYTIFbVUwi8HuV/dGlp2BYsD1I=","tags":"administrator"}]
|
|
|
|
// Returns a list of all users in a cluster.
|
|
func (c *Client) ListUsers() (rec []UserInfo, err error) {
|
|
req, err := newGETRequest(c, "users/")
|
|
if err != nil {
|
|
return []UserInfo{}, err
|
|
}
|
|
|
|
if err = executeAndParseRequest(c, req, &rec); err != nil {
|
|
return []UserInfo{}, err
|
|
}
|
|
|
|
return rec, nil
|
|
}
|
|
|
|
//
|
|
// GET /api/users/{name}
|
|
//
|
|
|
|
// Returns information about individual user.
|
|
func (c *Client) GetUser(username string) (rec *UserInfo, err error) {
|
|
req, err := newGETRequest(c, "users/"+PathEscape(username))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err = executeAndParseRequest(c, req, &rec); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return rec, nil
|
|
}
|
|
|
|
//
|
|
// PUT /api/users/{name}
|
|
//
|
|
|
|
// Updates information about individual user.
|
|
func (c *Client) PutUser(username string, info UserSettings) (res *http.Response, err error) {
|
|
body, err := json.Marshal(info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
req, err := newRequestWithBody(c, "PUT", "users/"+PathEscape(username), body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res, err = executeRequest(c, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (c *Client) PutUserWithoutPassword(username string, info UserSettings) (res *http.Response, err error) {
|
|
body, err := json.Marshal(UserInfo{Tags: info.Tags})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
req, err := newRequestWithBody(c, "PUT", "users/"+PathEscape(username), body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res, err = executeRequest(c, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
//
|
|
// DELETE /api/users/{name}
|
|
//
|
|
|
|
// Deletes user.
|
|
func (c *Client) DeleteUser(username string) (res *http.Response, err error) {
|
|
req, err := newRequestWithBody(c, "DELETE", "users/"+PathEscape(username), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res, err = executeRequest(c, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res, nil
|
|
}
|