Compare commits

..

No commits in common. "b26dcc8777b588b08493ea90bb81eff65a3661a6" and "2bac1f4d397d38ee52d7bff4f87eb109b7c272b0" have entirely different histories.

View File

@ -4,7 +4,7 @@ from ..dependencies import users_token, database, mail
from ..models import users, email from ..models import users, email
from fastapi.responses import JSONResponse, HTMLResponse from fastapi.responses import JSONResponse, HTMLResponse
from fastapi_mail import MessageSchema, MessageType, FastMail from fastapi_mail import MessageSchema, MessageType, FastMail
import random, os, bcrypt import random, os
router = APIRouter() router = APIRouter()
@ -68,28 +68,15 @@ async def reset_password(request: Request, key: str | None = None, email: str |
detail="Parameters 'key' and 'email' are required" detail="Parameters 'key' and 'email' are required"
) )
# Récupérer la clé hachée depuis Redis # Vérifier que la clé correspond à celle stockée dans Redis
key_hashed = database.connect_redis.get(email) key_hashed = database.connect_redis.get(email)
if key_hashed is None: if key_hashed is None or key_hashed != key:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, status_code=status.HTTP_400_BAD_REQUEST,
detail="Invalid or expired reset key" detail="Key is invalid or expired"
) )
# 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 # Afficher la page HTML de réinitialisation du mot de passe
return templates.TemplateResponse("reset_password.html", {"request": request, "email": email, "key": key}) return templates.TemplateResponse("reset_password.html", {"request": request, "email": email, "key": key})