Files
core/auth/tokens/storage.py

115 lines
4.3 KiB
Python
Raw Normal View History

2025-06-02 21:50:58 +03:00
"""
Простой интерфейс для системы токенов
"""
2025-08-17 16:33:54 +03:00
from typing import Any
2025-06-02 21:50:58 +03:00
from .batch import BatchTokenOperations
from .monitoring import TokenMonitoring
from .oauth import OAuthTokenManager
from .sessions import SessionTokenManager
from .verification import VerificationTokenManager
class _TokenStorageImpl:
"""
Внутренний класс для фасада токенов.
Использует композицию вместо наследования.
"""
def __init__(self) -> None:
self._sessions = SessionTokenManager()
self._verification = VerificationTokenManager()
self._oauth = OAuthTokenManager()
self._batch = BatchTokenOperations()
self._monitoring = TokenMonitoring()
# === МЕТОДЫ ДЛЯ СЕССИЙ ===
async def create_session(
self,
user_id: str,
2025-08-17 16:33:54 +03:00
auth_data: dict | None = None,
username: str | None = None,
device_info: dict | None = None,
2025-06-02 21:50:58 +03:00
) -> str:
"""Создание сессии пользователя"""
return await self._sessions.create_session(user_id, auth_data, username, device_info)
2025-08-17 16:33:54 +03:00
async def verify_session(self, token: str) -> Any | None:
2025-06-02 21:50:58 +03:00
"""Проверка сессии по токену"""
return await self._sessions.verify_session(token)
2025-08-17 16:33:54 +03:00
async def refresh_session(self, user_id: int, old_token: str, device_info: dict | None = None) -> str | None:
2025-06-02 21:50:58 +03:00
"""Обновление сессии пользователя"""
return await self._sessions.refresh_session(user_id, old_token, device_info)
async def revoke_session(self, session_token: str) -> bool:
"""Отзыв сессии"""
return await self._sessions.revoke_session_token(session_token)
async def revoke_user_sessions(self, user_id: str) -> int:
"""Отзыв всех сессий пользователя"""
return await self._sessions.revoke_user_sessions(user_id)
# === ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ ===
async def cleanup_expired_tokens(self) -> int:
"""Очистка истекших токенов"""
return await self._batch.cleanup_expired_tokens()
async def get_token_statistics(self) -> dict:
"""Получение статистики токенов"""
return await self._monitoring.get_token_statistics()
# Глобальный экземпляр фасада
_token_storage = _TokenStorageImpl()
class TokenStorage:
"""
Статический фасад для системы токенов.
Все методы делегируются глобальному экземпляру.
"""
@staticmethod
async def create_session(
user_id: str,
2025-08-17 16:33:54 +03:00
auth_data: dict | None = None,
username: str | None = None,
device_info: dict | None = None,
2025-06-02 21:50:58 +03:00
) -> str:
"""Создание сессии пользователя"""
return await _token_storage.create_session(user_id, auth_data, username, device_info)
@staticmethod
2025-08-17 16:33:54 +03:00
async def verify_session(token: str) -> Any | None:
2025-06-02 21:50:58 +03:00
"""Проверка сессии по токену"""
return await _token_storage.verify_session(token)
@staticmethod
2025-08-17 16:33:54 +03:00
async def refresh_session(user_id: int, old_token: str, device_info: dict | None = None) -> str | None:
2025-06-02 21:50:58 +03:00
"""Обновление сессии пользователя"""
return await _token_storage.refresh_session(user_id, old_token, device_info)
@staticmethod
async def revoke_session(session_token: str) -> bool:
"""Отзыв сессии"""
return await _token_storage.revoke_session(session_token)
@staticmethod
async def revoke_user_sessions(user_id: str) -> int:
"""Отзыв всех сессий пользователя"""
return await _token_storage.revoke_user_sessions(user_id)
@staticmethod
async def cleanup_expired_tokens() -> int:
"""Очистка истекших токенов"""
return await _token_storage.cleanup_expired_tokens()
@staticmethod
async def get_token_statistics() -> dict:
"""Получение статистики токенов"""
return await _token_storage.get_token_statistics()