from fastapi import APIRouter, Request, Response from tinydb import Query, where from core_common import core_process_request, core_prepare_response, E from core_database import get_db router = APIRouter(prefix="/core", tags=["cardmng"]) def get_target_table(game_id): target_table = { "LDJ": "iidx_profile", "MDX": "ddr_profile", "KFC": "sdvx_profile", "JDZ": "iidx_profile", "KDZ": "iidx_profile", } return target_table[game_id] def get_profile(game_id, cid): target_table = get_target_table(game_id) profile = get_db().table(target_table).get(where('card') == cid) if profile is None: profile = { 'card': cid, 'version': {}, } return profile def get_game_profile(game_id, game_version, cid): profile = get_profile(game_id, cid) if str(game_version) not in profile['version']: profile['version'][str(game_version)] = {} return profile['version'][str(game_version)] def create_profile(game_id, game_version, cid, pin): target_table = get_target_table(game_id) profile = get_profile(game_id, cid) profile['pin'] = pin get_db().table(target_table).upsert(profile, where('card') == cid) @router.post('/{gameinfo}/cardmng/authpass') async def cardmng_authpass(request: Request): request_info = await core_process_request(request) cid = request_info['root'][0].attrib['refid'] passwd = request_info['root'][0].attrib['pass'] profile = get_profile(request_info['model'], cid) if profile is None or passwd != profile.get('pin', None): status = 116 else: status = 0 response = E.response( E.authpass(status=status) ) response_body, response_headers = await core_prepare_response(request, response) return Response(content=response_body, headers=response_headers) @router.post('/{gameinfo}/cardmng/bindmodel') async def cardmng_bindmodel(request: Request): request_info = await core_process_request(request) response = E.response( E.bindmodel( dataid=1, ) ) response_body, response_headers = await core_prepare_response(request, response) return Response(content=response_body, headers=response_headers) @router.post('/{gameinfo}/cardmng/getrefid') async def cardmng_getrefid(request: Request): request_info = await core_process_request(request) cid = request_info['root'][0].attrib['cardid'] passwd = request_info['root'][0].attrib['passwd'] create_profile(request_info['model'], request_info['game_version'], cid, passwd) response = E.response( E.getrefid( dataid=cid, refid=cid, ) ) response_body, response_headers = await core_prepare_response(request, response) return Response(content=response_body, headers=response_headers) @router.post('/{gameinfo}/cardmng/inquire') async def cardmng_inquire(request: Request): request_info = await core_process_request(request) cid = request_info['root'][0].attrib['cardid'] profile = get_game_profile(request_info['model'], request_info['game_version'], cid) if profile: binded = 1 newflag = 0 status = 0 else: binded = 0 newflag = 1 status = 112 response = E.response( E.inquire( dataid=cid, ecflag=1, expired=0, binded=binded, newflag=newflag, refid=cid, status=status, ) ) response_body, response_headers = await core_prepare_response(request, response) return Response(content=response_body, headers=response_headers)