summaryrefslogtreecommitdiffstats
blob: edab0ab135b06a0f2471d84819b1f6c59117e9d6 (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
63
64
65
66
67
68
69
70
71
72
73
74
#!/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("<li><a href='/%(user)s'>%(user)s</a></li>" % {'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 += "<p><p class='home-message'>" + message.user + ": " + message.text + "</p><p class='home-date'>" + message.date.strftime("%Y-%m-%d %H:%M")  + "</p></li>\n"

			contacts = ""
			for contact in self.server.backend.getContacts(user) :
				contacts += "<li>" + 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()