aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/web/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/web/app.py')
-rw-r--r--libmproxy/web/app.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/libmproxy/web/app.py b/libmproxy/web/app.py
new file mode 100644
index 00000000..e2765a6d
--- /dev/null
+++ b/libmproxy/web/app.py
@@ -0,0 +1,52 @@
+import os.path
+import tornado.web
+import tornado.websocket
+import logging
+import json
+
+
+class IndexHandler(tornado.web.RequestHandler):
+ def get(self):
+ self.render("index.html")
+
+
+class ClientConnection(tornado.websocket.WebSocketHandler):
+ connections = set()
+
+ def open(self):
+ ClientConnection.connections.add(self)
+
+ def on_close(self):
+ ClientConnection.connections.remove(self)
+
+ @classmethod
+ def broadcast(cls, type, data):
+ for conn in cls.connections:
+ try:
+ conn.write_message(
+ json.dumps(
+ {
+ "type": type,
+ "data": data
+ }
+ )
+ )
+ except:
+ logging.error("Error sending message", exc_info=True)
+
+
+class Application(tornado.web.Application):
+ def __init__(self, debug):
+ handlers = [
+ (r"/", IndexHandler),
+ (r"/updates", ClientConnection),
+ ]
+ settings = dict(
+ template_path=os.path.join(os.path.dirname(__file__), "templates"),
+ static_path=os.path.join(os.path.dirname(__file__), "static"),
+ xsrf_cookies=True,
+ cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
+ debug=debug,
+ )
+ tornado.web.Application.__init__(self, handlers, **settings)
+