diff --git a/webext/app/credential_manager_shim.py b/webext/app/credential_manager_shim.py index ace3ba2..764f573 100755 --- a/webext/app/credential_manager_shim.py +++ b/webext/app/credential_manager_shim.py @@ -7,6 +7,7 @@ from enum import Enum import json import logging +import signal import struct import sys from typing import Optional @@ -395,23 +396,26 @@ async def run(cmd, options, origin, top_origin): raise Exception(f"unknown cmd: {cmd}") -logging.info("starting credential_manager_shim") -while True: - logging.debug("starting event loop message") - receivedMessage = getMessage() - request_id = receivedMessage["requestId"] - try: - cmd = receivedMessage["cmd"] - - options = None - if "options" in receivedMessage: - options = receivedMessage["options"] - origin = receivedMessage["origin"] - top_origin = receivedMessage["topOrigin"] - loop = asyncio.get_event_loop() - auth_data = loop.run_until_complete(run(cmd, options, origin, top_origin)) - sendMessage(encodeMessage({"requestId": request_id, "data": auth_data})) - except Exception as e: - logging.error("Failed to send message", exc_info=e) - sendMessage(encodeMessage({"requestId": request_id, "error": str(e)})) - logging.debug("Sent error message") +quit = asyncio.Event() + +async def main(): + logging.info("starting credential_manager_shim") + while not quit.is_set(): + logging.debug("starting event loop message") + receivedMessage = getMessage() + request_id = receivedMessage["requestId"] + try: + cmd = receivedMessage["cmd"] + options = receivedMessage.get("options", None) + origin = receivedMessage["origin"] + top_origin = receivedMessage["topOrigin"] + auth_data = await run(cmd, options, origin, top_origin) + sendMessage(encodeMessage({"requestId": request_id, "data": auth_data})) + except Exception as e: + logging.error("Failed to send message", exc_info=e) + sendMessage(encodeMessage({"requestId": request_id, "error": str(e)})) + logging.debug("Sent error message") + logging.info("quitting credential_manager_shim") + +signal.signal(signal.SIGTERM, lambda _, __ : quit.set()) +asyncio.run(main())