aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/options.py4
-rw-r--r--mitmproxy/optmanager.py31
-rw-r--r--mitmproxy/tools/cmdline.py34
-rw-r--r--mitmproxy/tools/dump.py2
-rw-r--r--mitmproxy/tools/main.py6
-rw-r--r--test/mitmproxy/test_optmanager.py10
6 files changed, 48 insertions, 39 deletions
diff --git a/mitmproxy/options.py b/mitmproxy/options.py
index a754325a..08d97cad 100644
--- a/mitmproxy/options.py
+++ b/mitmproxy/options.py
@@ -86,8 +86,8 @@ class Options(optmanager.OptManager):
"Continue serving after client playback or file read."
)
self.add_option(
- "no_server", False, bool,
- "Don't start a proxy server."
+ "server", True, bool,
+ "Start a proxy server."
)
self.add_option(
"server_replay_nopop", False, bool,
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py
index 8dddd11a..b05e78eb 100644
--- a/mitmproxy/optmanager.py
+++ b/mitmproxy/optmanager.py
@@ -362,18 +362,35 @@ class OptManager:
else: # pragma: no cover
raise NotImplementedError("Unsupported option type: %s", o.typespec)
- def make_parser(self, parser, optname, metavar=None):
+ def make_parser(self, parser, optname, metavar=None, short=None):
o = self._options[optname]
- f = optname.replace("_", "-")
+
+ def mkf(l, s):
+ l = l.replace("_", "-")
+ f = ["--%s" % l]
+ if s:
+ f.append("-" + s)
+ return f
+
+ flags = mkf(optname, short)
+
if o.typespec == bool:
g = parser.add_mutually_exclusive_group(required=False)
+ onf = mkf(optname, None)
+ offf = mkf("no-" + optname, None)
+ # The short option for a bool goes to whatever is NOT the default
+ if short:
+ if o.default:
+ offf = mkf("no-" + optname, short)
+ else:
+ onf = mkf(optname, short)
g.add_argument(
- "--no-%s" % f,
+ *offf,
action="store_false",
dest=optname,
)
g.add_argument(
- "--%s" % f,
+ *onf,
action="store_true",
dest=optname,
help=o.help
@@ -381,7 +398,7 @@ class OptManager:
parser.set_defaults(**{optname: None})
elif o.typespec in (int, typing.Optional[int]):
parser.add_argument(
- "--%s" % f,
+ *flags,
action="store",
type=int,
dest=optname,
@@ -390,7 +407,7 @@ class OptManager:
)
elif o.typespec in (str, typing.Optional[str]):
parser.add_argument(
- "--%s" % f,
+ *flags,
action="store",
type=str,
dest=optname,
@@ -400,7 +417,7 @@ class OptManager:
)
elif o.typespec == typing.Sequence[str]:
parser.add_argument(
- "--%s" % f,
+ *flags,
action="append",
type=str,
dest=optname,
diff --git a/mitmproxy/tools/cmdline.py b/mitmproxy/tools/cmdline.py
index fcf9ecaf..aaefd10a 100644
--- a/mitmproxy/tools/cmdline.py
+++ b/mitmproxy/tools/cmdline.py
@@ -42,7 +42,6 @@ def common_options(parser, opts):
are emptied.
"""
)
-
parser.add_argument(
"-q", "--quiet",
action="store_true", dest="quiet",
@@ -55,59 +54,50 @@ def common_options(parser, opts):
)
# Basic options
- opts.make_parser(parser, "mode")
+ opts.make_parser(parser, "mode", short="m")
opts.make_parser(parser, "anticache")
opts.make_parser(parser, "showhost")
- opts.make_parser(parser, "rfile")
- opts.make_parser(parser, "scripts", metavar="SCRIPT")
+ opts.make_parser(parser, "rfile", metavar="PATH", short="r")
+ opts.make_parser(parser, "scripts", metavar="SCRIPT", short="s")
opts.make_parser(parser, "stickycookie", metavar="FILTER")
opts.make_parser(parser, "stickyauth", metavar="FILTER")
- opts.make_parser(parser, "streamfile")
+ opts.make_parser(parser, "streamfile", metavar="PATH", short="w")
opts.make_parser(parser, "anticomp")
# Proxy options
group = parser.add_argument_group("Proxy Options")
opts.make_parser(group, "listen_host", metavar="HOST")
+ opts.make_parser(group, "listen_port", metavar="PORT", short="p")
+ opts.make_parser(group, "server", short="n")
opts.make_parser(group, "ignore_hosts", metavar="HOST")
opts.make_parser(group, "tcp_hosts", metavar="HOST")
- opts.make_parser(group, "no_server")
- opts.make_parser(group, "listen_port", metavar="PORT")
opts.make_parser(group, "upstream_auth", metavar="USER:PASS")
+ opts.make_parser(group, "proxyauth", metavar="SPEC")
opts.make_parser(group, "rawtcp")
# Proxy SSL options
group = parser.add_argument_group("SSL")
opts.make_parser(group, "certs", metavar="SPEC")
- opts.make_parser(group, "ssl_insecure")
+ opts.make_parser(group, "ssl_insecure", short="k")
# Client replay
group = parser.add_argument_group("Client Replay")
- opts.make_parser(group, "client_replay", metavar="PATH")
+ opts.make_parser(group, "client_replay", metavar="PATH", short="C")
# Server replay
group = parser.add_argument_group("Server Replay")
- opts.make_parser(group, "server_replay", metavar="PATH")
+ opts.make_parser(group, "server_replay", metavar="PATH", short="S")
opts.make_parser(group, "replay_kill_extra")
opts.make_parser(group, "server_replay_nopop")
# Replacements
group = parser.add_argument_group("Replacements")
- opts.make_parser(group, "replacements", metavar="PATTERN")
+ opts.make_parser(group, "replacements", metavar="PATTERN", short="R")
opts.make_parser(group, "replacement_files", metavar="PATTERN")
# Set headers
group = parser.add_argument_group("Set Headers")
- opts.make_parser(group, "setheaders", metavar="PATTERN")
-
- # Proxy authentication
- group = parser.add_argument_group(
- "Proxy Authentication",
- """
- Specify which users are allowed to access the proxy and the method
- used for authenticating them.
- """
- ).add_mutually_exclusive_group()
- opts.make_parser(group, "proxyauth", metavar="SPEC")
+ opts.make_parser(group, "setheaders", metavar="PATTERN", short="H")
def mitmproxy(opts):
diff --git a/mitmproxy/tools/dump.py b/mitmproxy/tools/dump.py
index f64f2241..e70ce2f9 100644
--- a/mitmproxy/tools/dump.py
+++ b/mitmproxy/tools/dump.py
@@ -23,7 +23,7 @@ class DumpMaster(master.Master):
if with_dumper:
self.addons.add(dumper.Dumper())
- if not self.options.no_server:
+ if self.options.server:
self.add_log(
"Proxy server listening at http://{}:{}".format(server.address[0], server.address[1]),
"info"
diff --git a/mitmproxy/tools/main.py b/mitmproxy/tools/main.py
index 7c1e7b32..17c1abbb 100644
--- a/mitmproxy/tools/main.py
+++ b/mitmproxy/tools/main.py
@@ -55,14 +55,14 @@ def process_options(parser, opts, args):
opts.merge(adict)
pconf = config.ProxyConfig(opts)
- if opts.no_server:
- return server.DummyServer(pconf)
- else:
+ if opts.server:
try:
return server.ProxyServer(pconf)
except exceptions.ServerException as v:
print(str(v), file=sys.stderr)
sys.exit(1)
+ else:
+ return server.DummyServer(pconf)
def run(MasterKlass, args): # pragma: no cover
diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py
index d6ce87e6..ba31c750 100644
--- a/test/mitmproxy/test_optmanager.py
+++ b/test/mitmproxy/test_optmanager.py
@@ -294,6 +294,7 @@ class TTypes(optmanager.OptManager):
self.add_option("str", "str", str, "help")
self.add_option("optstr", "optstr", typing.Optional[str], "help", "help")
self.add_option("bool", False, bool, "help")
+ self.add_option("bool_on", True, bool, "help")
self.add_option("int", 0, int, "help")
self.add_option("optint", 0, typing.Optional[int], "help")
self.add_option("seqstr", [], typing.Sequence[str], "help")
@@ -303,10 +304,11 @@ class TTypes(optmanager.OptManager):
def test_make_parser():
parser = argparse.ArgumentParser()
opts = TTypes()
- opts.make_parser(parser, "str")
- opts.make_parser(parser, "bool")
- opts.make_parser(parser, "int")
- opts.make_parser(parser, "seqstr")
+ opts.make_parser(parser, "str", short="a")
+ opts.make_parser(parser, "bool", short="b")
+ opts.make_parser(parser, "int", short="c")
+ opts.make_parser(parser, "seqstr", short="d")
+ opts.make_parser(parser, "bool_on", short="e")
with pytest.raises(ValueError):
opts.make_parser(parser, "unknown")