|
7 | 7 | from enum import Enum |
8 | 8 | import json |
9 | 9 | import logging |
| 10 | +import signal |
10 | 11 | import struct |
11 | 12 | import sys |
12 | 13 | from typing import Optional |
@@ -395,23 +396,26 @@ async def run(cmd, options, origin, top_origin): |
395 | 396 | raise Exception(f"unknown cmd: {cmd}") |
396 | 397 |
|
397 | 398 |
|
398 | | -logging.info("starting credential_manager_shim") |
399 | | -while True: |
400 | | - logging.debug("starting event loop message") |
401 | | - receivedMessage = getMessage() |
402 | | - request_id = receivedMessage["requestId"] |
403 | | - try: |
404 | | - cmd = receivedMessage["cmd"] |
405 | | - |
406 | | - options = None |
407 | | - if "options" in receivedMessage: |
408 | | - options = receivedMessage["options"] |
409 | | - origin = receivedMessage["origin"] |
410 | | - top_origin = receivedMessage["topOrigin"] |
411 | | - loop = asyncio.get_event_loop() |
412 | | - auth_data = loop.run_until_complete(run(cmd, options, origin, top_origin)) |
413 | | - sendMessage(encodeMessage({"requestId": request_id, "data": auth_data})) |
414 | | - except Exception as e: |
415 | | - logging.error("Failed to send message", exc_info=e) |
416 | | - sendMessage(encodeMessage({"requestId": request_id, "error": str(e)})) |
417 | | - logging.debug("Sent error message") |
| 399 | +quit = asyncio.Event() |
| 400 | + |
| 401 | +async def main(): |
| 402 | + logging.info("starting credential_manager_shim") |
| 403 | + while not quit.is_set(): |
| 404 | + logging.debug("starting event loop message") |
| 405 | + receivedMessage = getMessage() |
| 406 | + request_id = receivedMessage["requestId"] |
| 407 | + try: |
| 408 | + cmd = receivedMessage["cmd"] |
| 409 | + options = receivedMessage.get("options", None) |
| 410 | + origin = receivedMessage["origin"] |
| 411 | + top_origin = receivedMessage["topOrigin"] |
| 412 | + auth_data = await run(cmd, options, origin, top_origin) |
| 413 | + sendMessage(encodeMessage({"requestId": request_id, "data": auth_data})) |
| 414 | + except Exception as e: |
| 415 | + logging.error("Failed to send message", exc_info=e) |
| 416 | + sendMessage(encodeMessage({"requestId": request_id, "error": str(e)})) |
| 417 | + logging.debug("Sent error message") |
| 418 | + logging.info("quitting credential_manager_shim") |
| 419 | + |
| 420 | +signal.signal(signal.SIGTERM, lambda _, __ : quit.set()) |
| 421 | +asyncio.run(main()) |
0 commit comments