aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2015-09-11 12:26:52 +0200
committerMaximilian Hils <git@maximilianhils.com>2015-09-11 12:26:52 +0200
commit625a719eb1237556d4aa2ed3e0088634324c0ad9 (patch)
treef58290d4d164629170560bc793e7cf976b65e8bd
parent7c186a4edbb0c6bc1f471d0db62dfc60008160a2 (diff)
downloadmitmproxy-625a719eb1237556d4aa2ed3e0088634324c0ad9.tar.gz
mitmproxy-625a719eb1237556d4aa2ed3e0088634324c0ad9.tar.bz2
mitmproxy-625a719eb1237556d4aa2ed3e0088634324c0ad9.zip
completely remove console from contentviews
-rw-r--r--libmproxy/console/flowview.py21
-rw-r--r--libmproxy/contentview.py48
-rw-r--r--libmproxy/exceptions.py4
3 files changed, 32 insertions, 41 deletions
diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py
index e33d4c43..4946ed9c 100644
--- a/libmproxy/console/flowview.py
+++ b/libmproxy/console/flowview.py
@@ -1,6 +1,7 @@
from __future__ import absolute_import
import os
import sys
+import traceback
import urwid
from netlib import odict
@@ -10,6 +11,7 @@ from . import common, grideditor, signals, searchable, tabs
from . import flowdetailview
from .. import utils, controller, contentview
from ..models import HTTPRequest, HTTPResponse, decoded
+from ..exceptions import ContentViewException
class SearchError(Exception):
@@ -180,16 +182,29 @@ class FlowView(tabs.Tabs):
else:
limit = contentview.VIEW_CUTOFF
description, text_objects = cache.get(
- contentview.get_content_view,
+ self._get_content_view,
viewmode,
conn.headers,
conn.content,
limit,
- isinstance(conn, HTTPRequest),
- signals.add_event
+ isinstance(conn, HTTPRequest)
)
return (description, text_objects)
+ def _get_content_view(self, viewmode, headers, content, limit, is_request):
+ try:
+ return contentview.get_content_view(
+ viewmode, headers, content, limit, is_request
+ )
+ except ContentViewException:
+ s = "Content viewer failed: \n" + traceback.format_exc()
+ signals.add_event(s, "error")
+ msg, view = contentview.get_content_view(
+ viewmode, headers, content, limit, is_request
+ )
+ msg = msg.replace("Raw", "Couldn't parse: falling back to Raw")
+ return msg, view
+
def viewmode_get(self):
override = self.state.get_flow_setting(
self.flow,
diff --git a/libmproxy/contentview.py b/libmproxy/contentview.py
index a9b6cf95..1b41066b 100644
--- a/libmproxy/contentview.py
+++ b/libmproxy/contentview.py
@@ -3,13 +3,15 @@ import cStringIO
import json
import logging
import subprocess
-import traceback
import lxml.html
import lxml.etree
from PIL import Image
from PIL.ExifTags import TAGS
import html2text
+import six
+import sys
+from libmproxy.exceptions import ContentViewException
import netlib.utils
from . import utils
@@ -79,36 +81,6 @@ def trailer(content, limit):
)
-"""
-def _view_text(content, total, limit):
- ""
- Generates a body for a chunk of text.
- ""
- txt = []
- for i in netlib.utils.cleanBin(content).splitlines():
- txt.append(
- urwid.Text(("text", i), wrap="any")
- )
- trailer(total, txt, limit)
- return txt
-
-
-def trailer(clen, txt, limit):
- rem = clen - limit
- if rem > 0:
- txt.append(urwid.Text(""))
- txt.append(
- urwid.Text(
- [
- ("highlight", "... %s of data not shown. Press " % netlib.utils.pretty_size(rem)),
- ("key", "f"),
- ("highlight", " to load all data.")
- ]
- )
- )
-"""
-
-
class View(object):
name = None
prompt = ()
@@ -535,7 +507,7 @@ def get(name):
return i
-def get_content_view(viewmode, headers, content, limit, is_request, log=None):
+def get_content_view(viewmode, headers, content, limit, is_request):
"""
Returns:
A (msg, body) tuple.
@@ -559,12 +531,12 @@ def get_content_view(viewmode, headers, content, limit, is_request, log=None):
try:
ret = viewmode(headers, content, limit)
# Third-party viewers can fail in unexpected ways...
- except Exception:
- if log:
- s = traceback.format_exc()
- s = "Content viewer failed: \n" + s
- log(s, "error")
- ret = None
+ except Exception as e:
+ six.reraise(
+ ContentViewException,
+ ContentViewException(str(e)),
+ sys.exc_info()[2]
+ )
if not ret:
ret = get("Raw")(headers, content, limit)
msg.append("Couldn't parse: falling back to Raw")
diff --git a/libmproxy/exceptions.py b/libmproxy/exceptions.py
index 0e11c136..03ddcb3d 100644
--- a/libmproxy/exceptions.py
+++ b/libmproxy/exceptions.py
@@ -51,3 +51,7 @@ class InvalidCredentials(HttpException):
class ServerException(ProxyException):
pass
+
+
+class ContentViewException(ProxyException):
+ pass