55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
import argparse
|
|
import asyncio
|
|
import json
|
|
import logging
|
|
|
|
import browser
|
|
import server
|
|
|
|
|
|
class _FakeRequest:
|
|
def __init__(self, provider: str):
|
|
self.match_info = {"provider": provider}
|
|
self.method = "GET"
|
|
self.path_qs = f"/{provider}/token"
|
|
|
|
|
|
def _enable_headed_browser() -> bool:
|
|
if "--no-startup-window" in browser.CHROME_FLAGS:
|
|
browser.CHROME_FLAGS.remove("--no-startup-window")
|
|
return True
|
|
return False
|
|
|
|
|
|
async def _run(provider: str) -> int:
|
|
patched = _enable_headed_browser()
|
|
logging.info("Headed mode patch applied: %s", patched)
|
|
|
|
request = _FakeRequest(provider)
|
|
response = await server.token_handler(request)
|
|
payload = json.loads(response.body.decode("utf-8"))
|
|
|
|
logging.info("Response status: %s", response.status)
|
|
logging.info("Response body: %s", json.dumps(payload, indent=2))
|
|
return 0 if response.status == 200 else 1
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(
|
|
description=(
|
|
"Run the same token refresh/issue flow as server /{provider}/token "
|
|
"in headed browser mode (non-headless)."
|
|
)
|
|
)
|
|
parser.add_argument("--provider", default="chatgpt")
|
|
args = parser.parse_args()
|
|
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
|
|
)
|
|
return asyncio.run(_run(args.provider))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|