107 lines
2.3 KiB
Go
107 lines
2.3 KiB
Go
package admin
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"git.quimbo.fr/odwrtw/canape/backend/config"
|
|
"git.quimbo.fr/odwrtw/canape/backend/users"
|
|
"git.quimbo.fr/odwrtw/canape/backend/web"
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// GetUsersHandler returns the user list
|
|
func GetUsersHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
log := env.Log.WithFields(logrus.Fields{
|
|
"function": "admin.GetUsersHandler",
|
|
})
|
|
|
|
log.Debug("Getting users")
|
|
|
|
users, err := users.GetAll(env.Database)
|
|
if err != nil {
|
|
return env.RenderError(w, err)
|
|
}
|
|
|
|
return env.RenderJSON(w, users)
|
|
}
|
|
|
|
// GenerateUserToken generates a user token
|
|
func GenerateUserToken(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
log := env.Log.WithFields(logrus.Fields{
|
|
"function": "admin.GenerateUserToken",
|
|
})
|
|
log.Debug("Generating user token")
|
|
|
|
vars := mux.Vars(r)
|
|
username := vars["username"]
|
|
|
|
user, err := users.Get(env.Database, username)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
t, err := env.Auth.GenerateJWTToken(r, user)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
t.Description = "generated token for polochon"
|
|
|
|
if err := t.Add(env.Database); err != nil {
|
|
return err
|
|
}
|
|
|
|
return env.RenderJSON(w, t)
|
|
}
|
|
|
|
// UpdateUserHandler updates the user data
|
|
func UpdateUserHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
log := env.Log.WithFields(logrus.Fields{
|
|
"function": "admin.PostActivateUserHandler",
|
|
})
|
|
|
|
var data struct {
|
|
ID string `json:"userId"`
|
|
Admin bool `json:"admin"`
|
|
Activated bool `json:"activated"`
|
|
PolochonURL string `json:"polochonUrl"`
|
|
PolochonToken string `json:"polochonToken"`
|
|
}
|
|
if err := json.NewDecoder(r.Body).Decode(&data); err != nil {
|
|
return err
|
|
}
|
|
|
|
if data.ID == "" {
|
|
return env.RenderError(w, fmt.Errorf("Empty user id"))
|
|
}
|
|
|
|
user, err := users.GetByID(env.Database, data.ID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Update the polochon config
|
|
polochonConfig := &config.UserPolochon{
|
|
URL: data.PolochonURL,
|
|
Token: data.PolochonToken,
|
|
}
|
|
if err := user.SetConfig("polochon", polochonConfig); err != nil {
|
|
return err
|
|
}
|
|
|
|
user.Admin = data.Admin
|
|
user.Activated = data.Activated
|
|
|
|
log.Debugf("updating user")
|
|
|
|
// Save the user with the new configurations
|
|
if err := user.Update(env.Database); err != nil {
|
|
return err
|
|
}
|
|
|
|
return env.RenderOK(w, "user updated")
|
|
}
|