diff options
-rw-r--r-- | mitmproxy/options.py | 4 | ||||
-rw-r--r-- | mitmproxy/optmanager.py | 31 | ||||
-rw-r--r-- | mitmproxy/tools/cmdline.py | 34 | ||||
-rw-r--r-- | mitmproxy/tools/dump.py | 2 | ||||
-rw-r--r-- | mitmproxy/tools/main.py | 6 | ||||
-rw-r--r-- | test/mitmproxy/test_optmanager.py | 10 |
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") |