This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import datetime
|
||||
import logging
|
||||
from typing import Any, Dict, Optional
|
||||
from typing import Any, Dict
|
||||
|
||||
import jwt
|
||||
|
||||
@@ -15,9 +15,9 @@ class JWTCodec:
|
||||
@staticmethod
|
||||
def encode(
|
||||
payload: Dict[str, Any],
|
||||
secret_key: Optional[str] = None,
|
||||
algorithm: Optional[str] = None,
|
||||
expiration: Optional[datetime.datetime] = None,
|
||||
secret_key: str | None = None,
|
||||
algorithm: str | None = None,
|
||||
expiration: datetime.datetime | None = None,
|
||||
) -> str | bytes:
|
||||
"""
|
||||
Кодирует payload в JWT токен.
|
||||
@@ -40,14 +40,14 @@ class JWTCodec:
|
||||
|
||||
# Если время истечения не указано, устанавливаем дефолтное
|
||||
if not expiration:
|
||||
expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
|
||||
expiration = datetime.datetime.now(datetime.UTC) + datetime.timedelta(
|
||||
days=JWT_REFRESH_TOKEN_EXPIRE_DAYS
|
||||
)
|
||||
logger.debug(f"[JWTCodec.encode] Время истечения не указано, устанавливаем срок: {expiration}")
|
||||
|
||||
# Формируем payload с временными метками
|
||||
payload.update(
|
||||
{"exp": int(expiration.timestamp()), "iat": datetime.datetime.now(datetime.timezone.utc), "iss": JWT_ISSUER}
|
||||
{"exp": int(expiration.timestamp()), "iat": datetime.datetime.now(datetime.UTC), "iss": JWT_ISSUER}
|
||||
)
|
||||
|
||||
logger.debug(f"[JWTCodec.encode] Сформирован payload: {payload}")
|
||||
@@ -55,8 +55,7 @@ class JWTCodec:
|
||||
try:
|
||||
# Используем PyJWT для кодирования
|
||||
encoded = jwt.encode(payload, secret_key, algorithm=algorithm)
|
||||
token_str = encoded.decode("utf-8") if isinstance(encoded, bytes) else encoded
|
||||
return token_str
|
||||
return encoded.decode("utf-8") if isinstance(encoded, bytes) else encoded
|
||||
except Exception as e:
|
||||
logger.warning(f"[JWTCodec.encode] Ошибка при кодировании JWT: {e}")
|
||||
raise
|
||||
@@ -64,8 +63,8 @@ class JWTCodec:
|
||||
@staticmethod
|
||||
def decode(
|
||||
token: str,
|
||||
secret_key: Optional[str] = None,
|
||||
algorithms: Optional[list] = None,
|
||||
secret_key: str | None = None,
|
||||
algorithms: list | None = None,
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Декодирует JWT токен.
|
||||
@@ -87,8 +86,7 @@ class JWTCodec:
|
||||
|
||||
try:
|
||||
# Используем PyJWT для декодирования
|
||||
decoded = jwt.decode(token, secret_key, algorithms=algorithms)
|
||||
return decoded
|
||||
return jwt.decode(token, secret_key, algorithms=algorithms)
|
||||
except jwt.ExpiredSignatureError:
|
||||
logger.warning("[JWTCodec.decode] Токен просрочен")
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user