| 123456789101112131415161718192021222324252627282930313233 |
- from datetime import datetime, timedelta, timezone
- from typing import Optional
- import bcrypt
- from jose import JWTError, jwt
- from .config import get_settings
- settings = get_settings()
- def verify_password(plain: str, hashed: str) -> bool:
- return bcrypt.checkpw(plain.encode(), hashed.encode())
- def hash_password(password: str) -> str:
- return bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
- def create_access_token(data: dict, expires_delta: Optional[timedelta] = None) -> str:
- to_encode = data.copy()
- expire = datetime.now(timezone.utc) + (
- expires_delta or timedelta(minutes=settings.jwt_access_token_expire_minutes)
- )
- to_encode["exp"] = expire
- return jwt.encode(to_encode, settings.jwt_secret_key, algorithm=settings.jwt_algorithm)
- def decode_access_token(token: str) -> Optional[dict]:
- try:
- return jwt.decode(token, settings.jwt_secret_key, algorithms=[settings.jwt_algorithm])
- except JWTError:
- return None
|