func ChangeUserPassword(c *middleware.Context, cmd m.ChangeUserPasswordCommand) Response { userQuery := m.GetUserByIdQuery{Id: c.UserId} if err := bus.Dispatch(&userQuery); err != nil { return ApiError(500, "Could not read user from database", err) } passwordHashed := util.EncodePassword(cmd.OldPassword, userQuery.Result.Salt) if passwordHashed != userQuery.Result.Password { return ApiError(401, "Invalid old password", nil) } if len(cmd.NewPassword) < 4 { return ApiError(400, "New password too short", nil) } cmd.UserId = c.UserId cmd.NewPassword = util.EncodePassword(cmd.NewPassword, userQuery.Result.Salt) if err := bus.Dispatch(&cmd); err != nil { return ApiError(500, "Failed to change user password", err) } return ApiSuccess("User password changed") }
func ResetPassword(c *middleware.Context, form dtos.ResetUserPasswordForm) Response { query := m.ValidateResetPasswordCodeQuery{Code: form.Code} if err := bus.Dispatch(&query); err != nil { if err == m.ErrInvalidEmailCode { return ApiError(400, "Invalid or expired reset password code", nil) } return ApiError(500, "Unknown error validating email code", err) } if form.NewPassword != form.ConfirmPassword { return ApiError(400, "Passwords do not match", nil) } cmd := m.ChangeUserPasswordCommand{} cmd.UserId = query.Result.Id cmd.NewPassword = util.EncodePassword(form.NewPassword, query.Result.Salt) if err := bus.Dispatch(&cmd); err != nil { return ApiError(500, "Failed to change user password", err) } return ApiSuccess("User password changed") }