add sega auth key encode/decode in Utils, requires pyjwt

This commit is contained in:
Hay1tsme 2023-11-27 16:39:50 -05:00
parent 2efdf79b87
commit 6774716e06
2 changed files with 57 additions and 21 deletions

View File

@ -1,9 +1,12 @@
from typing import Dict, Any from typing import Dict, Any, Optional
from types import ModuleType from types import ModuleType
from twisted.web.http import Request from twisted.web.http import Request
import logging import logging
import importlib import importlib
from os import walk from os import walk
import jwt
from base64 import b64decode
from datetime import datetime, timezone
from .config import CoreConfig from .config import CoreConfig
@ -60,3 +63,35 @@ class Utils:
cls.real_title_port_ssl = cfg.title.port_ssl cls.real_title_port_ssl = cfg.title.port_ssl
return cls.real_title_port_ssl return cls.real_title_port_ssl
def create_sega_auth_key(aime_id: int, game: str, ver: float, place_id: str, b64_secret: str, err_logger: str = 'aimedb') -> Optional[str]:
logger = logging.getLogger(err_logger)
try:
return jwt.encode({ "aime_id": aime_id, "game": game, "ver": ver, "place_id": place_id, "exp": int(datetime.now(tz=timezone.utc).timestamp()) + 86400 }, b64decode(b64_secret), algorithm="HS256")
except jwt.InvalidKeyError:
logger.error("Failed to encode Sega Auth Key because the secret is invalid!")
return None
except Exception as e:
logger.error(f"Unknown exception occoured when encoding Sega Auth Key! {e}")
return None
def decode_sega_auth_key(token: str, b64_secret: str, err_logger: str = 'aimedb') -> Optional[Dict]:
logger = logging.getLogger(err_logger)
try:
return jwt.decode(token, "secret", b64decode(b64_secret), algorithms=["HS256"], options={"verify_signature": True})
except jwt.ExpiredSignatureError:
logger.error("Sega Auth Key failed to validate due to an expired signature!")
return None
except jwt.InvalidSignatureError:
logger.error("Sega Auth Key failed to validate due to an invalid signature!")
return None
except jwt.DecodeError as e:
logger.error(f"Sega Auth Key failed to decode! {e}")
return None
except jwt.InvalidTokenError as e:
logger.error(f"Sega Auth Key is invalid! {e}")
return None
except Exception as e:
logger.error(f"Unknown exception occoured when decoding Sega Auth Key! {e}")
return None

View File

@ -18,3 +18,4 @@ jinja2
protobuf protobuf
autobahn autobahn
pillow pillow
pyjwt