ohsnap/api_users.go

58 lines
1.3 KiB
Go

package main
import (
"encoding/json"
"errors"
)
var ApiUsersRouting = map[string]struct{AuthFunction; DispatchFunction}{
"GET": {PublicPage, listUsers},
"POST": {PublicPage, addUser},
"DELETE": {delUser_Auth, delUser},
}
func listUsers(u *User, args []string, body []byte) (interface{}, error) {
if len(args) >= 1 {
return GetUser(args[0])
} else if u != nil {
return GetUsers()
} else {
return nil, errors.New("Need an user identifier")
}
}
func addUser(au *User, args []string, body []byte) (interface{}, error) {
type UserForm struct {
Name string
}
var u UserForm
if err := json.Unmarshal(body, &u); err != nil {
return nil, err
}
if id, err := AddUser(u.Name); err != nil {
return nil, err
} else if apikey, err := GenApiKey(u.Name); err != nil {
return nil, err
} else {
return map[string]interface{}{"id": id, "apikey": apikey}, nil
}
}
func delUser_Auth(u *User, args []string) bool {
return args[0] == u.Name
}
func delUser(u *User, args []string, body []byte) (interface{}, error) {
if len(args) < 1 {
return nil, errors.New("Need an user identifier to delete")
} else if nb, err := RemoveUser(args[0]); err != nil {
return nil, err
} else if nb <= 0 {
return nil, errors.New("No matching user")
} else {
return map[string]int64{"nb": nb}, nil
}
}