#!/usr/bin/env python
import BaseHTTPServer, cgi
class HTTPFrontend :
class RequestHandler (BaseHTTPServer.BaseHTTPRequestHandler) :
def do_GET(self) :
# CSS
if self.path == "/cheshir.css" :
self.send_response(200)
self.send_header('Content-Type', 'text/css')
self.end_headers()
css = open("html/cheshir.css")
self.wfile.write(css.read())
css.close()
return
# User page
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
user = self.path[1:]
if user :
self.wfile.write(self.getHomePage(user))
else :
# Print user list
self.wfile.write('Users:')
for user in self.server.backend.getAllUsers() :
self.wfile.write("
%(user)s" % {'user' : user})
def do_POST(self) :
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
user = self.path[1:]
assert(user)
length = int(self.headers.getheader('content-length'))
data = cgi.parse_qs(self.rfile.read(length))
if data.has_key('message') :
self.server.backend.addMessageFromUser(data.get('message')[0], user)
elif data.has_key('contact') :
self.server.backend.addContact(user, data.get('contact')[0])
self.wfile.write(self.getHomePage(user))
def getHomePage(self, user) :
templateFile = open("html/home.html")
template = templateFile.read()
templateFile.close()
messages = ""
for message in self.server.backend.getMessages(user) :
messages += "" + message.user + ": " + message.text + "
" + message.date.strftime("%Y-%m-%d %H:%M") + "
\n"
contacts = ""
for contact in self.server.backend.getContacts(user) :
contacts += "" + contact + "\n"
return template % {
'uri' : self.path,
'user' : user,
'messages' : messages,
'contacts' : contacts }
def __init__(self, port, backend) :
self.server = BaseHTTPServer.HTTPServer(('',port), self.RequestHandler)
self.server.backend = backend
print "Web interface listening on http://localhost:" + str(port)
def start(self) :
self.server.serve_forever()
def stop(self) :
self.server.socket.close()