aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/tools
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/tools')
-rw-r--r--mitmproxy/tools/cmdline.py62
-rw-r--r--mitmproxy/tools/console/options.py10
2 files changed, 13 insertions, 59 deletions
diff --git a/mitmproxy/tools/cmdline.py b/mitmproxy/tools/cmdline.py
index 1d5bd017..bb11b9c2 100644
--- a/mitmproxy/tools/cmdline.py
+++ b/mitmproxy/tools/cmdline.py
@@ -1,5 +1,4 @@
import argparse
-import re
import os
from mitmproxy import exceptions
@@ -41,40 +40,6 @@ def _parse_hook(s):
return patt, a, b
-def parse_replace_hook(s):
- """
- Returns a (pattern, regex, replacement) tuple.
-
- The general form for a replacement hook is as follows:
-
- /patt/regex/replacement
-
- The first character specifies the separator. Example:
-
- :~q:foo:bar
-
- If only two clauses are specified, the pattern is set to match
- universally (i.e. ".*"). Example:
-
- /foo/bar/
-
- Clauses are parsed from left to right. Extra separators are taken to be
- part of the final clause. For instance, the replacement clause below is
- "foo/bar/":
-
- /one/two/foo/bar/
-
- Checks that pattern and regex are both well-formed. Raises
- ParseException on error.
- """
- patt, regex, replacement = _parse_hook(s)
- try:
- re.compile(regex)
- except re.error as e:
- raise ParseException("Malformed replacement regex: %s" % str(e))
- return patt, regex, replacement
-
-
def parse_setheader(s):
"""
Returns a (pattern, header, value) tuple.
@@ -116,26 +81,6 @@ def get_common_options(args):
if stream_large_bodies:
stream_large_bodies = human.parse_size(stream_large_bodies)
- reps = []
- for i in args.replace or []:
- try:
- p = parse_replace_hook(i)
- except ParseException as e:
- raise exceptions.OptionsError(e)
- reps.append(p)
- for i in args.replace_file or []:
- try:
- patt, rex, path = parse_replace_hook(i)
- except ParseException as e:
- raise exceptions.OptionsError(e)
- try:
- v = open(path, "rb").read()
- except IOError as e:
- raise exceptions.OptionsError(
- "Could not read replace file: %s" % path
- )
- reps.append((patt, rex, v))
-
setheaders = []
for i in args.setheader or []:
try:
@@ -224,7 +169,8 @@ def get_common_options(args):
refresh_server_playback=not args.norefresh,
server_replay_use_headers=args.server_replay_use_headers,
rfile=args.rfile,
- replacements=reps,
+ replacements=args.replacements,
+ replacement_files=args.replacement_files,
setheaders=setheaders,
server_replay=args.server_replay,
scripts=args.scripts,
@@ -676,13 +622,13 @@ def replacements(parser):
)
group.add_argument(
"--replace",
- action="append", type=str, dest="replace",
+ action="append", type=str, dest="replacements",
metavar="PATTERN",
help="Replacement pattern."
)
group.add_argument(
"--replace-from-file",
- action="append", type=str, dest="replace_file",
+ action="append", type=str, dest="replacement_files",
metavar="PATH",
help="""
Replacement pattern, where the replacement clause is a path to a
diff --git a/mitmproxy/tools/console/options.py b/mitmproxy/tools/console/options.py
index 8c953e8e..e88006fe 100644
--- a/mitmproxy/tools/console/options.py
+++ b/mitmproxy/tools/console/options.py
@@ -6,6 +6,8 @@ from mitmproxy.tools.console import grideditor
from mitmproxy.tools.console import select
from mitmproxy.tools.console import signals
+from mitmproxy.addons import replace
+
footer = [
('heading_key', "enter/space"), ":toggle ",
('heading_key', "C"), ":clear all ",
@@ -215,10 +217,16 @@ class Options(urwid.WidgetWrap):
)
def replacepatterns(self):
+ data = []
+ for d in self.master.options.replacements:
+ if isinstance(d, str):
+ data.append(replace.parse_hook(d))
+ else:
+ data.append(d)
self.master.view_grideditor(
grideditor.ReplaceEditor(
self.master,
- self.master.options.replacements,
+ data,
self.master.options.setter("replacements")
)
)