# HG changeset patch # User Paul Boddie # Date 1389551987 -3600 # Node ID e66d8246661a43c645c49840aadd8e1e02fad143 # Parent 9da23ddb01404f78b7e3a3f18271432b0968b62d Reorganised the saving of files so that collections of messages are processed with decryption taking place only if possible. diff -r 9da23ddb0140 -r e66d8246661a scripts/getfiles.py --- a/scripts/getfiles.py Sun Jan 12 18:39:15 2014 +0100 +++ b/scripts/getfiles.py Sun Jan 12 19:39:47 2014 +0100 @@ -28,6 +28,45 @@ else: return content +def save_part(gpg, directory, part): + + # The retrieved content may be encrypted. + + try: + part = decrypt(gpg, part) + except MoinMessageError: + print >>sys.stderr, "Part could not be decrypted." + return + + # The original sender may now be verified. + + if is_signed(part): + fingerprint, identity, content = gpg.verifyMessage(part) + print >>sys.stderr, "Content signed by %s." % identity + else: + content = part + + if content.is_multipart(): + files = content.get_payload() + else: + files = [content] + + # Treat each part of the verified, possibly encrypted message as a file. + + for n, file in enumerate(files): + if file.is_multipart(): + save_part(gpg, directory, file) + else: + data = file.get_payload(decode=True) + + realname = file.get("Content-Disposition", str(n)) + filename = join(directory, realname) + + dirpath = join(target_dir, directory) + if not exists(dirpath): + makedirs(dirpath) + writefile(join(target_dir, filename), data) + if __name__ == "__main__": try: service = sys.argv[1] @@ -87,41 +126,13 @@ print part else: print part["Request-Type"] - continue - - # Use the "outer" filename to determine a directory for the retrieved - # file, even though the eventual filename in the directory may be - # different. - - timestamp = strftime("%Y-%m-%d_%H:%M:%S") - directory = part.get("Content-Disposition", timestamp) - - # The retrieved content may be encrypted. - - part = decrypt(gpg, part) - - # The original sender may now be verified. + else: + # Use the "outer" filename to determine a directory for the retrieved + # file, even though the eventual filename in the directory may be + # different. - if is_signed(part): - fingerprint, identity, content = gpg.verifyMessage(part) - print >>sys.stderr, "Content signed by %s." % identity - - if content.is_multipart(): - files = content.get_payload() - else: - files = [content] - - # Treat each part of the verified, possibly encrypted message as a file. - - for file in files: - data = file.get_payload(decode=True) - - realname = file["Content-Disposition"] - filename = join(directory, realname) - - dirpath = join(target_dir, directory) - if not exists(dirpath): - makedirs(dirpath) - writefile(join(target_dir, filename), data) + timestamp = strftime("%Y-%m-%d_%H:%M:%S") + directory = part.get("Content-Disposition", timestamp) + save_part(gpg, directory, part) # vim: tabstop=4 expandtab shiftwidth=4