115 lines
4.3 KiB
Python
115 lines
4.3 KiB
Python
"""
|
||
Простой интерфейс для системы токенов
|
||
"""
|
||
|
||
from typing import Any, Optional
|
||
|
||
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,
|
||
auth_data: Optional[dict] = None,
|
||
username: Optional[str] = None,
|
||
device_info: Optional[dict] = None,
|
||
) -> str:
|
||
"""Создание сессии пользователя"""
|
||
return await self._sessions.create_session(user_id, auth_data, username, device_info)
|
||
|
||
async def verify_session(self, token: str) -> Optional[Any]:
|
||
"""Проверка сессии по токену"""
|
||
return await self._sessions.verify_session(token)
|
||
|
||
async def refresh_session(self, user_id: int, old_token: str, device_info: Optional[dict] = None) -> Optional[str]:
|
||
"""Обновление сессии пользователя"""
|
||
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,
|
||
auth_data: Optional[dict] = None,
|
||
username: Optional[str] = None,
|
||
device_info: Optional[dict] = None,
|
||
) -> str:
|
||
"""Создание сессии пользователя"""
|
||
return await _token_storage.create_session(user_id, auth_data, username, device_info)
|
||
|
||
@staticmethod
|
||
async def verify_session(token: str) -> Optional[Any]:
|
||
"""Проверка сессии по токену"""
|
||
return await _token_storage.verify_session(token)
|
||
|
||
@staticmethod
|
||
async def refresh_session(user_id: int, old_token: str, device_info: Optional[dict] = None) -> Optional[str]:
|
||
"""Обновление сессии пользователя"""
|
||
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()
|