aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/addons/view.py13
-rw-r--r--mitmproxy/tools/cmdline.py4
-rw-r--r--mitmproxy/tools/console/flowlist.py33
-rw-r--r--mitmproxy/tools/console/master.py7
-rw-r--r--mitmproxy/tools/console/statusbar.py2
-rw-r--r--mitmproxy/tools/main.py2
-rw-r--r--test/mitmproxy/addons/test_view.py5
7 files changed, 40 insertions, 26 deletions
diff --git a/mitmproxy/addons/view.py b/mitmproxy/addons/view.py
index b4ba2315..9d38d94c 100644
--- a/mitmproxy/addons/view.py
+++ b/mitmproxy/addons/view.py
@@ -61,6 +61,8 @@ class View(collections.Sequence):
self.show_marked = False
self.order_key = key_request_start
self.order_reversed = False
+ self.focus_follow = False
+
self._view = sortedcontainers.SortedListWithKey(key = self.order_key)
# These signals broadcast events that affect the view. That is, an
@@ -115,6 +117,9 @@ class View(collections.Sequence):
def index(self, f: mitmproxy.flow.Flow) -> int:
return self._rev(self._view.index(f))
+ def __contains__(self, f: mitmproxy.flow.Flow) -> bool:
+ return self._view.__contains__(f)
+
def _refilter(self):
self._view.clear()
for i in self._store.values():
@@ -166,6 +171,8 @@ class View(collections.Sequence):
self._store[f.id] = f
if self.filter(f):
self._view.add(f)
+ if self.focus_follow:
+ self.focus.flow = f
self.sig_add.send(self, flow=f)
def remove(self, f: mitmproxy.flow.Flow):
@@ -186,6 +193,8 @@ class View(collections.Sequence):
if self.filter(f):
if f not in self._view:
self._view.add(f)
+ if self.focus_follow:
+ self.focus.flow = f
self.sig_add.send(self, flow=f)
else:
self.sig_update.send(self, flow=f)
@@ -222,6 +231,8 @@ class View(collections.Sequence):
)
if "order_reversed" in updated:
self.set_reversed(opts.order_reversed)
+ if "focus_follow" in updated:
+ self.focus_follow = opts.focus_follow
def request(self, f):
self.add(f)
@@ -258,7 +269,7 @@ class Focus:
return self._flow
@flow.setter
- def flow(self, f: mitmproxy.flow.Flow):
+ def flow(self, f: typing.Optional[mitmproxy.flow.Flow]):
if f is not None and f not in self.view:
raise ValueError("Attempt to set focus to flow not in view")
self._flow = f
diff --git a/mitmproxy/tools/cmdline.py b/mitmproxy/tools/cmdline.py
index cf6e1d35..e4b29d0f 100644
--- a/mitmproxy/tools/cmdline.py
+++ b/mitmproxy/tools/cmdline.py
@@ -784,8 +784,8 @@ def mitmproxy():
)
parser.add_argument(
"--follow",
- action="store_true", dest="follow",
- help="Follow flow list."
+ action="store_true", dest="focus_follow",
+ help="Focus follows new flows."
)
parser.add_argument(
"--order",
diff --git a/mitmproxy/tools/console/flowlist.py b/mitmproxy/tools/console/flowlist.py
index a0a3dc94..76545893 100644
--- a/mitmproxy/tools/console/flowlist.py
+++ b/mitmproxy/tools/console/flowlist.py
@@ -175,18 +175,6 @@ class FlowItem(urwid.WidgetWrap):
signals.flowlist_change.send(self)
elif key == "M":
self.master.view.toggle_marked()
- elif key == "o":
- orders = [(i[1], i[0]) for i in view.orders]
- lookup = dict([(i[0], i[1]) for i in view.orders])
-
- def change_order(k):
- self.master.options.order = lookup[k]
-
- signals.status_prompt_onekey.send(
- prompt = "Order",
- keys = orders,
- callback = change_order
- )
elif key == "r":
try:
self.master.replay_request(self.flow)
@@ -220,9 +208,6 @@ class FlowItem(urwid.WidgetWrap):
for f in self.master.view:
f.marked = False
signals.flowlist_change.send(self)
- elif key == "v":
- val = not self.master.options.order_reversed
- self.master.options.order_reversed = val
elif key == "V":
if not self.flow.modified():
signals.status_message.send(message="Flow not modified.")
@@ -389,8 +374,24 @@ class FlowListBox(urwid.ListBox):
keys = common.METHOD_OPTIONS,
callback = self.get_method
)
+ elif key == "o":
+ orders = [(i[1], i[0]) for i in view.orders]
+ lookup = dict([(i[0], i[1]) for i in view.orders])
+
+ def change_order(k):
+ self.master.options.order = lookup[k]
+
+ signals.status_prompt_onekey.send(
+ prompt = "Order",
+ keys = orders,
+ callback = change_order
+ )
elif key == "F":
- self.master.toggle_follow_flows()
+ o = self.master.options
+ o.focus_follow = not o.focus_follow
+ elif key == "v":
+ val = not self.master.options.order_reversed
+ self.master.options.order_reversed = val
elif key == "W":
if self.master.options.outfile:
self.master.options.outfile = None
diff --git a/mitmproxy/tools/console/master.py b/mitmproxy/tools/console/master.py
index 932dc151..4c5e8c8c 100644
--- a/mitmproxy/tools/console/master.py
+++ b/mitmproxy/tools/console/master.py
@@ -44,25 +44,23 @@ class Options(mitmproxy.options.Options):
self,
*, # all args are keyword-only.
eventlog: bool = False,
- follow: bool = False,
+ focus_follow: bool = False,
intercept: Optional[str] = None,
filter: Optional[str] = None,
palette: Optional[str] = None,
palette_transparent: bool = False,
no_mouse: bool = False,
- follow_focus: bool = False,
order: Optional[str] = None,
order_reversed: bool = False,
**kwargs
):
self.eventlog = eventlog
- self.follow = follow
+ self.focus_follow = focus_follow
self.intercept = intercept
self.filter = filter
self.palette = palette
self.palette_transparent = palette_transparent
self.no_mouse = no_mouse
- self.follow_focus = follow_focus
self.order = order
self.order_reversed = order_reversed
super().__init__(**kwargs)
@@ -83,7 +81,6 @@ class ConsoleMaster(master.Master):
self.palette_transparent = options.palette_transparent
self.logbuffer = urwid.SimpleListWalker([])
- self.follow = options.follow
self.view_stack = []
diff --git a/mitmproxy/tools/console/statusbar.py b/mitmproxy/tools/console/statusbar.py
index b358f711..e292cbd7 100644
--- a/mitmproxy/tools/console/statusbar.py
+++ b/mitmproxy/tools/console/statusbar.py
@@ -199,7 +199,7 @@ class StatusBar(urwid.WidgetWrap):
opts.append("killextra")
if self.master.options.no_upstream_cert:
opts.append("no-upstream-cert")
- if self.master.options.follow_focus:
+ if self.master.options.focus_follow:
opts.append("following")
if self.master.options.stream_large_bodies:
opts.append(
diff --git a/mitmproxy/tools/main.py b/mitmproxy/tools/main.py
index 772841f5..08e5f2ca 100644
--- a/mitmproxy/tools/main.py
+++ b/mitmproxy/tools/main.py
@@ -69,7 +69,7 @@ def mitmproxy(args=None): # pragma: no cover
console_options.palette = args.palette
console_options.palette_transparent = args.palette_transparent
console_options.eventlog = args.eventlog
- console_options.follow = args.follow
+ console_options.focus_follow = args.focus_follow
console_options.intercept = args.intercept
console_options.filter = args.filter
console_options.no_mouse = args.no_mouse
diff --git a/test/mitmproxy/addons/test_view.py b/test/mitmproxy/addons/test_view.py
index 750e8469..77a8da30 100644
--- a/test/mitmproxy/addons/test_view.py
+++ b/test/mitmproxy/addons/test_view.py
@@ -7,6 +7,11 @@ from mitmproxy.test import taddons
from .. import tutils
+def test_keys():
+ t = tflow.tflow(resp=True)
+ view.key_size(t)
+
+
def test_simple():
v = view.View()
f = tflow.tflow()