idac: improve controller handling

This commit is contained in:
Dniel97
2026-04-05 18:55:12 +02:00
parent 3ac8762868
commit 46c8eb539d
3 changed files with 32 additions and 32 deletions
@@ -90,7 +90,7 @@ class IDACSeason2LoginController:
lock_result=lock_result,
lock_date=datetime.now(),
# TODO?
daily_play=0,
daily_play=1,
session=f"{user_id}",
shared_security_key="a",
session_procseq=1,
+27 -31
View File
@@ -11,13 +11,17 @@ from typing import Dict, List, Tuple
from logging.handlers import TimedRotatingFileHandler
from starlette.routing import Route
from starlette.requests import Request
from starlette.responses import JSONResponse
from starlette.responses import JSONResponse, Response
from core.config import CoreConfig
from core.title import BaseServlet, JSONResponseNoASCII
from core.utils import Utils
from titles.idac.base import IDACBase
from titles.idac.model.common_model import ResponseGeneric
from titles.idac.model.common_model import (
ResponseError,
ResponseGeneric,
StatusCodeEnum,
)
from titles.idac.season2 import IDACSeason2
from titles.idac.season3 import IDACSeason3
from titles.idac.config import IDACConfig
@@ -115,7 +119,7 @@ class IDACServlet(BaseServlet):
f"http://sega-initiald.net/{game_ver}/",
)
async def render_POST(self, request: Request) -> bytes:
async def render_POST(self, request: Request) -> Response:
req_raw = await request.body()
internal_ver = 0
version: int = request.path_params.get("version")
@@ -135,48 +139,40 @@ class IDACServlet(BaseServlet):
req_data = json.loads(req_raw)
self.logger.info(f"v{version} {endpoint} request from {client_ip}")
self.logger.info(f"Season {internal_ver + 1} v{version} {endpoint} request from {client_ip}")
self.logger.debug(f"Headers: {header_application}")
self.logger.debug(req_data)
func_to_find = "handle_"
func_to_find += f"{category.lower()}_" if not category == "" else ""
func_to_find += f"{endpoint.lower()}_request"
func_to_find = "handle_" + inflection.underscore(endpoint) + "_request"
# if not hasattr(self.versions[internal_ver], func_to_find):
# self.logger.warning(f"Unhandled v{version} request {func_to_find}")
# return JSONResponse('{"status_code": "0"}')
if category not in self.versions[internal_ver].controllers or not hasattr(
self.versions[internal_ver].controllers[category], func_to_find
):
self.logger.warning(f"Unhandled v{version} request {func_to_find}")
return JSONResponse(
ResponseError(StatusCodeEnum.SYSTEM_ERROR).model_dump(),
500,
)
resp = None
try:
if internal_ver == IDACConstants.VER_IDAC_SEASON_2:
func_to_find = "handle_" + inflection.underscore(endpoint) + "_request"
controller: IDACSeason2 = self.versions[internal_ver].controllers[
category
]
handler = getattr(controller, func_to_find)
resp = await handler(req_data, header_application)
elif internal_ver == IDACConstants.VER_IDAC_SEASON_3:
func_to_find = "handle_" + inflection.underscore(endpoint) + "_request"
controller: IDACSeason3 = self.versions[internal_ver].controllers[
category
]
handler = getattr(controller, func_to_find)
resp = await handler(req_data, header_application)
else:
handler = getattr(self.versions[internal_ver], func_to_find)
resp = await handler(req_data, header_application)
func_to_find = "handle_" + inflection.underscore(endpoint) + "_request"
controller = self.versions[internal_ver].controllers[category]
handler = getattr(controller, func_to_find)
resp = await handler(req_data, header_application)
except Exception as e:
traceback.print_exc()
self.logger.error(f"Error handling v{version} method {endpoint} - {e}")
return JSONResponse('{"status_code": "0"}')
return JSONResponse(
ResponseError(StatusCodeEnum.SYSTEM_ERROR).model_dump(),
500,
)
if resp is None:
resp = {"status_code": "0"}
resp = ResponseGeneric()
if isinstance(resp, ResponseGeneric):
resp = resp.model_dump_json_safe(exclude_none=True)
resp = resp.model_dump_json_safe(exclude_none=True)
self.logger.debug(f"Response {resp}")
return JSONResponseNoASCII(resp)
+4
View File
@@ -431,3 +431,7 @@ class RequestGeneric(DtoModel):
class ResponseGeneric(DtoModel):
status_code: StatusCodeEnum = StatusCodeEnum.OK
class ResponseError(ResponseGeneric):
detailed_message: str = ""