127 lines
2.7 KiB
Go
127 lines
2.7 KiB
Go
|
package rabbithole
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"net/http"
|
||
|
"net/url"
|
||
|
)
|
||
|
|
||
|
//
|
||
|
// GET /api/permissions
|
||
|
//
|
||
|
|
||
|
// Example response:
|
||
|
//
|
||
|
// [{"user":"guest","vhost":"/","configure":".*","write":".*","read":".*"}]
|
||
|
|
||
|
type PermissionInfo struct {
|
||
|
User string `json:"user"`
|
||
|
Vhost string `json:"vhost"`
|
||
|
|
||
|
// Configuration permissions
|
||
|
Configure string `json:"configure"`
|
||
|
// Write permissions
|
||
|
Write string `json:"write"`
|
||
|
// Read permissions
|
||
|
Read string `json:"read"`
|
||
|
}
|
||
|
|
||
|
// Returns permissions for all users and virtual hosts.
|
||
|
func (c *Client) ListPermissions() (rec []PermissionInfo, err error) {
|
||
|
req, err := newGETRequest(c, "permissions/")
|
||
|
if err != nil {
|
||
|
return []PermissionInfo{}, err
|
||
|
}
|
||
|
|
||
|
if err = executeAndParseRequest(c, req, &rec); err != nil {
|
||
|
return []PermissionInfo{}, err
|
||
|
}
|
||
|
|
||
|
return rec, nil
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// GET /api/users/{user}/permissions
|
||
|
//
|
||
|
|
||
|
// Returns permissions of a specific user.
|
||
|
func (c *Client) ListPermissionsOf(username string) (rec []PermissionInfo, err error) {
|
||
|
req, err := newGETRequest(c, "users/"+url.QueryEscape(username)+"/permissions")
|
||
|
if err != nil {
|
||
|
return []PermissionInfo{}, err
|
||
|
}
|
||
|
|
||
|
if err = executeAndParseRequest(c, req, &rec); err != nil {
|
||
|
return []PermissionInfo{}, err
|
||
|
}
|
||
|
|
||
|
return rec, nil
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// GET /api/permissions/{vhost}/{user}
|
||
|
//
|
||
|
|
||
|
// Returns permissions of user in virtual host.
|
||
|
func (c *Client) GetPermissionsIn(vhost, username string) (rec PermissionInfo, err error) {
|
||
|
req, err := newGETRequest(c, "permissions/"+url.QueryEscape(vhost)+"/"+url.QueryEscape(username))
|
||
|
if err != nil {
|
||
|
return PermissionInfo{}, err
|
||
|
}
|
||
|
|
||
|
if err = executeAndParseRequest(c, req, &rec); err != nil {
|
||
|
return PermissionInfo{}, err
|
||
|
}
|
||
|
|
||
|
return rec, nil
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// PUT /api/permissions/{vhost}/{user}
|
||
|
//
|
||
|
|
||
|
type Permissions struct {
|
||
|
Configure string `json:"configure"`
|
||
|
Write string `json:"write"`
|
||
|
Read string `json:"read"`
|
||
|
}
|
||
|
|
||
|
// Updates permissions of user in virtual host.
|
||
|
func (c *Client) UpdatePermissionsIn(vhost, username string, permissions Permissions) (res *http.Response, err error) {
|
||
|
body, err := json.Marshal(permissions)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
req, err := newRequestWithBody(c, "PUT", "permissions/"+url.QueryEscape(vhost)+"/"+url.QueryEscape(username), body)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
res, err = executeRequest(c, req)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return res, nil
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// DELETE /api/permissions/{vhost}/{user}
|
||
|
//
|
||
|
|
||
|
// Clears (deletes) permissions of user in virtual host.
|
||
|
func (c *Client) ClearPermissionsIn(vhost, username string) (res *http.Response, err error) {
|
||
|
req, err := newRequestWithBody(c, "DELETE", "permissions/"+url.QueryEscape(vhost)+"/"+url.QueryEscape(username), nil)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
res, err = executeRequest(c, req)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return res, nil
|
||
|
}
|