Source code for bbarchivist.scripts.gpgrunner
#!/usr/bin/env python3
"""Use GPG to sign all files in a directory."""
import getpass # invisible passwords (cf. sudo)
import os # path operations
import sys # load arguments
from bbarchivist import argutils # arguments
from bbarchivist import gpgutils # main program
from bbarchivist import utilities # bool parsing
__author__ = "Thurask"
__license__ = "WTFPL v2"
__copyright__ = "2015-2018 Thurask"
[docs]def prep_key(key):
"""
Prepare key.
:param key: Key to use. 8-character hexadecimal, with or without 0x.
:type key: str
"""
if key is None:
key = input("PGP KEY (0x12345678): ")
return key
[docs]def prep_pass(key, password):
"""
Prepare password.
:param key: Key to use. 8-character hexadecimal, with or without 0x.
:type key: str
:param password: Passphrase for given key.
:type password: str
"""
if password is None:
password = getpass.getpass(prompt="PGP PASSPHRASE: ")
write = utilities.i2b("SAVE PASSPHRASE (Y/N)?: ")
password2 = password if write else None
gpgutils.gpg_config_writer(key, password2)
return password
[docs]def prep_key_pass():
"""
Prepare key and password.
"""
key, password = gpgutils.gpg_config_loader()
if key is None or password is None:
key = prep_key(key)
password = prep_pass(key, password)
return key, password
[docs]def gpgrunner_main():
"""
Parse arguments from argparse/questionnaire.
Invoke :func:`bbarchivist.gpgutils.gpgrunner` with those arguments.
"""
parser = argutils.default_parser("bb-gpgrunner", "GPG-sign files")
parser.add_argument(
"folder",
help="Working directory, default is local",
nargs="?",
default=None)
parser.add_argument(
"-s",
"--selective",
dest="selective",
help="Filter out files generated by this package",
default=False,
action="store_true")
parser.set_defaults()
args = parser.parse_args(sys.argv[1:])
args.folder = utilities.dirhandler(args.folder, os.getcwd())
workfolder = args.folder
key, password = prep_key_pass()
print(" ")
gpgutils.gpgrunner(workfolder, key, password, args.selective)
if __name__ == "__main__":
gpgrunner_main()