vikunja-api/routes/api/v1/user_update_password.go

71 lines
2 KiB
Go
Raw Normal View History

2018-06-10 11:11:41 +02:00
package v1
import (
2018-07-25 16:24:46 +02:00
"code.vikunja.io/api/models"
2018-06-10 11:11:41 +02:00
"github.com/labstack/echo"
"net/http"
2018-06-10 11:11:41 +02:00
)
2018-10-03 19:32:05 +02:00
// UserPassword holds a user password. Used to update it.
type UserPassword struct {
OldPassword string `json:"old_password"`
NewPassword string `json:"new_password"`
2018-06-10 11:11:41 +02:00
}
// UserChangePassword is the handler to change a users password
2018-06-10 11:11:41 +02:00
func UserChangePassword(c echo.Context) error {
// swagger:operation POST /user/password user updatePassword
// ---
// summary: Shows the current user
// consumes:
// - application/json
// produces:
// - application/json
// parameters:
// - name: body
// in: body
// schema:
// "$ref": "#/definitions/Password"
// responses:
// "200":
// "$ref": "#/responses/Message"
// "400":
// "$ref": "#/responses/Message"
// "404":
// "$ref": "#/responses/Message"
// "500":
// "$ref": "#/responses/Message"
2018-06-10 11:11:41 +02:00
// Check if the user is itself
doer, err := models.GetCurrentUser(c)
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, "Error getting current user.")
2018-06-10 11:11:41 +02:00
}
// Check for Request Content
var newPW UserPassword
if err := c.Bind(&newPW); err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "No password provided.")
2018-06-10 11:11:41 +02:00
}
// Check the current password
if _, err = models.CheckUserCredentials(&models.UserLogin{Username:doer.Username,Password:newPW.OldPassword}); err != nil {
if models.IsErrUserDoesNotExist(err) {
return echo.NewHTTPError(http.StatusNotFound, "The user does not exist.")
}
return c.JSON(http.StatusUnauthorized, models.Message{"Wrong password."})
}
// Update the password
if err = models.UpdateUserPassword(&doer, newPW.NewPassword); err != nil {
2018-08-30 19:14:02 +02:00
if models.IsErrUserDoesNotExist(err) {
return echo.NewHTTPError(http.StatusNotFound, "The user does not exist.")
2018-08-30 19:14:02 +02:00
}
2018-06-10 11:11:41 +02:00
models.Log.Error("Error updating a users password, user: %d, err: %s", doer.ID, err)
return echo.NewHTTPError(http.StatusInternalServerError, "An error occurred.")
2018-06-10 11:11:41 +02:00
}
return c.JSON(http.StatusOK, models.Message{"The password was updated successfully."})
2018-06-10 11:11:41 +02:00
}