1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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)
|