Compare commits
6 Commits
1.5.6
...
feature/oa
Author | SHA1 | Date | |
---|---|---|---|
221bd1e244 | |||
4669774cc3 | |||
a094b56d44 | |||
3e514acb19 | |||
a34ba04f78 | |||
8f3f2d0f98 |
@@ -12,11 +12,20 @@ from ..dependencies import database, cookie
|
|||||||
|
|
||||||
SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
|
SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
|
||||||
ALGORITHM = "HS256"
|
ALGORITHM = "HS256"
|
||||||
|
ACCESS_TOKEN_EXPIRE_MINUTES = 30
|
||||||
|
|
||||||
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
||||||
|
|
||||||
oauth2_scheme = cookie.OAuth2PasswordBearerWithCookie(tokenUrl="token")
|
oauth2_scheme = cookie.OAuth2PasswordBearerWithCookie(tokenUrl="token")
|
||||||
|
|
||||||
|
def create_access_token(data: dict, expires_delta: timedelta | None = None):
|
||||||
|
to_encode = data.copy()
|
||||||
|
expire = datetime.utcnow() + (expires_delta or timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))
|
||||||
|
to_encode.update({"exp": expire})
|
||||||
|
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
|
||||||
|
return encoded_jwt
|
||||||
|
|
||||||
|
|
||||||
def verify_password(plain_password, hashed_password):
|
def verify_password(plain_password, hashed_password):
|
||||||
return pwd_context.verify(plain_password, hashed_password)
|
return pwd_context.verify(plain_password, hashed_password)
|
||||||
|
|
||||||
|
@@ -95,12 +95,25 @@ async def reset_password(request: Request, key: str | None = None, email: str |
|
|||||||
|
|
||||||
@router.post("/password/update", tags=["password"])
|
@router.post("/password/update", tags=["password"])
|
||||||
async def update_password(request: Request, email: str = Form(...), key: str = Form(...), new_password: str = Form(...)): # Vérification du token dans Redis
|
async def update_password(request: Request, email: str = Form(...), key: str = Form(...), new_password: str = Form(...)): # Vérification du token dans Redis
|
||||||
|
# Récupérer la clé hachée depuis Redis
|
||||||
key_hashed = database.connect_redis.get(email)
|
key_hashed = database.connect_redis.get(email)
|
||||||
|
|
||||||
if key_hashed is None or key_hashed.decode() != key:
|
if key_hashed is None:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_400_BAD_REQUEST,
|
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"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Recherche de l'utilisateur dans la base de données
|
# Recherche de l'utilisateur dans la base de données
|
||||||
|
Reference in New Issue
Block a user