From 58e1b3a47f392a5f4f16e30318820f163568f54e Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 12 Jan 2014 12:49:19 +1300 Subject: Start refactoring scripts - Move ScriptContext into script module - Use mock module instead of hand-rolled mock objects in tests --- libmproxy/flow.py | 37 ++----------------------------------- 1 file changed, 2 insertions(+), 35 deletions(-) (limited to 'libmproxy/flow.py') diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 32306513..e88bf985 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -143,39 +143,6 @@ class SetHeaders: f.request.headers.add(header, value) -class ScriptContext: - def __init__(self, master): - self._master = master - - def log(self, *args, **kwargs): - """ - Logs an event. - - How this is handled depends on the front-end. mitmdump will display - events if the eventlog flag ("-e") was passed. mitmproxy sends - output to the eventlog for display ("v" keyboard shortcut). - """ - self._master.add_event(*args, **kwargs) - - def duplicate_flow(self, f): - """ - Returns a duplicate of the specified flow. The flow is also - injected into the current state, and is ready for editing, replay, - etc. - """ - self._master.pause_scripts = True - f = self._master.duplicate_flow(f) - self._master.pause_scripts = False - return f - - def replay_request(self, f): - """ - Replay the request on the current flow. The response will be added - to the flow object. - """ - self._master.replay_request(f) - - class decoded(object): """ @@ -1431,14 +1398,14 @@ class FlowMaster(controller.Master): """ Returns an (error, script) tuple. """ - s = script.Script(script_argv, ScriptContext(self)) + s = script.Script(script_argv, self) try: s.load() except script.ScriptError, v: return (v.args[0], None) return (None, s) - def unload_script(self,script): + def unload_script(self, script): script.unload() self.scripts.remove(script) -- cgit v1.2.3 From e5776b8be3ea36c065beabe416506871f34892e6 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 12 Jan 2014 13:59:32 +1300 Subject: Clean up and clarify script API --- libmproxy/flow.py | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) (limited to 'libmproxy/flow.py') diff --git a/libmproxy/flow.py b/libmproxy/flow.py index e88bf985..0aa03198 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -1394,17 +1394,6 @@ class FlowMaster(controller.Master): """ pass - def get_script(self, script_argv): - """ - Returns an (error, script) tuple. - """ - s = script.Script(script_argv, self) - try: - s.load() - except script.ScriptError, v: - return (v.args[0], None) - return (None, s) - def unload_script(self, script): script.unload() self.scripts.remove(script) @@ -1414,11 +1403,11 @@ class FlowMaster(controller.Master): Loads a script. Returns an error description if something went wrong. """ - r = self.get_script(script_argv) - if r[0]: - return r[0] - else: - self.scripts.append(r[1]) + try: + s = script.Script(script_argv, self) + except script.ScriptError, v: + return v.args[0] + self.scripts.append(s) def run_single_script_hook(self, script, name, *args, **kwargs): if script and not self.pause_scripts: -- cgit v1.2.3 From 42d4a2fae96b8b4ba35d3a88e20f278d79a0ccc6 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 12 Jan 2014 23:01:59 +1300 Subject: Script refactoring: move script command parsing into script module. --- libmproxy/flow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libmproxy/flow.py') diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 0aa03198..e0013f1e 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -1398,13 +1398,13 @@ class FlowMaster(controller.Master): script.unload() self.scripts.remove(script) - def load_script(self, script_argv): + def load_script(self, command): """ Loads a script. Returns an error description if something went wrong. """ try: - s = script.Script(script_argv, self) + s = script.Script(command, self) except script.ScriptError, v: return v.args[0] self.scripts.append(s) -- cgit v1.2.3 From 069aca1df4223416bc76883c37078e9f2deef28f Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Mon, 13 Jan 2014 14:20:34 +1300 Subject: Deprecate Flow.unload_script in favor of Flow.unload_scripts In the presence of arguments, unloading a single script is clumsy and less useful. --- libmproxy/flow.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libmproxy/flow.py') diff --git a/libmproxy/flow.py b/libmproxy/flow.py index e0013f1e..4c778c40 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -1394,9 +1394,10 @@ class FlowMaster(controller.Master): """ pass - def unload_script(self, script): - script.unload() - self.scripts.remove(script) + def unload_scripts(self): + for script in self.scripts[:]: + script.unload() + self.scripts.remove(script) def load_script(self, command): """ @@ -1627,8 +1628,7 @@ class FlowMaster(controller.Master): return f def shutdown(self): - for script in self.scripts: - self.unload_script(script) + self.unload_scripts() controller.Master.shutdown(self) if self.stream: for i in self.state._flow_list: -- cgit v1.2.3