#!/usr/bin/python3
# -*- coding: UTF-8 -*-
# © 2026, Turnium Technology Group Inc.

"""
SSH authorized keys provider for laywire nodes.

Reads the laywire configuration protobuf and outputs SSH public keys
for use with sshd AuthorizedKeysCommand.
"""

import logging
import sys

from systemd.journal import JournalHandler as LogHandler

from google.protobuf.message import DecodeError
from laywire.schema.v1 import config_pb2

logger = logging.getLogger('laywire-authorized-keys')
if sys.stdout.isatty():
    logger.addHandler(logging.StreamHandler())
logger.addHandler(LogHandler())
logger.setLevel(logging.INFO)

CONFIG_PATH = "/var/lib/laywire/config/current"


def main():
    try:
        get_keys()
    except FileNotFoundError:
        logger.exception("Configuration file not found: %s", CONFIG_PATH)
        sys.exit(1)
    except OSError:
        logger.exception("Failed to read configuration file: %s", CONFIG_PATH)
        sys.exit(1)
    except DecodeError:
        logger.exception("Failed to parse configuration file: %s", CONFIG_PATH)
        sys.exit(1)
    except Exception:
        logger.exception("Unexpected error reading SSH keys")
        sys.exit(1)


def get_keys():
    config = config_pb2.Config()
    with open(CONFIG_PATH, "rb") as f:
        config.ParseFromString(f.read())
    for key in config.authentication.ssh_keys:
        print(key)


if __name__ == "__main__":
    main()
