minor fixes

This commit is contained in:
Maximilian Hils 2016-07-21 20:33:24 -07:00
parent 9f0889d541
commit 9b40e1072c
2 changed files with 18 additions and 19 deletions

View File

@ -6,6 +6,7 @@ import sys
import traceback import traceback
import urwid import urwid
from typing import Optional, Union # noqa
from mitmproxy import contentviews from mitmproxy import contentviews
from mitmproxy import controller from mitmproxy import controller
@ -105,7 +106,8 @@ footer = [
class FlowViewHeader(urwid.WidgetWrap): class FlowViewHeader(urwid.WidgetWrap):
def __init__(self, master, f): def __init__(self, master, f):
self.master, self.flow = master, f self.master = master # type: "mitmproxy.console.master.ConsoleMaster"
self.flow = f # type: models.HTTPFlow
self._w = common.format_flow( self._w = common.format_flow(
f, f,
False, False,
@ -530,13 +532,6 @@ class FlowView(tabs.Tabs):
) )
signals.flow_change.send(self, flow = self.flow) signals.flow_change.send(self, flow = self.flow)
def delete_body(self, t):
if self.tab_offset == TAB_REQ:
self.flow.request.content = None
else:
self.flow.response.content = None
signals.flow_change.send(self, flow = self.flow)
def keypress(self, size, key): def keypress(self, size, key):
key = super(self.__class__, self).keypress(size, key) key = super(self.__class__, self).keypress(size, key)
@ -545,6 +540,8 @@ class FlowView(tabs.Tabs):
return return
key = common.shortcuts(key) key = common.shortcuts(key)
conn = None # type: Optional[Union[models.HTTPRequest, models.HTTPResponse]]
if self.tab_offset == TAB_REQ: if self.tab_offset == TAB_REQ:
conn = self.flow.request conn = self.flow.request
elif self.tab_offset == TAB_RESP: elif self.tab_offset == TAB_RESP:
@ -691,15 +688,8 @@ class FlowView(tabs.Tabs):
args = (scope, self.flow, common.copy_to_clipboard_or_prompt) args = (scope, self.flow, common.copy_to_clipboard_or_prompt)
) )
elif key == "x": elif key == "x":
signals.status_prompt_onekey.send( conn.content = None
prompt = "Delete body", signals.flow_change.send(self, flow=self.flow)
keys = (
("completely", "c"),
("mark as missing", "m"),
),
callback = self.delete_body
)
key = None
elif key == "v": elif key == "v":
if conn.raw_content: if conn.raw_content:
t = conn.headers.get("content-type") t = conn.headers.get("content-type")
@ -713,7 +703,9 @@ class FlowView(tabs.Tabs):
self.flow.backup() self.flow.backup()
e = conn.headers.get("content-encoding", "identity") e = conn.headers.get("content-encoding", "identity")
if e != "identity": if e != "identity":
if not conn.decode(): try:
conn.decode()
except ValueError:
signals.status_message.send( signals.status_message.send(
message = "Could not decode - invalid data?" message = "Could not decode - invalid data?"
) )

View File

@ -20,6 +20,8 @@ import logging
import subprocess import subprocess
import sys import sys
from typing import Mapping # noqa
import html2text import html2text
import lxml.etree import lxml.etree
import lxml.html import lxml.html
@ -76,6 +78,7 @@ def pretty_json(s):
def format_dict(d): def format_dict(d):
# type: (Mapping[Union[str,bytes], Union[str,bytes]]) -> Generator[Tuple[Union[str,bytes], Union[str,bytes]]]
""" """
Helper function that transforms the given dictionary into a list of Helper function that transforms the given dictionary into a list of
("key", key ) ("key", key )
@ -85,7 +88,7 @@ def format_dict(d):
max_key_len = max(len(k) for k in d.keys()) max_key_len = max(len(k) for k in d.keys())
max_key_len = min(max_key_len, KEY_MAX) max_key_len = min(max_key_len, KEY_MAX)
for key, value in d.items(): for key, value in d.items():
key += ":" key += b":" if isinstance(key, bytes) else u":"
key = key.ljust(max_key_len + 2) key = key.ljust(max_key_len + 2)
yield [ yield [
("header", key), ("header", key),
@ -278,6 +281,10 @@ class ViewURLEncoded(View):
content_types = ["application/x-www-form-urlencoded"] content_types = ["application/x-www-form-urlencoded"]
def __call__(self, data, **metadata): def __call__(self, data, **metadata):
try:
data = data.decode("ascii","strict")
except ValueError:
return None
d = url.decode(data) d = url.decode(data)
return "URLEncoded form", format_dict(multidict.MultiDict(d)) return "URLEncoded form", format_dict(multidict.MultiDict(d))