diff --git a/app/routers/password.py b/app/routers/password.py index 7d09dc8..fc94059 100644 --- a/app/routers/password.py +++ b/app/routers/password.py @@ -4,7 +4,7 @@ from ..dependencies import users_token, database, mail from ..models import users, email from fastapi.responses import JSONResponse, HTMLResponse from fastapi_mail import MessageSchema, MessageType, FastMail -import random, os +import random, os, bcrypt router = APIRouter() @@ -68,15 +68,28 @@ async def reset_password(request: Request, key: str | None = None, email: str | detail="Parameters 'key' and 'email' are required" ) - # Vérifier que la clé correspond à celle stockée dans Redis + # Récupérer la clé hachée depuis Redis key_hashed = database.connect_redis.get(email) - print("Key hashed : ${0} \nKey : ${1}".format(key_hashed)) - if key_hashed is None or key_hashed != key: + + if key_hashed is None: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, - detail="Key is invalid or expired" + detail="Invalid or expired reset key" ) + # Redis stocke les valeurs en `bytes`, donc il faut décoder si nécessaire + if isinstance(key_hashed, bytes): + key_hashed = key_hashed.decode() + + + # Vérifier que la clé en clair correspond au hash stocké + if not bcrypt.checkpw(key.encode(), key_hashed.encode()): + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Invalid reset key" + ) + + # Afficher la page HTML de réinitialisation du mot de passe return templates.TemplateResponse("reset_password.html", {"request": request, "email": email, "key": key})