From 4ffa1ed7b6f2c7b385c61f7ac2b3fee12e7a3a4d Mon Sep 17 00:00:00 2001 From: Yoav Shai Date: Fri, 6 Dec 2019 00:13:20 +0200 Subject: Add flow to ContentView metadata --- mitmproxy/addons/dumper.py | 13 +++++++------ mitmproxy/contentviews/__init__.py | 3 ++- mitmproxy/tools/console/flowview.py | 2 +- mitmproxy/tools/web/app.py | 2 +- mitmproxy/tools/web/static_viewer.py | 2 +- test/mitmproxy/addons/test_dumper.py | 2 +- test/mitmproxy/contentviews/test_api.py | 12 +++++++----- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/mitmproxy/addons/dumper.py b/mitmproxy/addons/dumper.py index dcac6b82..6c9eda90 100644 --- a/mitmproxy/addons/dumper.py +++ b/mitmproxy/addons/dumper.py @@ -86,10 +86,11 @@ class Dumper: ) self.echo(out, ident=4) - def _echo_message(self, message): + def _echo_message(self, message, flow): _, lines, error = contentviews.get_message_content_view( ctx.options.dumper_default_contentview, - message + message, + flow ) if error: ctx.log.debug(error) @@ -218,14 +219,14 @@ class Dumper: if ctx.options.flow_detail >= 2: self._echo_headers(f.request.headers) if ctx.options.flow_detail >= 3: - self._echo_message(f.request) + self._echo_message(f.request, f) if f.response: self._echo_response_line(f) if ctx.options.flow_detail >= 2: self._echo_headers(f.response.headers) if ctx.options.flow_detail >= 3: - self._echo_message(f.response) + self._echo_message(f.response, f) if f.error: msg = strutils.escape_control_characters(f.error.msg) @@ -263,7 +264,7 @@ class Dumper: if ctx.options.flow_detail >= 3: message = message.from_state(message.get_state()) message.content = message.content.encode() if isinstance(message.content, str) else message.content - self._echo_message(message) + self._echo_message(message, f) def websocket_end(self, f): if self.match(f): @@ -291,4 +292,4 @@ class Dumper: direction=direction, )) if ctx.options.flow_detail >= 3: - self._echo_message(message) + self._echo_message(message, f) diff --git a/mitmproxy/contentviews/__init__.py b/mitmproxy/contentviews/__init__.py index 67e00833..fc38543d 100644 --- a/mitmproxy/contentviews/__init__.py +++ b/mitmproxy/contentviews/__init__.py @@ -75,7 +75,7 @@ def safe_to_print(lines, encoding="utf8"): yield clean_line -def get_message_content_view(viewname, message): +def get_message_content_view(viewname, message, flow): """ Like get_content_view, but also handles message encoding. """ @@ -104,6 +104,7 @@ def get_message_content_view(viewname, message): if isinstance(message, http.Message): metadata["headers"] = message.headers metadata["message"] = message + metadata["flow"] = flow description, lines, error = get_content_view( viewmode, content, **metadata diff --git a/mitmproxy/tools/console/flowview.py b/mitmproxy/tools/console/flowview.py index 807c9714..2fa1df1f 100644 --- a/mitmproxy/tools/console/flowview.py +++ b/mitmproxy/tools/console/flowview.py @@ -120,7 +120,7 @@ class FlowDetails(tabs.Tabs): message = self._get_content_view_message self._get_content_view_message = None description, lines, error = contentviews.get_message_content_view( - viewmode, message + viewmode, message, self.flow ) if error: self.master.log.debug(error) diff --git a/mitmproxy/tools/web/app.py b/mitmproxy/tools/web/app.py index a0803755..6bdd7eb1 100644 --- a/mitmproxy/tools/web/app.py +++ b/mitmproxy/tools/web/app.py @@ -396,7 +396,7 @@ class FlowContentView(RequestHandler): message = getattr(self.flow, message) description, lines, error = contentviews.get_message_content_view( - content_view.replace('_', ' '), message + content_view.replace('_', ' '), message, self.flow ) # if error: # add event log diff --git a/mitmproxy/tools/web/static_viewer.py b/mitmproxy/tools/web/static_viewer.py index 03156638..31d4b3c0 100644 --- a/mitmproxy/tools/web/static_viewer.py +++ b/mitmproxy/tools/web/static_viewer.py @@ -65,7 +65,7 @@ def save_flows_content(path: pathlib.Path, flows: typing.Iterable[flow.Flow]) -> t = time.time() if message: description, lines, error = contentviews.get_message_content_view( - 'Auto', message + 'Auto', message, f ) else: description, lines = 'No content.', [] diff --git a/test/mitmproxy/addons/test_dumper.py b/test/mitmproxy/addons/test_dumper.py index 7a41c7b9..841e2a01 100644 --- a/test/mitmproxy/addons/test_dumper.py +++ b/test/mitmproxy/addons/test_dumper.py @@ -123,7 +123,7 @@ def test_echo_body(): d = dumper.Dumper(sio, sio_err) with taddons.context(d) as ctx: ctx.configure(d, flow_detail=3) - d._echo_message(f.response) + d._echo_message(f.response, f) t = sio.getvalue() assert "cut off" in t diff --git a/test/mitmproxy/contentviews/test_api.py b/test/mitmproxy/contentviews/test_api.py index 3fc06d7c..82fd0672 100644 --- a/test/mitmproxy/contentviews/test_api.py +++ b/test/mitmproxy/contentviews/test_api.py @@ -5,6 +5,7 @@ from mitmproxy import contentviews from mitmproxy.exceptions import ContentViewException from mitmproxy.net.http import Headers from mitmproxy.test import tutils +from mitmproxy.test import tflow class TestContentView(contentviews.View): @@ -60,21 +61,22 @@ def test_get_content_view(): def test_get_message_content_view(): + f = tflow.tflow() r = tutils.treq() - desc, lines, err = contentviews.get_message_content_view("raw", r) + desc, lines, err = contentviews.get_message_content_view("raw", r, f) assert desc == "Raw" - desc, lines, err = contentviews.get_message_content_view("unknown", r) + desc, lines, err = contentviews.get_message_content_view("unknown", r, f) assert desc == "Raw" r.encode("gzip") - desc, lines, err = contentviews.get_message_content_view("raw", r) + desc, lines, err = contentviews.get_message_content_view("raw", r, f) assert desc == "[decoded gzip] Raw" r.headers["content-encoding"] = "deflate" - desc, lines, err = contentviews.get_message_content_view("raw", r) + desc, lines, err = contentviews.get_message_content_view("raw", r, f) assert desc == "[cannot decode] Raw" r.content = None - desc, lines, err = contentviews.get_message_content_view("raw", r) + desc, lines, err = contentviews.get_message_content_view("raw", r, f) assert list(lines) == [[("error", "content missing")]] -- cgit v1.2.3