forked from forgejo/forgejo
add other session providers (#5963)
This commit is contained in:
parent
bf4badad1d
commit
9de871a0f8
160 changed files with 37644 additions and 66 deletions
119
vendor/github.com/couchbaselabs/go-couchbase/users.go
generated
vendored
Normal file
119
vendor/github.com/couchbaselabs/go-couchbase/users.go
generated
vendored
Normal file
|
@ -0,0 +1,119 @@
|
|||
package couchbase
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type User struct {
|
||||
Name string
|
||||
Id string
|
||||
Domain string
|
||||
Roles []Role
|
||||
}
|
||||
|
||||
type Role struct {
|
||||
Role string
|
||||
BucketName string `json:"bucket_name"`
|
||||
}
|
||||
|
||||
// Sample:
|
||||
// {"role":"admin","name":"Admin","desc":"Can manage ALL cluster features including security.","ce":true}
|
||||
// {"role":"query_select","bucket_name":"*","name":"Query Select","desc":"Can execute SELECT statement on bucket to retrieve data"}
|
||||
type RoleDescription struct {
|
||||
Role string
|
||||
Name string
|
||||
Desc string
|
||||
Ce bool
|
||||
BucketName string `json:"bucket_name"`
|
||||
}
|
||||
|
||||
// Return user-role data, as parsed JSON.
|
||||
// Sample:
|
||||
// [{"id":"ivanivanov","name":"Ivan Ivanov","roles":[{"role":"cluster_admin"},{"bucket_name":"default","role":"bucket_admin"}]},
|
||||
// {"id":"petrpetrov","name":"Petr Petrov","roles":[{"role":"replication_admin"}]}]
|
||||
func (c *Client) GetUserRoles() ([]interface{}, error) {
|
||||
ret := make([]interface{}, 0, 1)
|
||||
err := c.parseURLResponse("/settings/rbac/users", &ret)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Get the configured administrator.
|
||||
// Expected result: {"port":8091,"username":"Administrator"}
|
||||
adminInfo := make(map[string]interface{}, 2)
|
||||
err = c.parseURLResponse("/settings/web", &adminInfo)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Create a special entry for the configured administrator.
|
||||
adminResult := map[string]interface{}{
|
||||
"name": adminInfo["username"],
|
||||
"id": adminInfo["username"],
|
||||
"domain": "ns_server",
|
||||
"roles": []interface{}{
|
||||
map[string]interface{}{
|
||||
"role": "admin",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// Add the configured administrator to the list of results.
|
||||
ret = append(ret, adminResult)
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (c *Client) GetUserInfoAll() ([]User, error) {
|
||||
ret := make([]User, 0, 16)
|
||||
err := c.parseURLResponse("/settings/rbac/users", &ret)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func rolesToParamFormat(roles []Role) string {
|
||||
var buffer bytes.Buffer
|
||||
for i, role := range roles {
|
||||
if i > 0 {
|
||||
buffer.WriteString(",")
|
||||
}
|
||||
buffer.WriteString(role.Role)
|
||||
if role.BucketName != "" {
|
||||
buffer.WriteString("[")
|
||||
buffer.WriteString(role.BucketName)
|
||||
buffer.WriteString("]")
|
||||
}
|
||||
}
|
||||
return buffer.String()
|
||||
}
|
||||
|
||||
func (c *Client) PutUserInfo(u *User) error {
|
||||
params := map[string]interface{}{
|
||||
"name": u.Name,
|
||||
"roles": rolesToParamFormat(u.Roles),
|
||||
}
|
||||
var target string
|
||||
switch u.Domain {
|
||||
case "external":
|
||||
target = "/settings/rbac/users/" + u.Id
|
||||
case "local":
|
||||
target = "/settings/rbac/users/local/" + u.Id
|
||||
default:
|
||||
return fmt.Errorf("Unknown user type: %s", u.Domain)
|
||||
}
|
||||
var ret string // PUT returns an empty string. We ignore it.
|
||||
err := c.parsePutURLResponse(target, params, &ret)
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Client) GetRolesAll() ([]RoleDescription, error) {
|
||||
ret := make([]RoleDescription, 0, 32)
|
||||
err := c.parseURLResponse("/settings/rbac/roles", &ret)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ret, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue