#!/usr/bin/python3

"""
Helper script that uses the configured signer plugin to sign a package, print a
pubkey, etc. It mimics the interface of the OBS `sign` command so it is easy to
remember.
"""

import logging
import argparse
from copr_common.log import setup_script_logger
from copr_backend.helpers import BackendConfigReader
from copr_backend.sign import get_signer


log = logging.getLogger(__name__)
setup_script_logger(log, "/var/log/copr-backend/copr-sign.log")


def get_arg_parser():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument(
        "fullname",
        metavar="OWNER/PROJECT",
        help="copr full name, e.g. @group/project",
    )
    action = parser.add_mutually_exclusive_group(required=True)
    action.add_argument(
        "-p",
        action="store_true",
        dest="pubkey",
        help="print the GPG public key",
    )
    action.add_argument(
        "-r",
        metavar="RPM",
        dest="rpm",
        help="add signature to rpm",
    )
    return parser


def main():
    args = get_arg_parser().parse_args()
    opts = BackendConfigReader().read()

    username, projectname = args.fullname.split("/", 1)
    signer = get_signer(args.fullname, opts, log)

    if args.pubkey:
        pubkey = signer.get_pubkey(username, projectname)
        print(pubkey)
    else:
        email = signer.create_gpg_email(username, projectname)
        signer.sign_one(args.rpm, email, "sha256")


if __name__ == "__main__":
    main()
