"""Утилиты безопасности: JWT и хеширование токенов.""" import hashlib import secrets from datetime import datetime, timedelta, timezone from jose import jwt from app.core.config import settings def create_access_token(user_id: int, session_id: str) -> str: """Создать access-токен (JWT).""" now = datetime.now(timezone.utc) payload = { "sub": str(user_id), "sid": session_id, "type": "access", "iat": int(now.timestamp()), "exp": int((now + timedelta(days=settings.access_token_ttl_days)).timestamp()), } return jwt.encode(payload, settings.jwt_secret, algorithm=settings.jwt_algorithm) def decode_access_token(token: str) -> dict: """Декодировать и проверить access-токен.""" return jwt.decode(token, settings.jwt_secret, algorithms=[settings.jwt_algorithm]) def generate_opaque_token() -> str: """Сгенерировать случайный opaque-токен (refresh, одноразовая ссылка).""" return secrets.token_urlsafe(48) def hash_token(token: str) -> str: """SHA-256 хеш токена (для хранения в БД).""" return hashlib.sha256(token.encode()).hexdigest()