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