Verified Commit a90591c5 authored by Jakob Moser's avatar Jakob Moser
Browse files

Don't wait for password if the vault is already open

parent 8a5f2a96
Loading
Loading
Loading
Loading
+27 −10
Original line number Diff line number Diff line
@@ -26,15 +26,22 @@ touch_screen = EvdevTouchScreen(Path("/dev/input/event0"))
director = Director(play, display)


def launch_application(password: str) -> None:
def launch_application(password: str | None) -> None:
    if director.started:
        logging.warning(
            "Application is already launched, don't launch it a second time"
        )
        return

    logging.info("Opening vault, creating CardReader")
    with vault.open(password), Pirc522CardReader() as card_reader, touch_screen:
    open_vault = vault
    if password:
        logging.info("Opening vault")
        open_vault = vault.open(password)
    else:
        logging.info("No password to open vault was given, so assuming it was already open")

    logging.info("Creating CardReader")
    with open_vault, Pirc522CardReader() as card_reader, touch_screen:
        try:
            logging.info("Opening database")
            db.open(paths.db_file)
@@ -55,18 +62,21 @@ def launch_application(password: str) -> None:
            server.stop()


def launch_application_as_daemon(password: str | None) -> None:
    logging.info("Launching main application as daemon thread")
    Thread(
        target=launch_application, args=(password,), daemon=True
    ).start()


logging.info("Creating wire.Server")
server = Server(paths.socket_path)


def on_message_received(message: Message) -> None:
    if message.get("action") == "unlock" and message.get("password"):
        logging.info(
            "Unlock message received via wire, starting thread to launch main application"
        )
        Thread(
            target=launch_application, args=(message["password"],), daemon=True
        ).start()
        logging.info("Unlock message received via wire")
        launch_application_as_daemon(message["password"])


server.on_receive(on_message_received)
@@ -83,5 +93,12 @@ logging.info("Registering SIGINT and SIGTERM handlers")
signal.signal(signal.SIGINT, handle_signal)  # for keyboard interrupt
signal.signal(signal.SIGTERM, handle_signal)  # for systemd interrupt

if vault.is_open:
    # The vault has already been opened, so we don't need to wait for a password to start
    launch_application_as_daemon(None)
    # We will still launch the server, in case I ever get around to implementing more commands
else:
    logging.info("Waiting for vault unlock password via wire server")

# As documented above, we launch the server in any case
server.start()