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.UpdateUserHandler", }) var data struct { ID string `json:"userId"` Admin bool `json:"admin"` Activated bool `json:"activated"` PolochonURL string `json:"polochonUrl"` PolochonToken string `json:"polochonToken"` Password string `json:"password"` } 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 if data.Password != "" { // Update the user config var err error user.Hash, err = env.Auth.GenHash(data.Password) if err != nil { return err } } 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") }