summaryrefslogtreecommitdiff
path: root/lib.py
blob: c97ff04af3a06e45c83a6833e978b7cd8bc1ac52 (plain)
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()