#!/usr/bin/env python3
# Copyright Anton Semjonov, Licensed under GPL-3.0

from argparse import ArgumentParser, FileType
from tinyssh_keyconvert import opensshkey, readwritekey

# attempt to read version
try:
    from tinyssh_keyconvert.__version__ import __version__
except ImportError:
    __version__ = "development"

parser = ArgumentParser(
    description="Convert OpenSSH ed5519/ecdsa-nistp256 secretkeys to binary format for TinySSH.",
    epilog="%(prog)s Version " + str(__version__),
)

# be verbose
parser.add_argument("-v", "--verbose", help="be verbose", action="store_true")

# input file: an OpenSSH key
group_input = parser.add_argument_group("input")
group_input.add_argument("key", type=FileType("r"), help="openssh secret key")

# outputs group: what to do with the key
group_output = parser.add_argument_group("output")
group_output.add_argument("-j", "--json", help="output a json representation to stdout", action="store_true")
group_output.add_argument(
    "-d", "--dir", help="directory to write tinyssh key files to", default=readwritekey.TINYSSH_KEYDIR
)
group_output.add_argument("-f", "--force", help="overwrite existing files", action="store_true")
group_output.add_argument("-n", "--dry-run", help="do not write keys, only parse", action="store_true")

# parse commandline
args = parser.parse_args()

# disable traceback if not verbose
if not args.verbose:
    import sys

    sys.tracebacklimit = 0

# read key
keybuf = readwritekey.read_openssh_v1_key(args.key)

# parse key
key = opensshkey.OpenSSHKey(keybuf)
if args.verbose:
    print("Successfully read %s key (%s)." % (key.type, key.comment))

# print key
if args.json:
    print(key.json(indent=2))

# write key
if not args.dry_run:
    readwritekey.write_tinyssh_keys(key, args.force, args.dir)
    if args.verbose:
        print("Wrote tinyssh keys to %s." % args.dir)
