- Updated the .env.example file to reflect a development environment setup with enhanced secret key requirements and local host settings. - Modified the Docker Compose configuration to enhance security with read-only settings and no-new-privileges options. - Updated requirements.txt to pin package versions for better dependency management. - Enhanced the FastAPI application to include dynamic OpenAPI and documentation URLs based on the environment. - Implemented session versioning in JWT tokens to improve security and user session management. - Added new validation for user roles and password strength in schemas. - Improved email sending logic to handle recipient lists more robustly and added logging for SMTP operations. - Updated dashboard and profile templates to reflect new features and improve user experience.
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from datetime import datetime, timedelta, timezone
|
|
from typing import Any
|
|
|
|
import bcrypt
|
|
from jose import jwt
|
|
|
|
from app.core.config import settings
|
|
|
|
|
|
def hash_password(password: str) -> str:
|
|
return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")
|
|
|
|
|
|
def verify_password(plain_password: str, hashed_password: str) -> bool:
|
|
return bcrypt.checkpw(plain_password.encode("utf-8"), hashed_password.encode("utf-8"))
|
|
|
|
|
|
def create_access_token(subject: Any, session_version: int = 0) -> str:
|
|
expires_delta = timedelta(minutes=settings.access_token_expire_minutes)
|
|
expire = datetime.now(timezone.utc) + expires_delta
|
|
to_encode = {
|
|
"exp": expire,
|
|
"sub": str(subject),
|
|
"sv": session_version,
|
|
"iss": settings.jwt_issuer,
|
|
"aud": settings.jwt_audience,
|
|
}
|
|
return jwt.encode(to_encode, settings.secret_key, algorithm=settings.algorithm)
|
|
|
|
|
|
def decode_access_token(token: str) -> dict[str, Any]:
|
|
return jwt.decode(
|
|
token,
|
|
settings.secret_key,
|
|
algorithms=[settings.algorithm],
|
|
issuer=settings.jwt_issuer,
|
|
audience=settings.jwt_audience,
|
|
)
|