Hello, On Mon 25 Nov 2019 at 04:45PM -05, Daniel Kahn Gillmor wrote:
> Signed-off-by: Daniel Kahn Gillmor <d...@fifthhorseman.net> > --- > email-print-mime-structure | 31 +++++++++++++++++++------------ > 1 file changed, 19 insertions(+), 12 deletions(-) > > diff --git a/email-print-mime-structure b/email-print-mime-structure > index 6c68eb3..d152b34 100755 > --- a/email-print-mime-structure > +++ b/email-print-mime-structure > @@ -32,6 +32,7 @@ something like "cat -n" > ''' > import os > import sys > +import enum > import email > import logging > import subprocess > @@ -51,6 +52,8 @@ try: > except ImportError: > argcomplete = None > > +EncType = enum.Enum('EncType', ['PGPMIME', 'SMIME']) > + > class MimePrinter(object): > def __init__(self, args:Namespace): > self.args = args > @@ -79,7 +82,6 @@ class MimePrinter(object): > > print(f'{prefix}{z.get_content_type()}{cset}{disposition}{fname} > {nbytes:d} bytes') > cryptopayload:Optional[Message] = None > - ciphertext:Union[List[Message],str,bytes,None] = None > try_pgp_decrypt:bool = self.args.pgpkey or self.args.use_gpg_agent > > if try_pgp_decrypt and \ > @@ -87,23 +89,28 @@ class MimePrinter(object): > (parent.get_content_type().lower() == 'multipart/encrypted') and \ > (str(parent.get_param('protocol')).lower() == > 'application/pgp-encrypted') and \ > (num == 2): > - ciphertext = z.get_payload(decode=True) > - if not isinstance(ciphertext, bytes): > - logging.warning('encrypted part was not a leaf mime part > somehow') > - return > - if self.args.pgpkey: > - cryptopayload = self.pgpy_decrypt(self.args.pgpkey, > ciphertext) > - if cryptopayload is None and self.args.use_gpg_agent: > - cryptopayload = self.pipe_decrypt(ciphertext, ['gpg', > '--batch', '--decrypt']) > - if cryptopayload is None: > - logging.warning(f'Unable to decrypt') > - return > + cryptopayload = self.decrypt_part(z, EncType.PGPMIME) > > if cryptopayload is not None: > newprefix = prefix[:-3] + ' ' > print(f'{newprefix}↧ (decrypts to)') > self.print_tree(cryptopayload, newprefix + '└', z, 0) > > + def decrypt_part(self, msg:Message, flavor:EncType) -> Optional[Message]: > + ciphertext:Union[List[Message],str,bytes,None] = > msg.get_payload(decode=True) > + cryptopayload:Optional[Message] = None > + if not isinstance(ciphertext, bytes): > + logging.warning('encrypted part was not a leaf mime part > somehow') > + return None > + if flavor == EncType.PGPMIME: > + if self.args.pgpkey: > + cryptopayload = self.pgpy_decrypt(self.args.pgpkey, > ciphertext) > + if cryptopayload is None and self.args.use_gpg_agent: > + cryptopayload = self.pipe_decrypt(ciphertext, ['gpg', > '--batch', '--decrypt']) > + if cryptopayload is None: > + logging.warning(f'Unable to decrypt') > + return cryptopayload > + > def pgpy_decrypt(self, keys:List[str], ciphertext:bytes) -> > Optional[Message]: > if pgpy is None: > logging.warning(f'Python module pgpy is not available, not > decrypting (try "apt install python3-pgpy")') This seems fine -- no functional change, right? -- Sean Whitton
signature.asc
Description: PGP signature