mirror of
https://gitea.tendokyu.moe/Dniel97/artemis.git
synced 2026-10-02 15:07:56 +03:00
idac: improve controller handling
This commit is contained in:
@@ -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
@@ -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)
|
||||
|
||||
@@ -431,3 +431,7 @@ class RequestGeneric(DtoModel):
|
||||
|
||||
class ResponseGeneric(DtoModel):
|
||||
status_code: StatusCodeEnum = StatusCodeEnum.OK
|
||||
|
||||
|
||||
class ResponseError(ResponseGeneric):
|
||||
detailed_message: str = ""
|
||||
|
||||
Reference in New Issue
Block a user