security.py 991 B

123456789101112131415161718192021222324252627282930313233
  1. from datetime import datetime, timedelta, timezone
  2. from typing import Optional
  3. import bcrypt
  4. from jose import JWTError, jwt
  5. from .config import get_settings
  6. settings = get_settings()
  7. def verify_password(plain: str, hashed: str) -> bool:
  8. return bcrypt.checkpw(plain.encode(), hashed.encode())
  9. def hash_password(password: str) -> str:
  10. return bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
  11. def create_access_token(data: dict, expires_delta: Optional[timedelta] = None) -> str:
  12. to_encode = data.copy()
  13. expire = datetime.now(timezone.utc) + (
  14. expires_delta or timedelta(minutes=settings.jwt_access_token_expire_minutes)
  15. )
  16. to_encode["exp"] = expire
  17. return jwt.encode(to_encode, settings.jwt_secret_key, algorithm=settings.jwt_algorithm)
  18. def decode_access_token(token: str) -> Optional[dict]:
  19. try:
  20. return jwt.decode(token, settings.jwt_secret_key, algorithms=[settings.jwt_algorithm])
  21. except JWTError:
  22. return None