security.py 832 B

1234567891011121314151617181920212223242526272829
  1. import uuid
  2. from datetime import datetime, timedelta, timezone
  3. import jwt
  4. from app.config import get_settings
  5. settings = get_settings()
  6. def create_access_token(user_id: str, username: str, roles: list[str]) -> str:
  7. expire = datetime.now(timezone.utc) + timedelta(minutes=settings.jwt_access_expire_minutes)
  8. payload = {
  9. "sub": user_id,
  10. "username": username,
  11. "roles": roles,
  12. "exp": expire,
  13. "iat": datetime.now(timezone.utc),
  14. "type": "access",
  15. }
  16. return jwt.encode(payload, settings.jwt_secret_key, algorithm=settings.jwt_algorithm)
  17. def create_refresh_token() -> str:
  18. return f"rt_{uuid.uuid4().hex}{uuid.uuid4().hex[:16]}"
  19. def decode_access_token(token: str) -> dict:
  20. return jwt.decode(token, settings.jwt_secret_key, algorithms=[settings.jwt_algorithm])