Coverage for app/core/security.py: 100%
18 statements
« prev ^ index » next coverage.py v7.16.1, created at 2026-10-26 10:48 +0000
« prev ^ index » next coverage.py v7.16.1, created at 2026-10-26 10:48 +0000
1from datetime import UTC, datetime, timedelta
2from typing import Any
4import jwt
5from pwdlib import PasswordHash
6from pwdlib.hashers.argon2 import Argon2Hasher
7from pwdlib.hashers.bcrypt import BcryptHasher
9from app.core.config import settings
11password_hash = PasswordHash(
12 (
13 Argon2Hasher(),
14 BcryptHasher(),
15 )
16)
19ALGORITHM = "HS256"
22def create_access_token(subject: str | Any, expires_delta: timedelta) -> str:
23 expire = datetime.now(UTC) + expires_delta 1afbgcde
24 to_encode = {"exp": expire, "sub": str(subject)} 1afbgcde
25 encoded_jwt = jwt.encode(to_encode, settings.SECRET_KEY, algorithm=ALGORITHM) 1afbgcde
26 return encoded_jwt 1afbgcde
29def verify_password(
30 plain_password: str, hashed_password: str
31) -> tuple[bool, str | None]:
32 return password_hash.verify_and_update(plain_password, hashed_password) 1aflbgcdehimnjopk
35def get_password_hash(password: str) -> str:
36 return password_hash.hash(password) 1aqrstuvwbcxyzdABCeDhEiFGHjIJKLMNk