| 123456789101112131415161718192021222324252627 |
- from datetime import datetime, timedelta
- from jose import jwt
- from passlib.context import CryptContext
- from .config import settings
- pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
- def verify_password(plain_password: str, hashed_password: str) -> bool:
- return pwd_context.verify(plain_password, hashed_password)
- def hash_password(password: str) -> str:
- return pwd_context.hash(password)
- def create_access_token(subject: str, token_version: int, expires_minutes: int | None = None) -> str:
- expire = datetime.utcnow() + timedelta(minutes=expires_minutes or settings.jwt_access_minutes)
- to_encode = {"sub": subject, "exp": expire, "type": "access", "ver": token_version}
- return jwt.encode(to_encode, settings.jwt_secret, algorithm=settings.jwt_algorithm)
- def create_refresh_token(subject: str, token_version: int, expires_days: int | None = None) -> str:
- expire = datetime.utcnow() + timedelta(days=expires_days or settings.jwt_refresh_days)
- to_encode = {"sub": subject, "exp": expire, "type": "refresh", "ver": token_version}
- return jwt.encode(to_encode, settings.jwt_secret, algorithm=settings.jwt_algorithm)
|