diff options
Diffstat (limited to 'push.py')
-rw-r--r-- | push.py | 61 |
1 files changed, 61 insertions, 0 deletions
@@ -0,0 +1,61 @@ +#!/usr/local/bin/python + +import os +import re +import sys +import yaml +import pushover +import email.header +import email.parser + +try: + cfg = sys.argv[1] +except IndexError: + cfg = os.path.dirname(os.path.realpath(__file__)) + '/push.cfg' + +with open(cfg) as fh: + maps = yaml.load(fh) + +sender_map = maps.get('senders', None) +recipient_map = maps.get('recipients', None) + +recipient = os.environ.get('RECIPIENT', '') +sender = os.environ.get('SENDER', '') +api_token = None +user_tokens = None + +if len(recipient) == 0 or len(sender) == 0: + print >>sys.stderr, "recipient or sender missing." + sys.exit(1) + +for s in sender_map: + if re.match(s.get('re', r'^$'), sender): + api_token = s.get('key', None) + break + +for r in recipient_map: + if re.match(r.get('re', r'^$'), recipient): + user_tokens = r.get('keys', None) + break + +if not api_token or not user_tokens: + print >>sys.stderr, "found no matching keys for sender or recipient." + sys.exit(1) + +parser = email.parser.Parser() +mail = parser.parse(sys.stdin) + +title, encoding = email.header.decode_header(mail.get('subject'))[0] +if title != None and encoding != None: + title = title.decode(encoding).encode('utf-8') + +payload = mail.get_payload(decode=True) +encoding = mail.get_charsets()[0] +if payload != None and encoding != None: + payload = payload.decode(encoding).encode('utf-8') + +msg = payload.strip() + +for user_token in user_tokens: + p = pushover.Client(user_token, api_token=api_token) + p.send_message(msg, title=title) |