2012-09-06 20:45:48 +02:00
|
|
|
#!/usr/bin/python
|
2012-09-07 17:45:09 +02:00
|
|
|
|
|
|
|
browser = None
|
2012-09-07 16:54:28 +02:00
|
|
|
csrf_token = None
|
|
|
|
|
|
|
|
def browser_login():
|
2012-09-07 17:45:09 +02:00
|
|
|
logger = logging.getLogger("mechanize")
|
|
|
|
logger.addHandler(logging.StreamHandler(sys.stdout))
|
|
|
|
logger.setLevel(logging.INFO)
|
|
|
|
|
|
|
|
global browser
|
|
|
|
browser = mechanize.Browser()
|
2012-09-07 16:54:28 +02:00
|
|
|
browser.set_handle_robots(False)
|
2012-09-06 20:45:48 +02:00
|
|
|
## debugging code to consider
|
2012-09-07 16:54:28 +02:00
|
|
|
# browser.set_debug_http(True)
|
|
|
|
# browser.set_debug_responses(True)
|
|
|
|
# browser.set_debug_redirects(True)
|
|
|
|
# browser.set_handle_refresh(False)
|
2012-09-07 17:14:26 +02:00
|
|
|
|
2012-09-07 16:54:28 +02:00
|
|
|
browser.add_password("https://app.humbughq.com/", "tabbott", "xxxxxxxxxxxxxxxxx", "wiki")
|
|
|
|
browser.open("https://app.humbughq.com/")
|
|
|
|
browser.follow_link(text_regex="\s*Log in\s*")
|
|
|
|
browser.select_form(nr=0)
|
|
|
|
browser["username"] = "iago"
|
|
|
|
browser["password"] = "iago"
|
|
|
|
|
|
|
|
global csrf_token
|
2012-09-07 17:14:26 +02:00
|
|
|
soup = BeautifulSoup.BeautifulSoup(browser.submit().read())
|
|
|
|
csrf_token = soup.find('input', attrs={'name': 'csrfmiddlewaretoken'})['value']
|
2012-09-06 20:45:48 +02:00
|
|
|
|
2012-09-07 19:13:00 +02:00
|
|
|
def send_zephyr(zeph):
|
2012-09-07 16:54:28 +02:00
|
|
|
browser.addheaders.append(('X-CSRFToken', csrf_token))
|
2012-09-07 19:13:00 +02:00
|
|
|
zephyr_data = urllib.urlencode(zeph.items())
|
2012-09-07 16:54:28 +02:00
|
|
|
browser.open("https://app.humbughq.com/forge_zephyr/", zephyr_data)
|
2012-09-06 22:10:48 +02:00
|
|
|
|
|
|
|
subs_list = """\
|
2012-09-07 17:45:09 +02:00
|
|
|
""".split()
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
import mechanize
|
|
|
|
import urllib
|
|
|
|
import cgi
|
|
|
|
import sys
|
|
|
|
import logging
|
|
|
|
import zephyr
|
|
|
|
import BeautifulSoup
|
2012-09-07 19:13:00 +02:00
|
|
|
import traceback
|
|
|
|
import simplejson
|
2012-09-07 17:45:09 +02:00
|
|
|
|
|
|
|
browser_login()
|
|
|
|
|
|
|
|
subs = zephyr.Subscriptions()
|
|
|
|
for sub in subs_list:
|
|
|
|
subs.add((sub, '*', '*'))
|
|
|
|
|
2012-09-07 19:13:00 +02:00
|
|
|
try:
|
|
|
|
with open('zephyrs', 'r') as log:
|
|
|
|
for ln in log:
|
|
|
|
zeph = simplejson.loads(ln)
|
|
|
|
print "sending saved message to %s from %s..." % (zeph['class'], zeph['sender'])
|
|
|
|
send_zephyr(zeph)
|
|
|
|
except:
|
|
|
|
print >>sys.stderr, 'Could not load zephyr log'
|
|
|
|
traceback.print_exc()
|
|
|
|
|
|
|
|
with open('zephyrs', 'a') as log:
|
|
|
|
print "Starting receive loop"
|
|
|
|
while True:
|
|
|
|
notice = zephyr.receive(block=True)
|
|
|
|
zsig, body = notice.message.split("\x00", 1)
|
|
|
|
if notice.cls not in subs_list:
|
|
|
|
continue
|
|
|
|
zeph = { 'type' : 'class',
|
|
|
|
'time' : str(notice.time),
|
|
|
|
'sender' : notice.sender,
|
|
|
|
'class' : notice.cls,
|
|
|
|
'instance' : notice.instance,
|
|
|
|
'zsig' : zsig, # logged here but not used by app
|
|
|
|
'new_zephyr': body }
|
|
|
|
for k,v in zeph.items():
|
|
|
|
zeph[k] = cgi.escape(v)
|
|
|
|
|
|
|
|
log.write(simplejson.dumps(zeph) + '\n')
|
|
|
|
log.flush()
|
|
|
|
|
|
|
|
print "received a message on %s from %s..." % (zeph['class'], zeph['sender'])
|
|
|
|
send_zephyr(zeph)
|
|
|
|
print "forwarded"
|