Module genshin.client.components.auth.server
Aiohttp webserver used for captcha solving.
Functions
async def enter_code(*, prompt: str = 'Enter the verification code: ') ‑> str-
Expand source code
async def enter_code(*, prompt: str = "Enter the verification code: ") -> str: """Get email or phone number verification code from the user via CLI input.""" return await asyncio.to_thread(input, prompt)Get email or phone number verification code from the user via CLI input.
async def launch_webapp(mmt: typing.Union[MMT, MMTv4, SessionMMT, SessionMMTv4, RiskyCheckMMT],
*,
lang: typing.Optional[str] = None,
api_server: typing.Optional[str] = None,
for_new_os_app: typing.Optional[bool] = None,
port: int = 5000) ‑> MMTResult | MMTv4Result | SessionMMTResult | SessionMMTv4Result | RiskyCheckMMTResult-
Expand source code
async def launch_webapp( mmt: typing.Union[MMT, MMTv4, SessionMMT, SessionMMTv4, RiskyCheckMMT], *, lang: typing.Optional[str] = None, api_server: typing.Optional[str] = None, for_new_os_app: typing.Optional[bool] = None, port: int = 5000, ) -> typing.Union[MMTResult, MMTv4Result, SessionMMTResult, SessionMMTv4Result, RiskyCheckMMTResult]: """Create and run a webapp to solve a geetest captcha.""" routes = web.RouteTableDef() future: asyncio.Future[typing.Any] = asyncio.Future() @routes.get("/") async def index(request: web.Request) -> web.StreamResponse: body = CAPTCHA_PAGE body = body.replace("{gt_version}", "4" if isinstance(mmt, MMTv4) else "3") body = body.replace("{api_server}", api_server or "api-na.geetest.com") body = body.replace("{lang}", lang or "en") body = body.replace("{for_new_os_app}", str(for_new_os_app).lower() if for_new_os_app is not None else "false") return web.Response(body=body, content_type="text/html") @routes.get("/gt/{version}.js") async def gt(request: web.Request) -> web.StreamResponse: version = request.match_info.get("version", "v3") gt_url = GT_V4_URL if version == "v4" else GT_V3_URL async with aiohttp.ClientSession() as session: r = await session.get(gt_url) content = await r.read() return web.Response(body=content, content_type="text/javascript") @routes.get("/mmt") async def mmt_endpoint(request: web.Request) -> web.Response: return web.json_response(mmt.model_dump()) @routes.post("/send-data") async def send_data_endpoint(request: web.Request) -> web.Response: data = await request.json() result: typing.Union[MMTResult, MMTv4Result, SessionMMTResult, SessionMMTv4Result, RiskyCheckMMTResult] if isinstance(mmt, RiskyCheckMMT): result = RiskyCheckMMTResult(**data) elif isinstance(mmt, SessionMMT): result = SessionMMTResult(**data) elif isinstance(mmt, SessionMMTv4): result = SessionMMTv4Result(**data) elif isinstance(mmt, MMT): result = MMTResult(**data) else: result = MMTv4Result(**data) future.set_result(result) return web.Response(status=204) app = web.Application() app.add_routes(routes) runner = web.AppRunner(app) await runner.setup() site = web.TCPSite(runner, host="localhost", port=port) print(f"Opening http://localhost:{port} in browser...") # noqa webbrowser.open_new_tab(f"http://localhost:{port}") await site.start() try: data = await future finally: await asyncio.sleep(0.3) await runner.shutdown() await runner.cleanup() return dataCreate and run a webapp to solve a geetest captcha.
async def solve_geetest(mmt: typing.Union[MMT, MMTv4, SessionMMT, SessionMMTv4, RiskyCheckMMT],
*,
lang: types.Lang = 'en-us',
api_server: str = 'api-na.geetest.com',
for_new_os_app: bool = False,
port: int = 5000) ‑> MMTResult | MMTv4Result | SessionMMTResult | SessionMMTv4Result | RiskyCheckMMTResult-
Expand source code
async def solve_geetest( mmt: typing.Union[MMT, MMTv4, SessionMMT, SessionMMTv4, RiskyCheckMMT], *, lang: types.Lang = "en-us", api_server: str = "api-na.geetest.com", for_new_os_app: bool = False, port: int = 5000, ) -> typing.Union[MMTResult, MMTv4Result, SessionMMTResult, SessionMMTv4Result, RiskyCheckMMTResult]: """Start a web server and manually solve geetest captcha.""" geetest_lang = auth_utility.lang_to_geetest_lang(lang) return await launch_webapp( mmt, lang=geetest_lang, api_server=api_server, for_new_os_app=for_new_os_app, port=port, )Start a web server and manually solve geetest captcha.