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
62
|
import email
import imaplib
import os
import random
import re
import smtplib
import subprocess
import sys
import urlparse
import cliapp
import requests
import yaml
from yarnutils import *
srcdir = os.environ['SRCDIR']
datadir = os.environ['DATADIR']
vars = Variables(datadir)
def construct_aliased_http_request(address, method, url):
parts = list(urlparse.urlparse(url))
headers = {
'Host': parts[1],
}
parts[1] = address
aliased_url = urlparse.urlunparse(parts)
r = requests.Request(method, aliased_url, headers=headers)
return r.prepare()
def http_get(address, url):
r = construct_aliased_http_request(address, 'GET', url)
s = requests.Session()
resp = s.send(r)
return resp.status_code, resp.content
def get_password_with_pass(pass_home, pass_name):
p = subprocess.Popen(
['env', 'HOME={}'.format(pass_home), 'pass', 'show', pass_name],
stdout=subprocess.PIPE)
stdout, stderr = p.communicate()
password = stdout.rstrip()
return password
def iterate_mails_in_imap_mailbox(address, user, password, callback, exp):
m = imaplib.IMAP4_SSL(address)
m.login(user, password)
m.select('INBOX', False)
typ, data = m.search(None, 'ALL')
for num in data[0].split():
typ, data = m.fetch(num, '(RFC822)')
typ, text = data[0]
msg = email.message_from_string(text)
callback(m, num, msg)
if exp:
m.expunge()
m.close()
m.logout()
|