Skip to content
Snippets Groups Projects
Select Git revision
  • 6c54feaea27cbf79ae52a8fbfaf50a34a299281c
  • live_exam_os_ubuntu default protected
2 results

routerUsers.go

Blame
  • 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 {