mirror of
https://github.com/jech/galene.git
synced 2024-11-22 08:35:57 +01:00
Implement create- and delete-user.
This commit is contained in:
parent
c785b9b3f1
commit
b634e494fd
1 changed files with 95 additions and 0 deletions
|
@ -16,6 +16,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"slices"
|
"slices"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
"golang.org/x/crypto/pbkdf2"
|
"golang.org/x/crypto/pbkdf2"
|
||||||
|
@ -61,6 +62,14 @@ var commands = map[string]command{
|
||||||
command: deleteGroupCmd,
|
command: deleteGroupCmd,
|
||||||
description: "delete a group",
|
description: "delete a group",
|
||||||
},
|
},
|
||||||
|
"create-user": {
|
||||||
|
command: createUserCmd,
|
||||||
|
description: "create a user",
|
||||||
|
},
|
||||||
|
"delete-user": {
|
||||||
|
command: deleteUserCmd,
|
||||||
|
description: "delete a user",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -511,3 +520,89 @@ func deleteGroupCmd(cmdname string, args []string) {
|
||||||
log.Fatalf("Delete group: %v", err)
|
log.Fatalf("Delete group: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parsePermissions(p string) (any, error) {
|
||||||
|
p = strings.TrimSpace(p)
|
||||||
|
if len(p) == 0 {
|
||||||
|
return nil, errors.New("empty permissions")
|
||||||
|
}
|
||||||
|
if p[0] == '[' {
|
||||||
|
var a []any
|
||||||
|
err := json.Unmarshal([]byte(p), &a)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return a, nil
|
||||||
|
}
|
||||||
|
return p, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func createUserCmd(cmdname string, args []string) {
|
||||||
|
var groupname string
|
||||||
|
var permissions string
|
||||||
|
cmd := flag.NewFlagSet(cmdname, flag.ExitOnError)
|
||||||
|
setUsage(cmd, cmdname,
|
||||||
|
"%v [option...] %v [option...] username\n",
|
||||||
|
os.Args[0], cmdname,
|
||||||
|
)
|
||||||
|
cmd.StringVar(&groupname, "group", "", "group")
|
||||||
|
cmd.StringVar(&permissions, "permissions", "present", "permissions")
|
||||||
|
cmd.Parse(args)
|
||||||
|
|
||||||
|
if cmd.NArg() != 1 {
|
||||||
|
cmd.Usage()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
perms, err := parsePermissions(permissions)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Parse permissions: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
url, err := url.JoinPath(
|
||||||
|
serverURL, "/galene-api/v0/.groups", groupname,
|
||||||
|
".users", cmd.Args()[0],
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Build URL: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
dict := map[string]any{"permissions": perms}
|
||||||
|
err = putJSON(url, dict, false)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Create user: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func deleteUserCmd(cmdname string, args []string) {
|
||||||
|
var groupname string
|
||||||
|
cmd := flag.NewFlagSet(cmdname, flag.ExitOnError)
|
||||||
|
setUsage(cmd, cmdname, "%v [option...] %v [option...] username\n",
|
||||||
|
os.Args[0], cmdname,
|
||||||
|
)
|
||||||
|
cmd.StringVar(&groupname, "group", "", "group `name`")
|
||||||
|
cmd.Parse(args)
|
||||||
|
|
||||||
|
if cmd.NArg() != 1 {
|
||||||
|
cmd.Usage()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
if groupname == "" {
|
||||||
|
fmt.Fprintf(cmd.Output(), "option \"-group\" is mandatory")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
url, err := url.JoinPath(
|
||||||
|
serverURL, "/galene-api/v0/.groups", groupname,
|
||||||
|
".users", cmd.Args()[0],
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Build URL: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = deleteValue(url)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Delete user: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue