From 8725d50d03cf21b37a78c1d2fa03ade055c8a821 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 21 Mar 2015 11:19:20 +1300 Subject: Add blinker dependency, start using it to refactor console app Blinker lets us set up a central pub/sub mechanism to disentangle our object structure. --- libmproxy/console/flowlist.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 5d8ad942..c8ecf15c 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -1,7 +1,7 @@ from __future__ import absolute_import import urwid from netlib import http -from . import common +from . import common, signals def _mkhelp(): @@ -171,7 +171,7 @@ class ConnectionItem(urwid.WidgetWrap): 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: @@ -195,11 +195,11 @@ class ConnectionItem(urwid.WidgetWrap): ) 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", @@ -285,7 +285,7 @@ class FlowListBox(urwid.ListBox): 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) -- cgit v1.2.3 From 89383e9c138f68caf1cc394174250c133d21aa04 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 22 Mar 2015 13:32:24 +1300 Subject: Refactor status bar prompting to use signal system --- libmproxy/console/flowlist.py | 112 ++++++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 52 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index c8ecf15c..d4dd89d8 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -111,17 +111,17 @@ class ConnectionItem(urwid.WidgetWrap): 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_path_prompt.send( + prompt = "Save all flows to: ", + text = self.state.last_saveload, + 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_path_prompt.send( + prompt = "Save this flow to: ", + text = self.state.last_saveload, + callback = self.master.save_one_flow, + args = (self.flow,) ) def stop_server_playback_prompt(self, a): @@ -150,10 +150,10 @@ class ConnectionItem(urwid.WidgetWrap): 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_path_prompt.send( + prompt = "Server replay path: ", + text = self.state.last_saveload, + callback = self.master.server_playback_path ) def keypress(self, (maxcol,), key): @@ -175,23 +175,23 @@ class ConnectionItem(urwid.WidgetWrap): 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(): @@ -201,13 +201,14 @@ class ConnectionItem(urwid.WidgetWrap): self.master.sync_list_view() 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) @@ -215,11 +216,11 @@ class ConnectionItem(urwid.WidgetWrap): 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_path_prompt.send( + prompt = "Send flow to script: ", + text = self.state.last_script, + callback = self.master.run_script_once, + args = (self.flow,) ) elif key == "g": common.ask_copy_part("a", self.flow, self.master, self.state) @@ -266,7 +267,12 @@ class FlowListBox(urwid.ListBox): 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: @@ -275,11 +281,11 @@ class FlowListBox(urwid.ListBox): self.get_url(method) def get_url(self, method): - self.master.prompt( - "URL:", - "http://www.example.com/", - self.new_request, - method + signals.status_prompt.send( + prompt = "URL:", + text = "http://www.example.com/", + callback = self.new_request, + args = (method,) ) def new_request(self, url, method): @@ -301,22 +307,23 @@ 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_path_prompt.send( + self, + prompt = "Load flows: ", + text = self.master.state.last_saveload, + 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() @@ -324,10 +331,11 @@ class FlowListBox(urwid.ListBox): 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_path_prompt.send( + self, + prompt = "Stream flows to: ", + text = self.master.state.last_saveload, + callback = self.master.start_stream_to_path ) else: return urwid.ListBox.keypress(self, size, key) -- cgit v1.2.3 From 572000aa039a789ba35d4ef14e0c096256d6997d Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 22 Mar 2015 13:59:34 +1300 Subject: Rationalise prompt calling conventions --- libmproxy/console/flowlist.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index d4dd89d8..f39188bb 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -111,14 +111,14 @@ class ConnectionItem(urwid.WidgetWrap): def save_flows_prompt(self, k): if k == "a": - signals.status_path_prompt.send( - prompt = "Save all flows to: ", + signals.status_prompt_path.send( + prompt = "Save all flows to", text = self.state.last_saveload, callback = self.master.save_flows ) else: - signals.status_path_prompt.send( - prompt = "Save this flow to: ", + signals.status_prompt_path.send( + prompt = "Save this flow to", text = self.state.last_saveload, callback = self.master.save_one_flow, args = (self.flow,) @@ -150,8 +150,8 @@ class ConnectionItem(urwid.WidgetWrap): self.master.options.replay_ignore_host ) else: - signals.status_path_prompt.send( - prompt = "Server replay path: ", + signals.status_prompt_path.send( + prompt = "Server replay path", text = self.state.last_saveload, callback = self.master.server_playback_path ) @@ -216,8 +216,8 @@ class ConnectionItem(urwid.WidgetWrap): if self.flow.request: self.master.view_flow(self.flow) elif key == "|": - signals.status_path_prompt.send( - prompt = "Send flow to script: ", + signals.status_prompt_path.send( + prompt = "Send flow to script", text = self.state.last_script, callback = self.master.run_script_once, args = (self.flow,) @@ -269,7 +269,7 @@ class FlowListBox(urwid.ListBox): if k == "e": signals.status_prompt.send( self, - prompt = "Method:", + prompt = "Method", text = "", callback = self.get_method_raw ) @@ -282,7 +282,7 @@ class FlowListBox(urwid.ListBox): def get_url(self, method): signals.status_prompt.send( - prompt = "URL:", + prompt = "URL", text = "http://www.example.com/", callback = self.new_request, args = (method,) @@ -308,14 +308,14 @@ class FlowListBox(urwid.ListBox): self.master.toggle_eventlog() elif key == "l": signals.status_prompt.send( - prompt = "Limit: ", + prompt = "Limit", text = self.master.state.limit_txt, callback = self.master.set_limit ) elif key == "L": - signals.status_path_prompt.send( + signals.status_prompt_path.send( self, - prompt = "Load flows: ", + prompt = "Load flows", text = self.master.state.last_saveload, callback = self.master.load_flows_callback ) @@ -331,9 +331,9 @@ class FlowListBox(urwid.ListBox): if self.master.stream: self.master.stop_stream() else: - signals.status_path_prompt.send( + signals.status_prompt_path.send( self, - prompt = "Stream flows to: ", + prompt = "Stream flows to", text = self.master.state.last_saveload, callback = self.master.start_stream_to_path ) -- cgit v1.2.3 From 200498e7aa57effd7158c8d735f95c6556203a07 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 22 Mar 2015 14:14:44 +1300 Subject: Simplify the way in which path prompts keep state In the past, we kept the last path the user specified for a number of different path types to pre-seed the path prompt. Now, we no longer distinguish between types, and pre-seed with the last used directory regardless. --- libmproxy/console/flowlist.py | 6 ------ 1 file changed, 6 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index f39188bb..946bd97b 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -113,13 +113,11 @@ class ConnectionItem(urwid.WidgetWrap): if k == "a": signals.status_prompt_path.send( prompt = "Save all flows to", - text = self.state.last_saveload, callback = self.master.save_flows ) else: signals.status_prompt_path.send( prompt = "Save this flow to", - text = self.state.last_saveload, callback = self.master.save_one_flow, args = (self.flow,) ) @@ -152,7 +150,6 @@ class ConnectionItem(urwid.WidgetWrap): else: signals.status_prompt_path.send( prompt = "Server replay path", - text = self.state.last_saveload, callback = self.master.server_playback_path ) @@ -218,7 +215,6 @@ class ConnectionItem(urwid.WidgetWrap): elif key == "|": signals.status_prompt_path.send( prompt = "Send flow to script", - text = self.state.last_script, callback = self.master.run_script_once, args = (self.flow,) ) @@ -316,7 +312,6 @@ class FlowListBox(urwid.ListBox): signals.status_prompt_path.send( self, prompt = "Load flows", - text = self.master.state.last_saveload, callback = self.master.load_flows_callback ) elif key == "n": @@ -334,7 +329,6 @@ class FlowListBox(urwid.ListBox): signals.status_prompt_path.send( self, prompt = "Stream flows to", - text = self.master.state.last_saveload, callback = self.master.start_stream_to_path ) else: -- cgit v1.2.3 From e76467e977c061d92f88500b23f11bbf3cc365bb Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 7 Apr 2015 15:59:38 +1200 Subject: Refactor flow list state management - Use signal mechanism for state synchronisation - Move "Copy to clipboard" shortcut to "P" --- libmproxy/console/flowlist.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 946bd97b..8923fd60 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -15,10 +15,10 @@ def _mkhelp(): ("D", "duplicate flow"), ("e", "toggle eventlog"), ("F", "toggle follow flow list"), - ("g", "copy flow to clipboard"), ("l", "set limit filter pattern"), ("L", "load saved flows"), ("n", "create a new request"), + ("P", "copy flow to clipboard"), ("r", "replay request"), ("V", "revert changes to request"), ("w", "save flows "), @@ -157,11 +157,11 @@ class ConnectionItem(urwid.WidgetWrap): key = common.shortcuts(key) if key == "a": self.flow.accept_intercept(self.master) - self.master.sync_list_view() + signals.flowlist_change.send(self) elif key == "d": self.flow.kill(self.master) self.state.delete_flow(self.flow) - self.master.sync_list_view() + signals.flowlist_change.send(self) elif key == "D": f = self.master.duplicate_flow(self.flow) self.master.view_flow(f) @@ -169,7 +169,7 @@ class ConnectionItem(urwid.WidgetWrap): r = self.master.replay_request(self.flow) if r: signals.status_message.send(message=r) - self.master.sync_list_view() + signals.flowlist_change.send(self) elif key == "S": if not self.master.server_playback: signals.status_prompt_onekey.send( @@ -195,7 +195,7 @@ class ConnectionItem(urwid.WidgetWrap): signals.status_message.send(message="Flow not modified.") return self.state.revert(self.flow) - self.master.sync_list_view() + signals.flowlist_change.send(self) signals.status_message.send(message="Reverted.") elif key == "w": signals.status_prompt_onekey.send( @@ -218,7 +218,7 @@ class ConnectionItem(urwid.WidgetWrap): callback = self.master.run_script_once, args = (self.flow,) ) - elif key == "g": + elif key == "P": common.ask_copy_part("a", self.flow, self.master, self.state) elif key == "b": common.ask_save_body(None, self.master, self.state, self.flow) @@ -231,6 +231,10 @@ class FlowListWalker(urwid.ListWalker): self.master, self.state = master, state if self.state.flow_count(): self.set_focus(0) + signals.flowlist_change.connect(self.sig_flowlist_change) + + def sig_flowlist_change(self, sender): + self._modified() def get_focus(self): f, i = self.state.get_focus() @@ -255,7 +259,10 @@ class FlowListWalker(urwid.ListWalker): class FlowListBox(urwid.ListBox): def __init__(self, master): self.master = master - urwid.ListBox.__init__(self, master.flow_list_walker) + urwid.ListBox.__init__( + self, + FlowListWalker(master, master.state) + ) def get_method_raw(self, k): if k: @@ -297,7 +304,7 @@ class FlowListBox(urwid.ListBox): key = common.shortcuts(key) if key == "A": self.master.accept_all() - self.master.sync_list_view() + signals.flowlist_change.send(self) elif key == "C": self.master.clear_flows() elif key == "e": -- cgit v1.2.3 From 8e2e83a3c6d47e52a5398f851b2900dd042f3d6a Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 7 Apr 2015 16:13:42 +1200 Subject: console: add g/G shortcuts throughout g: go to end G: go to beginning --- libmproxy/console/flowlist.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 8923fd60..aa3fd718 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -309,6 +309,12 @@ class FlowListBox(urwid.ListBox): self.master.clear_flows() elif key == "e": self.master.toggle_eventlog() + elif key == "G": + self.master.state.set_focus(0) + signals.flowlist_change.send(self) + elif key == "g": + self.master.state.set_focus(self.master.state.flow_count()) + signals.flowlist_change.send(self) elif key == "l": signals.status_prompt.send( prompt = "Limit", -- cgit v1.2.3 From ff654730e8dc0e68998487a8dcaf3db00a42c371 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 17 Apr 2015 13:30:49 +1200 Subject: console: make g/G shortcuts work in more contexts --- libmproxy/console/flowlist.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index aa3fd718..c7a0d1b7 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -47,6 +47,10 @@ class EventListBox(urwid.ListBox): if key == "C": self.master.clear_events() key = None + elif key == "G": + self.set_focus(0) + elif key == "g": + self.set_focus(len(self.master.eventlist)-1) return urwid.ListBox.keypress(self, size, key) -- cgit v1.2.3 From 79e587fe040be1cefe8637f28e6c2e1a8a50779d Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 26 Apr 2015 18:41:27 +0200 Subject: fix #568 --- libmproxy/console/flowlist.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index c7a0d1b7..ffd9dbdd 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -233,8 +233,8 @@ class ConnectionItem(urwid.WidgetWrap): class FlowListWalker(urwid.ListWalker): def __init__(self, master, state): self.master, self.state = master, state - if self.state.flow_count(): - self.set_focus(0) + _, i = self.state.get_focus() + self.set_focus(i) signals.flowlist_change.connect(self.sig_flowlist_change) def sig_flowlist_change(self, sender): -- cgit v1.2.3 From b5690b81034ee0173cf2706429862fdd3ac688b8 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 26 Apr 2015 18:43:27 +0200 Subject: remove superfluous set_focus --- libmproxy/console/flowlist.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index ffd9dbdd..6ab45bad 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -233,8 +233,6 @@ class ConnectionItem(urwid.WidgetWrap): class FlowListWalker(urwid.ListWalker): def __init__(self, master, state): self.master, self.state = master, state - _, i = self.state.get_focus() - self.set_focus(i) signals.flowlist_change.connect(self.sig_flowlist_change) def sig_flowlist_change(self, sender): -- cgit v1.2.3 From a05a70d8168a07c92b2a3ecbbb1958d85532efe3 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 30 May 2015 12:03:28 +1200 Subject: Add coding style check, reformat. --- libmproxy/console/flowlist.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 6ab45bad..fd071569 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -50,7 +50,7 @@ class EventListBox(urwid.ListBox): elif key == "G": self.set_focus(0) elif key == "g": - self.set_focus(len(self.master.eventlist)-1) + self.set_focus(len(self.master.eventlist) - 1) return urwid.ListBox.keypress(self, size, key) @@ -76,7 +76,8 @@ class BodyPile(urwid.Pile): def keypress(self, size, key): if key == "tab": - self.focus_position = (self.focus_position + 1)%len(self.widget_list) + self.focus_position = ( + self.focus_position + 1) % len(self.widget_list) if self.focus_position == 1: self.widget_list[1].header = self.active_header else: @@ -157,7 +158,8 @@ class ConnectionItem(urwid.WidgetWrap): callback = self.master.server_playback_path ) - def keypress(self, (maxcol,), key): + def keypress(self, xxx_todo_changeme, key): + (maxcol,) = xxx_todo_changeme key = common.shortcuts(key) if key == "a": self.flow.accept_intercept(self.master) -- cgit v1.2.3 From 1076c25e5b292b9c655e5acc3c587d06fe90b4c4 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 2 Jun 2015 11:27:26 +1200 Subject: console: click in flow list to view flow --- libmproxy/console/flowlist.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index fd071569..39245984 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -158,6 +158,12 @@ class ConnectionItem(urwid.WidgetWrap): callback = self.master.server_playback_path ) + def mouse_event(self, size, event, button, col, row, focus): + if event == "mouse press" and button == 1: + if self.flow.request: + self.master.view_flow(self.flow) + return True + def keypress(self, xxx_todo_changeme, key): (maxcol,) = xxx_todo_changeme key = common.shortcuts(key) -- cgit v1.2.3 From 8b998cfbeace0777293f3cef804c1bf239758273 Mon Sep 17 00:00:00 2001 From: Jake Drahos Date: Thu, 11 Jun 2015 10:27:48 -0500 Subject: Implemented basic marking of flows - Press m to toggle flow mark - Flow mark is set in libmproxy/console/common.py. Currently set to "===" --- libmproxy/console/flowlist.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 39245984..8bb6f87a 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -17,6 +17,7 @@ def _mkhelp(): ("F", "toggle follow flow list"), ("l", "set limit filter pattern"), ("L", "load saved flows"), + ("m", "toggle flow mark"), ("n", "create a new request"), ("P", "copy flow to clipboard"), ("r", "replay request"), @@ -177,6 +178,13 @@ class ConnectionItem(urwid.WidgetWrap): elif key == "D": f = self.master.duplicate_flow(self.flow) self.master.view_flow(f) + elif key == "m": + self.flow.toggle_mark() + signals.flowlist_change.send(self) + if self.flow.marked: + signals.status_message.send(message="Flow is now marked") + else: + signals.status_message.send(message="Flow is now not marked") elif key == "r": r = self.master.replay_request(self.flow) if r: -- cgit v1.2.3 From e53a2426c153337fe25ef6dd13059cf2c4d0ab0b Mon Sep 17 00:00:00 2001 From: Jake Drahos Date: Thu, 11 Jun 2015 11:40:03 -0500 Subject: Marked flows not deleted on clear all Marked flows survive a clear all unless all current flows are marked. Bug: They don't show up until another flow is added --- libmproxy/console/flowlist.py | 4 ---- 1 file changed, 4 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 8bb6f87a..f7835419 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -181,10 +181,6 @@ class ConnectionItem(urwid.WidgetWrap): elif key == "m": self.flow.toggle_mark() signals.flowlist_change.send(self) - if self.flow.marked: - signals.status_message.send(message="Flow is now marked") - else: - signals.status_message.send(message="Flow is now not marked") elif key == "r": r = self.master.replay_request(self.flow) if r: -- cgit v1.2.3 From 486177edc7090539e063ec2a0dd70caffd8ec3cc Mon Sep 17 00:00:00 2001 From: Jake Drahos Date: Thu, 11 Jun 2015 16:15:24 -0500 Subject: Added functionality to write marked flows to file w (write) -> m (marked) --- libmproxy/console/flowlist.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index f7835419..72d507c8 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -121,6 +121,11 @@ class ConnectionItem(urwid.WidgetWrap): prompt = "Save all flows to", callback = self.master.save_flows ) + elif k == "m": + signals.status_prompt_path.send( + prompt = "Save marked flows to", + callback = self.master.save_marked_flows + ) else: signals.status_prompt_path.send( prompt = "Save this flow to", @@ -220,6 +225,7 @@ class ConnectionItem(urwid.WidgetWrap): keys = ( ("all flows", "a"), ("this flow", "t"), + ("marked flows", "m"), ), callback = self.save_flows_prompt, ) -- cgit v1.2.3 From 2a6698bf5a2ebe576ae0bbcacdee69d6eed10be9 Mon Sep 17 00:00:00 2001 From: Jake Drahos Date: Thu, 11 Jun 2015 20:27:33 -0500 Subject: Moved marking from flow to console No longer taints the flow primitive --- libmproxy/console/flowlist.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 72d507c8..87e7c77a 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -109,7 +109,8 @@ class ConnectionItem(urwid.WidgetWrap): return common.format_flow( self.flow, self.f, - hostheader = self.master.showhost + hostheader = self.master.showhost, + marked=self.state.flow_marked(self.flow) ) def selectable(self): @@ -184,7 +185,10 @@ class ConnectionItem(urwid.WidgetWrap): f = self.master.duplicate_flow(self.flow) self.master.view_flow(f) elif key == "m": - self.flow.toggle_mark() + if self.state.flow_marked(self.flow): + self.state.set_flow_marked(self.flow, False) + else: + self.state.set_flow_marked(self.flow, True) signals.flowlist_change.send(self) elif key == "r": r = self.master.replay_request(self.flow) -- cgit v1.2.3 From 946030367fee0d624a29ba57a11d5f2d1dea4105 Mon Sep 17 00:00:00 2001 From: Jake Drahos Date: Thu, 11 Jun 2015 20:31:54 -0500 Subject: Added unmark all functionality - 'U' to unmark all marked flows --- libmproxy/console/flowlist.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'libmproxy/console/flowlist.py') diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 87e7c77a..bb23df75 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -21,6 +21,7 @@ def _mkhelp(): ("n", "create a new request"), ("P", "copy flow to clipboard"), ("r", "replay request"), + ("U", "unmark all marked flows"), ("V", "revert changes to request"), ("w", "save flows "), ("W", "stream flows to file"), @@ -215,6 +216,10 @@ class ConnectionItem(urwid.WidgetWrap): ), callback = self.stop_server_playback_prompt, ) + elif key == "U": + for f in self.state.flows: + self.state.set_flow_marked(f, False) + signals.flowlist_change.send(self) elif key == "V": if not self.flow.modified(): signals.status_message.send(message="Flow not modified.") -- cgit v1.2.3