aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/libmproxy/onboarding/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/libmproxy/onboarding/app.py')
-rw-r--r--mitmproxy/libmproxy/onboarding/app.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/mitmproxy/libmproxy/onboarding/app.py b/mitmproxy/libmproxy/onboarding/app.py
new file mode 100644
index 00000000..ff5ed63c
--- /dev/null
+++ b/mitmproxy/libmproxy/onboarding/app.py
@@ -0,0 +1,93 @@
+from __future__ import absolute_import
+import os
+import tornado.web
+import tornado.wsgi
+import tornado.template
+
+from .. import utils
+from ..proxy import config
+
+
+loader = tornado.template.Loader(utils.pkg_data.path("onboarding/templates"))
+
+
+class Adapter(tornado.wsgi.WSGIAdapter):
+ # Tornado doesn't make the WSGI environment available to pages, so this
+ # hideous monkey patch is the easiest way to get to the mitmproxy.master
+ # variable.
+
+ def __init__(self, application):
+ self._application = application
+
+ def application(self, request):
+ request.master = self.environ["mitmproxy.master"]
+ return self._application(request)
+
+ def __call__(self, environ, start_response):
+ self.environ = environ
+ return tornado.wsgi.WSGIAdapter.__call__(
+ self,
+ environ,
+ start_response
+ )
+
+
+class Index(tornado.web.RequestHandler):
+
+ def get(self):
+ t = loader.load("index.html")
+ self.write(t.generate())
+
+
+class PEM(tornado.web.RequestHandler):
+
+ @property
+ def filename(self):
+ return config.CONF_BASENAME + "-ca-cert.pem"
+
+ def get(self):
+ p = os.path.join(self.request.master.server.config.cadir, self.filename)
+ self.set_header("Content-Type", "application/x-x509-ca-cert")
+ self.set_header(
+ "Content-Disposition",
+ "inline; filename={}".format(
+ self.filename))
+
+ with open(p, "rb") as f:
+ self.write(f.read())
+
+
+class P12(tornado.web.RequestHandler):
+
+ @property
+ def filename(self):
+ return config.CONF_BASENAME + "-ca-cert.p12"
+
+ def get(self):
+ p = os.path.join(self.request.master.server.config.cadir, self.filename)
+ self.set_header("Content-Type", "application/x-pkcs12")
+ self.set_header(
+ "Content-Disposition",
+ "inline; filename={}".format(
+ self.filename))
+
+ with open(p, "rb") as f:
+ self.write(f.read())
+
+
+application = tornado.web.Application(
+ [
+ (r"/", Index),
+ (r"/cert/pem", PEM),
+ (r"/cert/p12", P12),
+ (
+ r"/static/(.*)",
+ tornado.web.StaticFileHandler,
+ {
+ "path": utils.pkg_data.path("onboarding/static")
+ }
+ ),
+ ],
+ # debug=True
+)
+mapp = Adapter(application)