From 7ce8ae6985c5bc2b658d35c9e123e8436d64b015 Mon Sep 17 00:00:00 2001 From: Marius Halden Date: Sat, 11 Apr 2015 00:43:28 +0200 Subject: Initial --- push.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 push.py (limited to 'push.py') diff --git a/push.py b/push.py new file mode 100644 index 0000000..ea6ab5c --- /dev/null +++ b/push.py @@ -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) -- cgit v1.2.3