diff --git a/titles/idac/controller/season2/login_controller.py b/titles/idac/controller/season2/login_controller.py index 644a3ec..b666ade 100644 --- a/titles/idac/controller/season2/login_controller.py +++ b/titles/idac/controller/season2/login_controller.py @@ -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, diff --git a/titles/idac/index.py b/titles/idac/index.py index 3b9c0f1..91dc412 100644 --- a/titles/idac/index.py +++ b/titles/idac/index.py @@ -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) diff --git a/titles/idac/model/common_model.py b/titles/idac/model/common_model.py index 0745546..97e203f 100644 --- a/titles/idac/model/common_model.py +++ b/titles/idac/model/common_model.py @@ -431,3 +431,7 @@ class RequestGeneric(DtoModel): class ResponseGeneric(DtoModel): status_code: StatusCodeEnum = StatusCodeEnum.OK + + +class ResponseError(ResponseGeneric): + detailed_message: str = ""