paul@6 | 1 | #!/usr/bin/env python |
paul@6 | 2 | |
paul@6 | 3 | from MoinMessage import * |
paul@6 | 4 | from email.mime.text import MIMEText |
paul@6 | 5 | import sys |
paul@6 | 6 | |
paul@6 | 7 | if __name__ == "__main__": |
paul@16 | 8 | try: |
paul@16 | 9 | signer = sys.argv[1] |
paul@16 | 10 | recipient = sys.argv[2] |
paul@83 | 11 | i = 3 |
paul@83 | 12 | if sys.argv[i] == "--to": |
paul@83 | 13 | to = sys.argv[i+1] |
paul@83 | 14 | i += 2 |
paul@83 | 15 | else: |
paul@83 | 16 | to = None |
paul@83 | 17 | if sys.argv[i] == "--forward": |
paul@83 | 18 | forwarder = sys.argv[i+1] |
paul@83 | 19 | i += 2 |
paul@45 | 20 | else: |
paul@45 | 21 | forwarder = None |
paul@45 | 22 | url = sys.argv[i] + "?action=PostMessage" |
paul@45 | 23 | type = sys.argv[i+1] |
paul@45 | 24 | action = sys.argv[i+2] |
paul@45 | 25 | args = sys.argv[i+3:] |
paul@16 | 26 | except IndexError: |
paul@16 | 27 | args = None |
paul@11 | 28 | |
paul@11 | 29 | if not args: |
paul@16 | 30 | print >>sys.stderr, "Need a signer, recipient, URL, update type, action and some updates as arguments to this program." |
paul@45 | 31 | print >>sys.stderr, "Syntax:" |
paul@45 | 32 | print >>sys.stderr, sys.argv[0], "<signing keyid> <recipient keyid> " \ |
paul@45 | 33 | "[ --forward <signing keyid> ] <URL> " \ |
paul@45 | 34 | "<update type> <action> <update>..." |
paul@11 | 35 | sys.exit(1) |
paul@6 | 36 | |
paul@6 | 37 | message = Message() |
paul@16 | 38 | parts = [] |
paul@11 | 39 | |
paul@11 | 40 | for arg in args: |
paul@16 | 41 | part = MIMEText(arg, "moin", sys.stdin.encoding) |
paul@16 | 42 | if type == "collection": |
paul@16 | 43 | part["Update-Action"] = action |
paul@16 | 44 | message.add_update(part) |
paul@16 | 45 | else: |
paul@16 | 46 | parts.append(part) |
paul@16 | 47 | |
paul@16 | 48 | if type != "collection": |
paul@16 | 49 | multipart = message.get_update(parts) |
paul@16 | 50 | multipart["Update-Action"] = action |
paul@16 | 51 | message.add_update(multipart) |
paul@11 | 52 | |
paul@6 | 53 | email_message = message.get_payload() |
paul@8 | 54 | gpg = GPG() |
paul@6 | 55 | |
paul@6 | 56 | try: |
paul@8 | 57 | signed_message = gpg.signMessage(email_message, signer) |
paul@45 | 58 | message_to_send = gpg.encryptMessage(signed_message, recipient) |
paul@45 | 59 | |
paul@45 | 60 | # Forwarded messages should be timestamped and must be directed to a |
paul@45 | 61 | # message store. |
paul@45 | 62 | |
paul@45 | 63 | if forwarder: |
paul@45 | 64 | timestamp(message_to_send) |
paul@45 | 65 | message_to_send["Update-Action"] = "store" |
paul@45 | 66 | message_to_send = gpg.signMessage(message_to_send, forwarder) |
paul@45 | 67 | |
paul@83 | 68 | # An explicit recipient can also be added. |
paul@83 | 69 | |
paul@83 | 70 | if to: |
paul@83 | 71 | message_to_send["To"] = to |
paul@83 | 72 | |
paul@70 | 73 | resp = sendMessage(message_to_send, url) |
paul@82 | 74 | print resp |
paul@45 | 75 | |
paul@6 | 76 | except MoinMessageError, exc: |
paul@70 | 77 | print >>sys.stderr, exc |
paul@6 | 78 | |
paul@6 | 79 | # vim: tabstop=4 expandtab shiftwidth=4 |