aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/examples/custom_contentviews.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/examples/custom_contentviews.py')
-rw-r--r--mitmproxy/examples/custom_contentviews.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/mitmproxy/examples/custom_contentviews.py b/mitmproxy/examples/custom_contentviews.py
new file mode 100644
index 00000000..17920e51
--- /dev/null
+++ b/mitmproxy/examples/custom_contentviews.py
@@ -0,0 +1,68 @@
+import string
+import lxml.html
+import lxml.etree
+from libmproxy import utils, contentviews
+
+
+class ViewPigLatin(contentviews.View):
+ name = "pig_latin_HTML"
+ prompt = ("pig latin HTML", "l")
+ content_types = ["text/html"]
+
+ def __call__(self, data, **metadata):
+ if utils.isXML(data):
+ parser = lxml.etree.HTMLParser(
+ strip_cdata=True,
+ remove_blank_text=True
+ )
+ d = lxml.html.fromstring(data, parser=parser)
+ docinfo = d.getroottree().docinfo
+
+ def piglify(src):
+ words = string.split(src)
+ ret = ''
+ for word in words:
+ idx = -1
+ while word[idx] in string.punctuation and (idx * -1) != len(word): idx -= 1
+ if word[0].lower() in 'aeiou':
+ if idx == -1:
+ ret += word[0:] + "hay"
+ else:
+ ret += word[0:len(word) + idx + 1] + "hay" + word[idx + 1:]
+ else:
+ if idx == -1:
+ ret += word[1:] + word[0] + "ay"
+ else:
+ ret += word[1:len(word) + idx + 1] + word[0] + "ay" + word[idx + 1:]
+ ret += ' '
+ return ret.strip()
+
+ def recurse(root):
+ if hasattr(root, 'text') and root.text:
+ root.text = piglify(root.text)
+ if hasattr(root, 'tail') and root.tail:
+ root.tail = piglify(root.tail)
+
+ if len(root):
+ for child in root:
+ recurse(child)
+
+ recurse(d)
+
+ s = lxml.etree.tostring(
+ d,
+ pretty_print=True,
+ doctype=docinfo.doctype
+ )
+ return "HTML", contentviews.format_text(s)
+
+
+pig_view = ViewPigLatin()
+
+
+def start(context, argv):
+ context.add_contentview(pig_view)
+
+
+def stop(context):
+ context.remove_contentview(pig_view)