security.py 1.1 KB

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