aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/libmproxy/contrib/jsbeautifier/unpackers/urlencode.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/libmproxy/contrib/jsbeautifier/unpackers/urlencode.py')
-rw-r--r--mitmproxy/libmproxy/contrib/jsbeautifier/unpackers/urlencode.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/mitmproxy/libmproxy/contrib/jsbeautifier/unpackers/urlencode.py b/mitmproxy/libmproxy/contrib/jsbeautifier/unpackers/urlencode.py
new file mode 100644
index 00000000..72d2bd1c
--- /dev/null
+++ b/mitmproxy/libmproxy/contrib/jsbeautifier/unpackers/urlencode.py
@@ -0,0 +1,34 @@
+#
+# Trivial bookmarklet/escaped script detector for the javascript beautifier
+# written by Einar Lielmanis <einar@jsbeautifier.org>
+# rewritten in Python by Stefano Sanfilippo <a.little.coder@gmail.com>
+#
+# Will always return valid javascript: if `detect()` is false, `code` is
+# returned, unmodified.
+#
+# usage:
+#
+# some_string = urlencode.unpack(some_string)
+#
+
+"""Bookmarklet/escaped script unpacker."""
+
+# Python 2 retrocompatibility
+# pylint: disable=F0401
+# pylint: disable=E0611
+try:
+ from urllib import unquote_plus
+except ImportError:
+ from urllib.parse import unquote_plus
+
+PRIORITY = 0
+
+def detect(code):
+ """Detects if a scriptlet is urlencoded."""
+ # the fact that script doesn't contain any space, but has %20 instead
+ # should be sufficient check for now.
+ return ' ' not in code and ('%20' in code or code.count('%') > 3)
+
+def unpack(code):
+ """URL decode `code` source string."""
+ return unquote_plus(code) if detect(code) else code