Select Git revision
routerUsers.go
routerUsers.go 6.60 KiB
package router
import (
"net/http"
"nexus-common/caps"
"nexus-common/params"
"nexus-server/users"
"nexus-server/utils"
"github.com/labstack/echo/v4"
"github.com/go-playground/validator/v10"
)
type RouterUsers struct {
users *users.Users
}
func NewRouterUsers() *RouterUsers {
return &RouterUsers{users.GetUsersInstance()}
}
// Lists users.
// Requires CAP_USER_LIST.
// curl --cacert ca.pem -X GET http://localhost:1077/users -H "Authorization: Bearer <AccessToken>"
func (r *RouterUsers) GetUsers(c echo.Context) error {
// Retrieves logged user from context.
user, err := getLoggedUser(r.users, c)
if err != nil {
return echo.NewHTTPError(http.StatusUnauthorized, err.Error())
}
if !user.HasCapability(caps.CAP_USER_LIST) {
return echo.NewHTTPError(http.StatusUnauthorized, msgInsufficientCaps)
}
list := []users.UserWithoutPwd{}
for _, u := range r.users.GetUsers() {
user := users.UserWithoutPwd{u.Email, u.FirstName, u.LastName, u.Caps}
list = append(list, user)
}
return c.JSONPretty(http.StatusOK, list, " ")
}
// Retrieves the logged (authententicated) user.
// curl --cacert ca.pem -X GET http://localhost:1077/users/me -H "Authorization: Bearer <AccessToken>"
func (r *RouterUsers) GetLoggedUser(c echo.Context) error {
user, err := getLoggedUser(r.users, c)
if err != nil {
return echo.NewHTTPError(http.StatusUnauthorized, err.Error())
}
return c.JSONPretty(http.StatusOK, user, " ")
}
// Deletes a user by its ID.
// Requires CAP_USER_DESTROY.
// curl --cacert ca.pem -X DELETE http://localhost:1077/users/janedoes@nexus.org -H "Authorization: Bearer <AccessToken>"
func (r *RouterUsers) DeleteUserByEmail(c echo.Context) error {
// Retrieves logged user from context.
user, err := getLoggedUser(r.users, c)
if err != nil {
return echo.NewHTTPError(http.StatusUnauthorized, err.Error())
}
if !user.HasCapability(caps.CAP_USER_DESTROY) {
return echo.NewHTTPError(http.StatusUnauthorized, msgInsufficientCaps)
}
userToDelete, err := r.users.GetUserByEmail(c.Param("email"))
if err != nil {