1
0

Add user token renew (#113)

This commit is contained in:
konrad
2019-12-07 19:52:04 +00:00
parent 10ab8ef4d9
commit 62e550bf35
5 changed files with 134 additions and 22 deletions

View File

@ -19,6 +19,7 @@ package v1
import (
"code.vikunja.io/api/pkg/models"
"code.vikunja.io/web/handler"
"github.com/dgrijalva/jwt-go"
"github.com/labstack/echo/v4"
"net/http"
)
@ -59,3 +60,36 @@ func Login(c echo.Context) error {
return c.JSON(http.StatusOK, Token{Token: t})
}
// RenewToken gives a new token to every user with a valid token
// If the token is valid is checked in the middleware.
// @Summary Renew user token
// @Description Returns a new valid jwt user token with an extended length.
// @tags user
// @Accept json
// @Produce json
// @Success 200 {object} v1.Token
// @Failure 400 {object} models.Message "Only user token are available for renew."
// @Router /user/token [post]
func RenewToken(c echo.Context) error {
jwtinf := c.Get("user").(*jwt.Token)
claims := jwtinf.Claims.(jwt.MapClaims)
typ := int(claims["type"].(float64))
if typ != AuthTypeUser {
return echo.ErrBadRequest
}
user, err := models.GetUserFromClaims(claims)
if err != nil {
return handler.HandleHTTPError(err, c)
}
// Create token
t, err := NewUserJWTAuthtoken(user)
if err != nil {
return err
}
return c.JSON(http.StatusOK, Token{Token: t})
}