diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2016-09-09 11:15:07 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2016-09-09 11:15:07 +1200 |
commit | c1bb5821295678db0d7f3fa4481c3aa28108f161 (patch) | |
tree | 63c122d8b979cfbc09f321f311699376d3a8f259 | |
parent | 715e47e3d4cc16c95d572ccc871cc24417ee358a (diff) | |
download | mitmproxy-c1bb5821295678db0d7f3fa4481c3aa28108f161.tar.gz mitmproxy-c1bb5821295678db0d7f3fa4481c3aa28108f161.tar.bz2 mitmproxy-c1bb5821295678db0d7f3fa4481c3aa28108f161.zip |
Fix interactive server replay in mitmproxy console
-rw-r--r-- | mitmproxy/addons.py | 13 | ||||
-rw-r--r-- | mitmproxy/builtins/serverplayback.py | 13 | ||||
-rw-r--r-- | mitmproxy/console/master.py | 15 | ||||
-rw-r--r-- | mitmproxy/console/statusbar.py | 8 | ||||
-rw-r--r-- | mitmproxy/console/window.py | 20 | ||||
-rw-r--r-- | test/mitmproxy/test_addons.py | 5 |
6 files changed, 28 insertions, 46 deletions
diff --git a/mitmproxy/addons.py b/mitmproxy/addons.py index 04d1e905..2658c0af 100644 --- a/mitmproxy/addons.py +++ b/mitmproxy/addons.py @@ -14,6 +14,11 @@ class Addons(object): master.options.changed.connect(self.options_update) def get(self, name): + """ + Retrieve an addon by name. Addon names are equal to the .name + attribute on the instance, or the lower case class name if that + does not exist. + """ for i in self.chain: if name == _get_name(i): return i @@ -44,14 +49,6 @@ class Addons(object): for i in self.chain: self.invoke_with_context(i, "done") - def has_addon(self, name): - """ - Is an addon with this name registered? - """ - for i in self.chain: - if _get_name(i) == name: - return True - def __len__(self): return len(self.chain) diff --git a/mitmproxy/builtins/serverplayback.py b/mitmproxy/builtins/serverplayback.py index fe56d68b..be82cad9 100644 --- a/mitmproxy/builtins/serverplayback.py +++ b/mitmproxy/builtins/serverplayback.py @@ -88,13 +88,14 @@ class ServerPlayback(object): def configure(self, options, updated): self.options = options - if options.server_replay and "server_replay" in updated: - try: - flows = flow.read_flows_from_paths(options.server_replay) - except exceptions.FlowReadException as e: - raise exceptions.OptionsError(str(e)) + if "server_replay" in updated: self.clear() - self.load(flows) + if options.server_replay: + try: + flows = flow.read_flows_from_paths(options.server_replay) + except exceptions.FlowReadException as e: + raise exceptions.OptionsError(str(e)) + self.load(flows) # FIXME: These options have to be renamed to something more sensible - # prefixed with serverplayback_ where appropriate, and playback_ where diff --git a/mitmproxy/console/master.py b/mitmproxy/console/master.py index 9d2fb78b..1cb3a32b 100644 --- a/mitmproxy/console/master.py +++ b/mitmproxy/console/master.py @@ -388,21 +388,6 @@ class ConsoleMaster(flow.FlowMaster): if flows: self.start_client_playback(flows, False) - def server_playback_path(self, path): - if not isinstance(path, list): - path = [path] - flows = self._readflows(path) - if flows: - self.start_server_playback( - flows, - self.options.kill, self.options.rheaders, - False, self.options.nopop, - self.options.replay_ignore_params, - self.options.replay_ignore_content, - self.options.replay_ignore_payload_params, - self.options.replay_ignore_host - ) - def spawn_editor(self, data): text = not isinstance(data, bytes) fd, name = tempfile.mkstemp('', "mproxy", text=text) diff --git a/mitmproxy/console/statusbar.py b/mitmproxy/console/statusbar.py index a099e744..6c4cc8b5 100644 --- a/mitmproxy/console/statusbar.py +++ b/mitmproxy/console/statusbar.py @@ -147,14 +147,12 @@ class StatusBar(urwid.WidgetWrap): if self.master.client_playback: r.append("[") r.append(("heading_key", "cplayback")) - r.append(":%s to go]" % self.master.client_playback.count()) + r.append(":%s]" % self.master.client_playback.count()) if self.master.options.server_replay: r.append("[") r.append(("heading_key", "splayback")) - if self.master.options.nopop: - r.append(":%s in file]" % self.master.options.server_replay.count()) - else: - r.append(":%s to go]" % self.master.options.server_replay.count()) + a = self.master.addons.get("serverplayback") + r.append(":%s]" % a.count()) if self.master.options.ignore_hosts: r.append("[") r.append(("heading_key", "I")) diff --git a/mitmproxy/console/window.py b/mitmproxy/console/window.py index 35593643..159f68ed 100644 --- a/mitmproxy/console/window.py +++ b/mitmproxy/console/window.py @@ -57,13 +57,11 @@ class Window(urwid.Frame): callback = self.master.stop_client_playback_prompt, ) elif k == "s": - if not self.master.server_playback: - signals.status_prompt_path.send( - self, - prompt = "Server replay path", - callback = self.master.server_playback_path - ) - else: + a = self.master.addons.get("serverplayback") + if a.count(): + def stop_server_playback(response): + if response == "y": + self.master.options.server_replay = [] signals.status_prompt_onekey.send( self, prompt = "Stop current server replay?", @@ -71,7 +69,13 @@ class Window(urwid.Frame): ("yes", "y"), ("no", "n"), ), - callback = self.master.stop_server_playback_prompt, + callback = stop_server_playback + ) + else: + signals.status_prompt_path.send( + self, + prompt = "Server playback path", + callback = lambda x: self.master.options.setter("server_replay")([x]) ) def keypress(self, size, k): diff --git a/test/mitmproxy/test_addons.py b/test/mitmproxy/test_addons.py index f59f99d6..52d7f07f 100644 --- a/test/mitmproxy/test_addons.py +++ b/test/mitmproxy/test_addons.py @@ -17,8 +17,5 @@ def test_simple(): m = controller.Master(o) a = addons.Addons(m) a.add(o, TAddon("one")) - assert a.has_addon("one") - assert not a.has_addon("two") - assert a.get("one") - assert not a.get("nonexistent") + assert not a.get("two") |