aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <skkaushik212@gmail.com>2020-04-12 17:13:34 +0530
committerMaximilian Hils <git@maximilianhils.com>2020-04-19 12:49:09 +0200
commit454f1779f098396b46bc8fe53a9820926a284cd4 (patch)
treeb176d5a5203ac99c534071654d1af3a2dd649028
parentce50e8e52dc5316f9be29bc00d0dc72fc2b0af83 (diff)
downloadmitmproxy-454f1779f098396b46bc8fe53a9820926a284cd4.tar.gz
mitmproxy-454f1779f098396b46bc8fe53a9820926a284cd4.tar.bz2
mitmproxy-454f1779f098396b46bc8fe53a9820926a284cd4.zip
colorize json
-rw-r--r--mitmproxy/contentviews/json.py31
-rw-r--r--mitmproxy/tools/console/palettes.py23
-rw-r--r--test/mitmproxy/contentviews/test_json.py2
3 files changed, 52 insertions, 4 deletions
diff --git a/mitmproxy/contentviews/json.py b/mitmproxy/contentviews/json.py
index 15c624ad..dbe600aa 100644
--- a/mitmproxy/contentviews/json.py
+++ b/mitmproxy/contentviews/json.py
@@ -1,3 +1,4 @@
+import re
import json
from typing import Optional
@@ -9,8 +10,7 @@ def pretty_json(s: bytes) -> Optional[bytes]:
p = json.loads(s.decode('utf-8'))
except ValueError:
return None
- pretty = json.dumps(p, sort_keys=True, indent=4, ensure_ascii=False)
- return pretty.encode("utf8", "strict")
+ return p
class ViewJSON(base.View):
@@ -21,7 +21,30 @@ class ViewJSON(base.View):
"application/vnd.api+json"
]
+ @staticmethod
+ def _format(pj):
+ li = []
+ for chunk in json.JSONEncoder(indent=4, sort_keys=True, ensure_ascii=False).iterencode(pj):
+ k = re.split("\\n", chunk)
+ if(len(k) > 1):
+ if(len(k[0]) > 0):
+ li.append(('text', k[0]))
+ yield li
+ li = []
+ chunk = k[1]
+ else:
+ chunk = k[0]
+ if(re.match('^\s*\".*\"$', chunk)):
+ li.append(('json_string', chunk))
+ elif(re.match('\s*[0-9]+[.]{0,1}[0-9]*', chunk)):
+ li.append(('json_number', chunk))
+ elif(re.match('\s*true|null|false', chunk)):
+ li.append(('json_boolean', chunk))
+ else:
+ li.append(('text', chunk))
+ yield li
+
def __call__(self, data, **metadata):
pj = pretty_json(data)
- if pj:
- return "JSON", base.format_text(pj)
+ if pj is not None:
+ return "JSON", self._format(pj)
diff --git a/mitmproxy/tools/console/palettes.py b/mitmproxy/tools/console/palettes.py
index 6033ff25..683afa42 100644
--- a/mitmproxy/tools/console/palettes.py
+++ b/mitmproxy/tools/console/palettes.py
@@ -35,6 +35,9 @@ class Palette:
# Hex view
'offset',
+ # JSON view
+ 'json_string', 'json_number', 'json_boolean',
+
# Grid Editor
'focusfield', 'focusfield_error', 'field_error', 'editfield',
@@ -170,6 +173,11 @@ class LowDark(Palette):
# Hex view
offset = ('dark cyan', 'default'),
+ # JSON view
+ json_string = ('dark blue', 'default'),
+ json_number = ('light magenta', 'default'),
+ json_boolean = ('dark magenta', 'default'),
+
# Grid Editor
focusfield = ('black', 'light gray'),
focusfield_error = ('dark red', 'light gray'),
@@ -270,6 +278,11 @@ class LowLight(Palette):
# Hex view
offset = ('dark blue', 'default'),
+ # JSON view
+ json_string = ('dark blue', 'default'),
+ json_number = ('light magenta', 'default'),
+ json_boolean = ('dark magenta', 'default'),
+
# Grid Editor
focusfield = ('black', 'light gray'),
focusfield_error = ('dark red', 'light gray'),
@@ -380,6 +393,11 @@ class SolarizedLight(LowLight):
# Hex view
offset = (sol_cyan, 'default'),
+ # JSON view
+ json_string = (sol_cyan, 'default'),
+ json_number = (sol_blue, 'default'),
+ json_boolean = (sol_magenta, 'default'),
+
# Grid Editor
focusfield = (sol_base00, sol_base2),
focusfield_error = (sol_red, sol_base2),
@@ -454,6 +472,11 @@ class SolarizedDark(LowDark):
# Hex view
offset = (sol_cyan, 'default'),
+ # JSON view
+ json_string = (sol_cyan, 'default'),
+ json_number = (sol_blue, 'default'),
+ json_boolean = (sol_magenta, 'default'),
+
# Grid Editor
focusfield = (sol_base0, sol_base02),
focusfield_error = (sol_red, sol_base02),
diff --git a/test/mitmproxy/contentviews/test_json.py b/test/mitmproxy/contentviews/test_json.py
index 5e87b570..3f522b7f 100644
--- a/test/mitmproxy/contentviews/test_json.py
+++ b/test/mitmproxy/contentviews/test_json.py
@@ -14,3 +14,5 @@ def test_view_json():
assert v(b"{}")
assert not v(b"{")
assert v(b"[1, 2, 3, 4, 5]")
+ assert v(b'{"foo" : 3}')
+ assert v(b'{"foo": true, "nullvalue": null}')