#!/usr/bin/env python
"""
Serve Swhack Logs
Author: Sean B. Palmer, inamidst.com
"""
import cgitb; cgitb.enable()
import sys, os, re, cgi, tarfile
uri = os.environ.get('REQUEST_URI')
method = os.environ.get('REQUEST_METHOD')
r_uri = re.compile(r'http://[^<>"(),\s]+')
def msg(s):
return s
def serve(status, body):
print "Status: " + str(status)
print "Content-Type: text/html"
print
print body
sys.exit()
class Tar(object):
def __init__(self, fn):
self.fn = fn
self.tar = tarfile.open(fn, 'r:bz2')
def exists(self, fn):
try: self.tar.getmember(fn)
except KeyError: return False
else: return True
def get(self, fn):
member = self.tar.getmember(fn)
return self.tar.extractfile(member)
def close(self):
self.tar.close()
def utf8ize(s):
nuggets = []
for nugget in s.split(' '):
try: nuggets.append(unicode(nugget, 'utf-8'))
except:
try: nuggets.append(unicode(nugget, 'iso-8859-1'))
except: nuggets.append(unicode(nugget))
return ' '.join([n.encode('utf-8') for n in nuggets])
def htmlize(line):
line = line.rstrip('\r\n')
timestamp, content = line.split(' ', 1)
content = utf8ize(content)
lineid = 'T' + timestamp.replace(':', '-')
result = ''
result += timestamp + '' + ' ' + cgi.escape(content)
result += '
\n'
return result
def get(tar, date):
month = date[:7]
f = tar.get(month + '/' + date + '.txt')
while True:
line = f.readline()
if not line: break
sys.stdout.write(htmlize(line))
f.close()
tar.close()
def post():
date = uri.split('/').pop()
month = date[:7]
tarfn = month + '.tar.bz2'
if not os.path.isfile(tarfn):
serve(404, 'The archive %s does not exist.' % date[:7])
tar = Tar(tarfn)
if not tar.exists(month + '/' + date + '.txt'):
serve(404, 'Not found')
print "Content-Type: text/html"
print
print ''
print '