diff options
Diffstat (limited to 'libmproxy/console/flowlist.py')
-rw-r--r-- | libmproxy/console/flowlist.py | 150 |
1 files changed, 89 insertions, 61 deletions
diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 9e7c6d69..946bd97b 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -1,7 +1,8 @@ from __future__ import absolute_import import urwid from netlib import http -from . import common +from . import common, signals + def _mkhelp(): text = [] @@ -35,6 +36,7 @@ footer = [ ('heading_key', "?"), ":help ", ] + class EventListBox(urwid.ListBox): def __init__(self, master): self.master = master @@ -60,7 +62,10 @@ class BodyPile(urwid.Pile): self, [ FlowListBox(master), - urwid.Frame(EventListBox(master), header = self.inactive_header) + urwid.Frame( + EventListBox(master), + header = self.inactive_header + ) ] ) self.master = master @@ -80,39 +85,41 @@ class BodyPile(urwid.Pile): # This is essentially a copypasta from urwid.Pile's keypress handler. # So much for "closed for modification, but open for extension". item_rows = None - if len(size)==2: - item_rows = self.get_item_rows( size, focus=True ) + if len(size) == 2: + item_rows = self.get_item_rows(size, focus = True) i = self.widget_list.index(self.focus_item) - tsize = self.get_item_size(size,i,True,item_rows) - return self.focus_item.keypress( tsize, key ) + tsize = self.get_item_size(size, i, True, item_rows) + return self.focus_item.keypress(tsize, key) -class ConnectionItem(common.WWrap): +class ConnectionItem(urwid.WidgetWrap): def __init__(self, master, state, flow, focus): self.master, self.state, self.flow = master, state, flow self.f = focus w = self.get_text() - common.WWrap.__init__(self, w) + urwid.WidgetWrap.__init__(self, w) def get_text(self): - return common.format_flow(self.flow, self.f, hostheader=self.master.showhost) + return common.format_flow( + self.flow, + self.f, + hostheader = self.master.showhost + ) def selectable(self): return True def save_flows_prompt(self, k): if k == "a": - self.master.path_prompt( - "Save all flows to: ", - self.state.last_saveload, - self.master.save_flows + signals.status_prompt_path.send( + prompt = "Save all flows to", + callback = self.master.save_flows ) else: - self.master.path_prompt( - "Save this flow to: ", - self.state.last_saveload, - self.master.save_one_flow, - self.flow + signals.status_prompt_path.send( + prompt = "Save this flow to", + callback = self.master.save_one_flow, + args = (self.flow,) ) def stop_server_playback_prompt(self, a): @@ -125,22 +132,25 @@ class ConnectionItem(common.WWrap): [i.copy() for i in self.master.state.view], self.master.killextra, self.master.rheaders, False, self.master.nopop, - self.master.options.replay_ignore_params, self.master.options.replay_ignore_content, - self.master.options.replay_ignore_payload_params + self.master.options.replay_ignore_params, + self.master.options.replay_ignore_content, + self.master.options.replay_ignore_payload_params, + self.master.options.replay_ignore_host ) elif k == "t": self.master.start_server_playback( [self.flow.copy()], self.master.killextra, self.master.rheaders, False, self.master.nopop, - self.master.options.replay_ignore_params, self.master.options.replay_ignore_content, - self.master.options.replay_ignore_payload_params + self.master.options.replay_ignore_params, + self.master.options.replay_ignore_content, + self.master.options.replay_ignore_payload_params, + self.master.options.replay_ignore_host ) else: - self.master.path_prompt( - "Server replay path: ", - self.state.last_saveload, - self.master.server_playback_path + signals.status_prompt_path.send( + prompt = "Server replay path", + callback = self.master.server_playback_path ) def keypress(self, (maxcol,), key): @@ -158,43 +168,44 @@ class ConnectionItem(common.WWrap): elif key == "r": r = self.master.replay_request(self.flow) if r: - self.master.statusbar.message(r) + signals.status_message.send(message=r) self.master.sync_list_view() elif key == "S": if not self.master.server_playback: - self.master.prompt_onekey( - "Server Replay", - ( + signals.status_prompt_onekey.send( + prompt = "Server Replay", + keys = ( ("all flows", "a"), ("this flow", "t"), ("file", "f"), ), - self.server_replay_prompt, + callback = self.server_replay_prompt, ) else: - self.master.prompt_onekey( - "Stop current server replay?", - ( + signals.status_prompt_onekey.send( + prompt = "Stop current server replay?", + keys = ( ("yes", "y"), ("no", "n"), ), - self.stop_server_playback_prompt, + callback = self.stop_server_playback_prompt, ) elif key == "V": if not self.flow.modified(): - self.master.statusbar.message("Flow not modified.") + signals.status_message.send(message="Flow not modified.") return self.state.revert(self.flow) self.master.sync_list_view() - self.master.statusbar.message("Reverted.") + signals.status_message.send(message="Reverted.") elif key == "w": - self.master.prompt_onekey( - "Save", - ( + signals.status_prompt_onekey.send( + self, + prompt = "Save", + keys = ( ("all flows", "a"), ("this flow", "t"), ), - self.save_flows_prompt, + callback = self.save_flows_prompt, ) elif key == "X": self.flow.kill(self.master) @@ -202,11 +213,10 @@ class ConnectionItem(common.WWrap): if self.flow.request: self.master.view_flow(self.flow) elif key == "|": - self.master.path_prompt( - "Send flow to script: ", - self.state.last_script, - self.master.run_script_once, - self.flow + signals.status_prompt_path.send( + prompt = "Send flow to script", + callback = self.master.run_script_once, + args = (self.flow,) ) elif key == "g": common.ask_copy_part("a", self.flow, self.master, self.state) @@ -249,11 +259,16 @@ class FlowListBox(urwid.ListBox): def get_method_raw(self, k): if k: - self.get_url(k) + self.get_url(k) def get_method(self, k): if k == "e": - self.master.prompt("Method:", "", self.get_method_raw) + signals.status_prompt.send( + self, + prompt = "Method", + text = "", + callback = self.get_method_raw + ) else: method = "" for i in common.METHOD_OPTIONS: @@ -261,13 +276,18 @@ class FlowListBox(urwid.ListBox): method = i[0].upper() self.get_url(method) - def get_url(self,method): - self.master.prompt("URL:", "http://www.example.com/", self.new_request, method) + def get_url(self, method): + signals.status_prompt.send( + prompt = "URL", + text = "http://www.example.com/", + callback = self.new_request, + args = (method,) + ) def new_request(self, url, method): parts = http.parse_url(str(url)) if not parts: - self.master.statusbar.message("Invalid Url") + signals.status_message.send(message="Invalid Url") return scheme, host, port, path = parts f = self.master.create_request(method, scheme, host, port, path) @@ -283,25 +303,33 @@ class FlowListBox(urwid.ListBox): elif key == "e": self.master.toggle_eventlog() elif key == "l": - self.master.prompt("Limit: ", self.master.state.limit_txt, self.master.set_limit) + signals.status_prompt.send( + prompt = "Limit", + text = self.master.state.limit_txt, + callback = self.master.set_limit + ) elif key == "L": - self.master.path_prompt( - "Load flows: ", - self.master.state.last_saveload, - self.master.load_flows_callback + signals.status_prompt_path.send( + self, + prompt = "Load flows", + callback = self.master.load_flows_callback ) elif key == "n": - self.master.prompt_onekey("Method", common.METHOD_OPTIONS, self.get_method) + signals.status_prompt_onekey.send( + prompt = "Method", + keys = common.METHOD_OPTIONS, + callback = self.get_method + ) elif key == "F": self.master.toggle_follow_flows() elif key == "W": if self.master.stream: self.master.stop_stream() else: - self.master.path_prompt( - "Stream flows to: ", - self.master.state.last_saveload, - self.master.start_stream_to_path + signals.status_prompt_path.send( + self, + prompt = "Stream flows to", + callback = self.master.start_stream_to_path ) else: return urwid.ListBox.keypress(self, size, key) |