This commit is contained in:
@@ -5,7 +5,6 @@
|
||||
import json
|
||||
import secrets
|
||||
import time
|
||||
from typing import Optional
|
||||
|
||||
from services.redis import redis as redis_adapter
|
||||
from utils.logger import root_logger as logger
|
||||
@@ -24,7 +23,7 @@ class VerificationTokenManager(BaseTokenManager):
|
||||
user_id: str,
|
||||
verification_type: str,
|
||||
data: TokenData,
|
||||
ttl: Optional[int] = None,
|
||||
ttl: int | None = None,
|
||||
) -> str:
|
||||
"""Создает токен подтверждения"""
|
||||
token_data = {"verification_type": verification_type, **data}
|
||||
@@ -41,7 +40,7 @@ class VerificationTokenManager(BaseTokenManager):
|
||||
return await self._create_verification_token(user_id, token_data, ttl)
|
||||
|
||||
async def _create_verification_token(
|
||||
self, user_id: str, token_data: TokenData, ttl: int, token: Optional[str] = None
|
||||
self, user_id: str, token_data: TokenData, ttl: int, token: str | None = None
|
||||
) -> str:
|
||||
"""Оптимизированное создание токена подтверждения"""
|
||||
verification_token = token or secrets.token_urlsafe(32)
|
||||
@@ -61,12 +60,12 @@ class VerificationTokenManager(BaseTokenManager):
|
||||
logger.info(f"Создан токен подтверждения {verification_type} для пользователя {user_id}")
|
||||
return verification_token
|
||||
|
||||
async def get_verification_token_data(self, token: str) -> Optional[TokenData]:
|
||||
async def get_verification_token_data(self, token: str) -> TokenData | None:
|
||||
"""Получает данные токена подтверждения"""
|
||||
token_key = self._make_token_key("verification", "", token)
|
||||
return await redis_adapter.get_and_deserialize(token_key)
|
||||
|
||||
async def validate_verification_token(self, token_str: str) -> tuple[bool, Optional[TokenData]]:
|
||||
async def validate_verification_token(self, token_str: str) -> tuple[bool, TokenData | None]:
|
||||
"""Проверяет валидность токена подтверждения"""
|
||||
token_key = self._make_token_key("verification", "", token_str)
|
||||
token_data = await redis_adapter.get_and_deserialize(token_key)
|
||||
@@ -74,7 +73,7 @@ class VerificationTokenManager(BaseTokenManager):
|
||||
return True, token_data
|
||||
return False, None
|
||||
|
||||
async def confirm_verification_token(self, token_str: str) -> Optional[TokenData]:
|
||||
async def confirm_verification_token(self, token_str: str) -> TokenData | None:
|
||||
"""Подтверждает и использует токен подтверждения (одноразовый)"""
|
||||
token_data = await self.get_verification_token_data(token_str)
|
||||
if token_data:
|
||||
@@ -106,7 +105,7 @@ class VerificationTokenManager(BaseTokenManager):
|
||||
await pipe.get(key)
|
||||
results = await pipe.execute()
|
||||
|
||||
for key, data in zip(keys, results):
|
||||
for key, data in zip(keys, results, strict=False):
|
||||
if data:
|
||||
try:
|
||||
token_data = json.loads(data)
|
||||
@@ -141,7 +140,7 @@ class VerificationTokenManager(BaseTokenManager):
|
||||
results = await pipe.execute()
|
||||
|
||||
# Проверяем какие токены нужно удалить
|
||||
for key, data in zip(keys, results):
|
||||
for key, data in zip(keys, results, strict=False):
|
||||
if data:
|
||||
try:
|
||||
token_data = json.loads(data)
|
||||
|
||||
Reference in New Issue
Block a user