1 # -*- coding: iso-8859-1 -*- 2 """ 3 sendfiles - Send files using MoinMessage 4 5 @copyright: 2013, 2014 by Paul Boddie <paul@boddie.org.uk> 6 @license: GNU GPL (v2 or later), see COPYING.txt for details. 7 """ 8 9 from MoinMessage import Message, GPG, sendMessage, timestamp 10 from email.mime.application import MIMEApplication 11 from email.mime.base import MIMEBase 12 from mimetypes import guess_type 13 from os.path import split 14 import sys 15 16 def readfile(filename): 17 f = open(filename, "rb") 18 try: 19 mimetype, encoding = guess_type(filename) 20 if mimetype: 21 main, sub = mimetype.split("/") 22 part = MIMEBase(main, sub) 23 part.set_payload(f.read()) 24 return part 25 else: 26 return MIMEApplication(f.read()) 27 finally: 28 f.close() 29 30 if __name__ == "__main__": 31 try: 32 recipient = sys.argv[1] 33 signer = sys.argv[2] 34 url = sys.argv[3] 35 args = sys.argv[4:] 36 except IndexError: 37 args = None 38 39 if not args: 40 print >>sys.stderr, """\ 41 Need a recipient key identifier, signing key identifier, the destination URL, 42 and some filenames for transfer as arguments to this program. 43 """ 44 sys.exit(1) 45 46 # Bundle files into a message. 47 48 message = Message() 49 50 for arg in args: 51 part = readfile(arg) 52 part["Content-Disposition"] = split(arg)[-1] 53 part["Update-Action"] = "store" 54 message.add_update(part) 55 56 # Get the e-mail message itself. 57 58 email_message = message.get_payload() 59 60 # Sign (for authorship), encrypt (for privacy), sign (for authentication), 61 # and send the message. 62 63 gpg = GPG() 64 signed_message = gpg.signMessage(email_message, signer) 65 encrypted_message = gpg.encryptMessage(signed_message, recipient) 66 67 timestamp(encrypted_message) 68 encrypted_message["Update-Action"] = "store" 69 message_to_send = gpg.signMessage(encrypted_message, signer) 70 71 resp = sendMessage(message_to_send, url) 72 73 print resp 74 75 # vim: tabstop=4 expandtab shiftwidth=4