aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/tools
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/tools')
-rw-r--r--mitmproxy/tools/web/app.py35
-rw-r--r--mitmproxy/tools/web/master.py92
2 files changed, 57 insertions, 70 deletions
diff --git a/mitmproxy/tools/web/app.py b/mitmproxy/tools/web/app.py
index 41701d36..bbdc2bf9 100644
--- a/mitmproxy/tools/web/app.py
+++ b/mitmproxy/tools/web/app.py
@@ -116,8 +116,8 @@ class RequestHandler(BasicAuth, tornado.web.RequestHandler):
return json.loads(self.request.body.decode())
@property
- def state(self):
- return self.application.master.state
+ def view(self):
+ return self.application.master.view
@property
def master(self) -> "mitmproxy.tools.web.master.WebMaster":
@@ -126,7 +126,8 @@ class RequestHandler(BasicAuth, tornado.web.RequestHandler):
@property
def flow(self):
flow_id = str(self.path_kwargs["flow_id"])
- flow = self.state.flows.get(flow_id)
+ # FIXME: Add a facility to addon.view to safely access the store
+ flow = self.view._store.get(flow_id)
if flow:
return flow
else:
@@ -184,7 +185,7 @@ class Flows(RequestHandler):
def get(self):
self.write(dict(
- data=[convert_flow_to_json_dict(f) for f in self.state.flows]
+ data=[convert_flow_to_json_dict(f) for f in self.view]
))
@@ -195,31 +196,31 @@ class DumpFlows(RequestHandler):
bio = BytesIO()
fw = io.FlowWriter(bio)
- for f in self.state.flows:
+ for f in self.view:
fw.add(f)
self.write(bio.getvalue())
bio.close()
def post(self):
- self.state.clear()
+ self.view.clear()
content = self.request.files.values()[0][0].body
bio = BytesIO(content)
- self.state.load_flows(io.FlowReader(bio).stream())
+ self.view.load_flows(io.FlowReader(bio).stream())
bio.close()
class ClearAll(RequestHandler):
def post(self):
- self.state.clear()
+ self.view.clear()
class AcceptFlows(RequestHandler):
def post(self):
- self.state.flows.accept_all(self.master)
+ self.view.flows.accept_all(self.master)
class AcceptFlow(RequestHandler):
@@ -233,7 +234,7 @@ class FlowHandler(RequestHandler):
def delete(self, flow_id):
if self.flow.killable:
self.flow.kill(self.master)
- self.state.delete_flow(self.flow)
+ self.view.delete_flow(self.flow)
def put(self, flow_id):
flow = self.flow
@@ -270,19 +271,19 @@ class FlowHandler(RequestHandler):
print("Warning: Unknown update {}.{}: {}".format(a, k, v))
else:
print("Warning: Unknown update {}: {}".format(a, b))
- self.state.update_flow(flow)
+ self.view.update_flow(flow)
class DuplicateFlow(RequestHandler):
def post(self, flow_id):
- self.master.state.duplicate_flow(self.flow)
+ self.master.view.duplicate_flow(self.flow)
class RevertFlow(RequestHandler):
def post(self, flow_id):
- self.state.revert(self.flow)
+ self.flow.revert()
class ReplayFlow(RequestHandler):
@@ -290,7 +291,7 @@ class ReplayFlow(RequestHandler):
def post(self, flow_id):
self.flow.backup()
self.flow.response = None
- self.state.update_flow(self.flow)
+ self.view.update_flow(self.flow)
r = self.master.replay_request(self.flow)
if r:
@@ -303,7 +304,7 @@ class FlowContent(RequestHandler):
self.flow.backup()
message = getattr(self.flow, message)
message.content = self.request.files.values()[0][0].body
- self.state.update_flow(self.flow)
+ self.view.update_flow(self.flow)
def get(self, flow_id, message):
message = getattr(self.flow, message)
@@ -340,7 +341,7 @@ class FlowContentView(RequestHandler):
message = getattr(self.flow, message)
description, lines, error = contentviews.get_message_content_view(
- contentviews.get(content_view.replace('_', ' ')), message
+ contentviews.get(content_view.replace('_', ' ')).name, message
)
# if error:
# add event log
@@ -355,7 +356,7 @@ class Events(RequestHandler):
def get(self):
self.write(dict(
- data=list(self.state.events)
+ data=list([])
))
diff --git a/mitmproxy/tools/web/master.py b/mitmproxy/tools/web/master.py
index cf0bfd73..0922733d 100644
--- a/mitmproxy/tools/web/master.py
+++ b/mitmproxy/tools/web/master.py
@@ -8,7 +8,7 @@ from typing import Optional
from mitmproxy import addons
from mitmproxy import exceptions
-from mitmproxy.addons import state
+from mitmproxy.addons import view
from mitmproxy.addons import intercept
from mitmproxy import options
from mitmproxy import master
@@ -20,53 +20,7 @@ class Stop(Exception):
pass
-class WebFlowView(state.FlowView):
-
- def __init__(self, store):
- super().__init__(store, None)
-
- def _add(self, f):
- super()._add(f)
- app.ClientConnection.broadcast(
- type="UPDATE_FLOWS",
- cmd="add",
- data=app.convert_flow_to_json_dict(f)
- )
-
- def _update(self, f):
- super()._update(f)
- app.ClientConnection.broadcast(
- type="UPDATE_FLOWS",
- cmd="update",
- data=app.convert_flow_to_json_dict(f)
- )
-
- def _remove(self, f):
- super()._remove(f)
- app.ClientConnection.broadcast(
- type="UPDATE_FLOWS",
- cmd="remove",
- data=dict(id=f.id)
- )
-
- def _recalculate(self, flows):
- super()._recalculate(flows)
- app.ClientConnection.broadcast(
- type="UPDATE_FLOWS",
- cmd="reset"
- )
-
-
-class WebState(state.State):
-
- def __init__(self):
- super().__init__()
- self.view._close()
- self.view = WebFlowView(self.flows)
-
- self._last_event_id = 0
- self.events = collections.deque(maxlen=1000)
-
+class _WebState():
def add_log(self, e, level):
self._last_event_id += 1
entry = {
@@ -136,9 +90,14 @@ class WebMaster(master.Master):
def __init__(self, options, server):
super().__init__(options, server)
- self.state = WebState()
+ self.view = view.View()
+ self.view.sig_add.connect(self._sig_add)
+ self.view.sig_remove.connect(self._sig_remove)
+ self.view.sig_update.connect(self._sig_update)
+ self.view.sig_refresh.connect(self._sig_refresh)
+
self.addons.add(*addons.default_addons())
- self.addons.add(self.state, intercept.Intercept())
+ self.addons.add(self.view, intercept.Intercept())
self.app = app.Application(
self, self.options.wdebug, self.options.wauthenticator
)
@@ -162,6 +121,33 @@ class WebMaster(master.Master):
print("Stream file error: {}".format(err), file=sys.stderr)
sys.exit(1)
+ def _sig_add(self, view, flow):
+ app.ClientConnection.broadcast(
+ type="UPDATE_FLOWS",
+ cmd="add",
+ data=app.convert_flow_to_json_dict(flow)
+ )
+
+ def _sig_update(self, view, flow):
+ app.ClientConnection.broadcast(
+ type="UPDATE_FLOWS",
+ cmd="update",
+ data=app.convert_flow_to_json_dict(flow)
+ )
+
+ def _sig_remove(self, view, flow):
+ app.ClientConnection.broadcast(
+ type="UPDATE_FLOWS",
+ cmd="remove",
+ data=dict(id=flow.id)
+ )
+
+ def _sig_refresh(self, view):
+ app.ClientConnection.broadcast(
+ type="UPDATE_FLOWS",
+ cmd="reset"
+ )
+
def run(self): # pragma: no cover
iol = tornado.ioloop.IOLoop.instance()
@@ -178,6 +164,6 @@ class WebMaster(master.Master):
except (Stop, KeyboardInterrupt):
self.shutdown()
- def add_log(self, e, level="info"):
- super().add_log(e, level)
- return self.state.add_log(e, level)
+ # def add_log(self, e, level="info"):
+ # super().add_log(e, level)
+ # return self.state.add_log(e, level)