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), "x-moinmessage-fetch", sys.stdin.encoding) 44 message.add_update(part) 45 46 # Sign and encrypt the request. 47 48 email_message = message.get_payload() 49 gpg = GPG() 50 51 try: 52 signed_message = gpg.signMessage(email_message, signer) 53 encrypted_message = gpg.encryptMessage(signed_message, recipient) 54 resp = sendMessageOpener(encrypted_message, url) 55 mailbox = Parser().parse(resp) 56 57 # Decrypt and verify the response. 58 59 mailbox = decrypt(mailbox) 60 fingerprint, identity, content = verify(mailbox) 61 62 except MoinMessageError, exc: 63 print >>sys.stderr, exc 64 65 # Indicate the signature details of the response. 66 67 if fingerprint and identity: 68 print >>sys.stderr, "Messages signed by", fingerprint, identity 69 else: 70 print >>sys.stderr, "Message not signed!" 71 72 print >>sys.stderr 73 74 # Show the retrieved messages. 75 76 if content.is_multipart(): 77 for part in content.get_payload(): 78 79 try: 80 part = decrypt(part) 81 fingerprint, identity, part = verify(part) 82 83 except MoinMessageError, exc: 84 print >>sys.stderr, "Message not shown." 85 print >>sys.stderr, exc 86 continue 87 88 if fingerprint and identity: 89 print >>sys.stderr, "Part signed by", fingerprint, identity 90 print part 91 else: 92 print content 93 94 # vim: tabstop=4 expandtab shiftwidth=4