aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/libmproxy/console/help.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/libmproxy/console/help.py')
-rw-r--r--mitmproxy/libmproxy/console/help.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/mitmproxy/libmproxy/console/help.py b/mitmproxy/libmproxy/console/help.py
new file mode 100644
index 00000000..0c264ebf
--- /dev/null
+++ b/mitmproxy/libmproxy/console/help.py
@@ -0,0 +1,117 @@
+from __future__ import absolute_import
+
+import urwid
+
+from . import common, signals
+from .. import filt, version
+
+footer = [
+ ("heading", 'mitmproxy v%s ' % version.VERSION),
+ ('heading_key', "q"), ":back ",
+]
+
+
+class HelpView(urwid.ListBox):
+
+ def __init__(self, help_context):
+ self.help_context = help_context or []
+ urwid.ListBox.__init__(
+ self,
+ self.helptext()
+ )
+
+ def helptext(self):
+ text = []
+ text.append(urwid.Text([("head", "This view:\n")]))
+ text.extend(self.help_context)
+
+ text.append(urwid.Text([("head", "\n\nMovement:\n")]))
+ keys = [
+ ("j, k", "down, up"),
+ ("h, l", "left, right (in some contexts)"),
+ ("g, G", "go to beginning, end"),
+ ("space", "page down"),
+ ("pg up/down", "page up/down"),
+ ("ctrl+b/ctrl+f", "page up/down"),
+ ("arrows", "up, down, left, right"),
+ ]
+ text.extend(
+ common.format_keyvals(
+ keys,
+ key="key",
+ val="text",
+ indent=4))
+
+ text.append(urwid.Text([("head", "\n\nGlobal keys:\n")]))
+ keys = [
+ ("c", "client replay of HTTP requests"),
+ ("i", "set interception pattern"),
+ ("o", "options"),
+ ("q", "quit / return to previous page"),
+ ("Q", "quit without confirm prompt"),
+ ("S", "server replay of HTTP responses"),
+ ]
+ text.extend(
+ common.format_keyvals(keys, key="key", val="text", indent=4)
+ )
+
+ text.append(urwid.Text([("head", "\n\nFilter expressions:\n")]))
+ f = []
+ for i in filt.filt_unary:
+ f.append(
+ ("~%s" % i.code, i.help)
+ )
+ for i in filt.filt_rex:
+ f.append(
+ ("~%s regex" % i.code, i.help)
+ )
+ for i in filt.filt_int:
+ f.append(
+ ("~%s int" % i.code, i.help)
+ )
+ f.sort()
+ f.extend(
+ [
+ ("!", "unary not"),
+ ("&", "and"),
+ ("|", "or"),
+ ("(...)", "grouping"),
+ ]
+ )
+ text.extend(common.format_keyvals(f, key="key", val="text", indent=4))
+
+ text.append(
+ urwid.Text(
+ [
+ "\n",
+ ("text", " Regexes are Python-style.\n"),
+ ("text", " Regexes can be specified as quoted strings.\n"),
+ ("text", " Header matching (~h, ~hq, ~hs) is against a string of the form \"name: value\".\n"),
+ ("text", " Expressions with no operators are regex matches against URL.\n"),
+ ("text", " Default binary operator is &.\n"),
+ ("head", "\n Examples:\n"),
+ ]
+ )
+ )
+ examples = [
+ ("google\.com", "Url containing \"google.com"),
+ ("~q ~b test", "Requests where body contains \"test\""),
+ ("!(~q & ~t \"text/html\")", "Anything but requests with a text/html content type."),
+ ]
+ text.extend(
+ common.format_keyvals(examples, key="key", val="text", indent=4)
+ )
+ return text
+
+ def keypress(self, size, key):
+ key = common.shortcuts(key)
+ if key == "q":
+ signals.pop_view_state.send(self)
+ return None
+ elif key == "?":
+ key = None
+ elif key == "g":
+ self.set_focus(0)
+ elif key == "G":
+ self.set_focus(len(self.body.contents))
+ return urwid.ListBox.keypress(self, size, key)