forked from Hay1tsme/artemis
add sega auth key encode/decode in Utils, requires pyjwt
This commit is contained in:
parent
2efdf79b87
commit
6774716e06
@ -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
|
||||||
|
|
@ -1,20 +1,21 @@
|
|||||||
mypy
|
mypy
|
||||||
wheel
|
wheel
|
||||||
twisted
|
twisted
|
||||||
pytz
|
pytz
|
||||||
pyyaml
|
pyyaml
|
||||||
sqlalchemy==1.4.46
|
sqlalchemy==1.4.46
|
||||||
mysqlclient
|
mysqlclient
|
||||||
pyopenssl
|
pyopenssl
|
||||||
service_identity
|
service_identity
|
||||||
PyCryptodome
|
PyCryptodome
|
||||||
inflection
|
inflection
|
||||||
coloredlogs
|
coloredlogs
|
||||||
pylibmc; platform_system != "Windows"
|
pylibmc; platform_system != "Windows"
|
||||||
wacky
|
wacky
|
||||||
Routes
|
Routes
|
||||||
bcrypt
|
bcrypt
|
||||||
jinja2
|
jinja2
|
||||||
protobuf
|
protobuf
|
||||||
autobahn
|
autobahn
|
||||||
pillow
|
pillow
|
||||||
|
pyjwt
|
||||||
|
Loading…
Reference in New Issue
Block a user