1 #!/usr/bin/env python 2 3 from MoinMessage import * 4 from email.mime.text import MIMEText 5 from email.parser import Parser 6 import sys 7 8 try: 9 from cStringIO import StringIO 10 except ImportError: 11 from StringIO import StringIO 12 13 def decrypt(message): 14 15 "Decrypt 'message' if necessary." 16 17 if is_encrypted(message): 18 text = gpg.decryptMessage(message) 19 return Parser().parse(StringIO(text)) 20 else: 21 return message 22 23 def verify(message): 24 25 "Verify 'message' if possible." 26 27 if is_signed(message): 28 return gpg.verifyMessage(message) 29 else: 30 return None, None, message 31 32 if __name__ == "__main__": 33 try: 34 signer = sys.argv[1] 35 recipient = sys.argv[2] 36 url = sys.argv[3] + "?action=FetchMessages" 37 args = sys.argv[4:] 38 except IndexError: 39 args = None 40 41 if not args: 42 print >>sys.stderr, "Need a signer, recipient, URL and some commands as arguments to this program." 43 sys.exit(1) 44 45 message = Message() 46 parts = [] 47 48 part = MIMEText("\n".join(args), "plain", sys.stdin.encoding) 49 message.add_update(part) 50 51 email_message = message.get_payload() 52 gpg = GPG() 53 54 try: 55 signed_message = gpg.signMessage(email_message, signer) 56 encrypted_message = gpg.encryptMessage(signed_message, recipient) 57 text = sendMessage(encrypted_message, url, "PUT") 58 mailbox = Parser().parse(StringIO(text)) 59 60 mailbox = decrypt(mailbox) 61 fingerprint, identity, content = verify(mailbox) 62 63 if fingerprint and identity: 64 print >>sys.stderr, "Messages signed by", fingerprint, identity 65 else: 66 print >>sys.stderr, "Message not signed!" 67 68 print >>sys.stderr 69 70 if content.is_multipart(): 71 for part in content.get_payload(): 72 part = decrypt(part) 73 fingerprint, identity, part = verify(part) 74 if fingerprint and identity: 75 print >>sys.stderr, "Part signed by", fingerprint, identity 76 print part 77 else: 78 print content 79 80 except MoinMessageError, exc: 81 print >>sys.stderr, exc 82 83 # vim: tabstop=4 expandtab shiftwidth=4