#!/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 '' print 'Swhack Logs Mirror: %s' % date print '' print '' print '' print '

Swhack Logs Mirror: %s

' % date get(tar, date) print '' print '' def page(): date = uri.split('/').pop() if date == 'serve': print "Content-Type: text/plain" print f = open('serve.cgi') for line in f: sys.stdout.write(line) f.close() return month = date[:7] tarfn = month + '.tar.bz2' if not os.path.exists(tarfn): serve(404, 'Archive not found') tar = Tar(tarfn) if not tar.exists(month + '/' + date + '.txt'): serve(404, 'Log file not found') tar.close() print "Content-Type: text/html" print print open('template.txt').read() % {'date': date} def main(): if method == 'POST': post() else: page() if __name__=="__main__": main()