ssulbox/backend/app/security.py

40 lines
1.1 KiB
Python

# -*- coding: utf-8 -*-
"""JWT 발급·검증 + uuid. castad app/user/services/jwt.py 패턴 축약."""
import uuid
from datetime import datetime, timedelta, timezone
from jose import JWTError, jwt
from .config import settings
def new_uuid() -> str:
return str(uuid.uuid4())
def _now() -> datetime:
return datetime.now(timezone.utc)
def create_access_token(user_uuid: str) -> str:
payload = {
"sub": user_uuid, "type": "access",
"exp": _now() + timedelta(minutes=settings.JWT_ACCESS_TOKEN_EXPIRE_MINUTES),
}
return jwt.encode(payload, settings.JWT_SECRET, algorithm=settings.JWT_ALGORITHM)
def create_refresh_token(user_uuid: str) -> str:
payload = {
"sub": user_uuid, "type": "refresh",
"exp": _now() + timedelta(days=settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS),
}
return jwt.encode(payload, settings.JWT_SECRET, algorithm=settings.JWT_ALGORITHM)
def decode_token(token: str) -> dict | None:
try:
return jwt.decode(token, settings.JWT_SECRET, algorithms=[settings.JWT_ALGORITHM])
except JWTError:
return None