diff options
author | Konstantin Ryabitsev <konstantin@linuxfoundation.org> | 2021-05-05 13:24:42 -0400 |
---|---|---|
committer | Konstantin Ryabitsev <konstantin@linuxfoundation.org> | 2021-05-05 13:24:42 -0400 |
commit | 111c56cbe7a6b7a1b425f23681fd39b2296c4a39 (patch) | |
tree | 5e42b467c3fe6139a687e5b60b4ba3bbda59da9b | |
parent | d27e5a8000f3a8bc706e5d4fb1ae724d9dd34d05 (diff) | |
download | patatt-111c56cbe7a6b7a1b425f23681fd39b2296c4a39.tar.gz |
A few more usability/UI tweaks
- support validating an entire mbox file
- fix sendemail hook invocation
Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | patatt/__init__.py | 33 | ||||
-rwxr-xr-x | sendemail-validate-hook | 2 |
3 files changed, 22 insertions, 14 deletions
@@ -7,3 +7,4 @@ __pycache__ *.egg-info build dist +outgoing diff --git a/patatt/__init__.py b/patatt/__init__.py index 39ed6f6..a0cbb7d 100644 --- a/patatt/__init__.py +++ b/patatt/__init__.py @@ -880,11 +880,20 @@ def validate_message(msgdata: bytes, sources: list) -> list: def cmd_validate(cmdargs, config: dict): - try: - messages = _load_messages(cmdargs) - except IOError as ex: - logger.critical('E: %s', ex) - sys.exit(1) + import mailbox + if len(cmdargs.msgfile) == 1: + # Try to open as an mbox file + mbox = mailbox.mbox(cmdargs.msgfile[0]) + messages = dict() + for msg in mbox: + subject = msg.get('Subject', 'No subject') + messages[subject] = msg.as_bytes() + else: + try: + messages = _load_messages(cmdargs) + except IOError as ex: + logger.critical('E: %s', ex) + sys.exit(1) ddir = get_data_dir() pdir = os.path.join(ddir, 'public') @@ -896,21 +905,19 @@ def cmd_validate(cmdargs, config: dict): for fn, msgdata in messages.items(): try: goodsigs = validate_message(msgdata, sources) - logger.critical('PASS: %s', os.path.basename(fn)) for identity, signtime, keysrc, algo in goodsigs: - logger.info(' by : %s (%s)', identity, algo) + logger.critical('PASS | %s | %s', identity, fn) if keysrc: - logger.info(' key: %s', keysrc) + logger.info(' key: %s/%s', algo, keysrc) else: - logger.info(' key: default keyring') + logger.info(' key: default GnuPG keyring') except ValidationError as ex: allgood = False - logger.critical('FAIL: %s', os.path.basename(fn)) - logger.critical(' err: %s', ex) + logger.critical('FAIL | err: %s | %s', ex, fn) except RuntimeError as ex: allgood = False - logger.critical('E: %s: %s' % (fn, ex)) + logger.critical('ERR | err: %s | %s', ex, fn) if not allgood: sys.exit(1) @@ -1012,7 +1019,7 @@ def command() -> None: sp_sign.set_defaults(func=cmd_sign) sp_val = subparsers.add_parser('validate', help='Validate a devsig-signed message') - sp_val.add_argument('msgfile', nargs='*', help='Signed RFC2822 message files to validate') + sp_val.add_argument('msgfile', nargs='*', help='Individual signed message files to validate or an mbox') sp_val.set_defaults(func=cmd_validate) sp_gen = subparsers.add_parser('genkey', help='Generate a new ed25519 keypair') diff --git a/sendemail-validate-hook b/sendemail-validate-hook index 17281a6..3ee80e5 100755 --- a/sendemail-validate-hook +++ b/sendemail-validate-hook @@ -6,6 +6,6 @@ else # Assume we're symlinked into a git checkout REAL_SCRIPT=$(realpath -e ${BASH_SOURCE[0]}) SCRIPT_TOP="${SCRIPT_TOP:-$(dirname ${REAL_SCRIPT})}" - PATATT_TOP=$(realpath -e ${SCRIPT_TOP}/..) + PATATT_TOP=$(realpath -e ${SCRIPT_TOP}) exec env PYTHONPATH="${PATATT_TOP}" python3 "${PATATT_TOP}/patatt/__init__.py" sign --hook "${1}" fi |