reset_password.rs 843 B

12345678910111213141516171819202122232425262728293031
  1. use actix_web::{HttpResponse, web, patch};
  2. use sqlx::PgPool;
  3. use uuid::Uuid;
  4. use serde_json::json;
  5. use serde::Deserialize;
  6. use crate::{
  7. app_error::AppError,
  8. models::user::User,
  9. logic::{valid_password, hash_password}
  10. };
  11. #[derive(Deserialize)]
  12. struct Body {
  13. user_id: String,
  14. token: String,
  15. password: String,
  16. confirm_password: String
  17. }
  18. #[patch("/user/password/reset")]
  19. pub async fn route(
  20. db: web::Data<PgPool>,
  21. body: web::Json<Body>
  22. ) -> Result<HttpResponse, AppError> {
  23. let user_id = Uuid::parse_str(&body.user_id)?;
  24. let token = Uuid::parse_str(&body.token)?;
  25. valid_password(&body.password, &body.confirm_password)?;
  26. let pass_hash = hash_password(&body.password)?;
  27. User::reset_password(&db, user_id, token, pass_hash).await?;
  28. Ok(HttpResponse::Ok().json(json!({"success": true})))
  29. }