aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/addons/core.py7
-rw-r--r--mitmproxy/optmanager.py3
-rw-r--r--mitmproxy/tools/cmdline.py79
-rw-r--r--mitmproxy/tools/main.py45
-rw-r--r--test/mitmproxy/test_proxy.py3
-rw-r--r--test/mitmproxy/tools/test_cmdline.py10
6 files changed, 23 insertions, 124 deletions
diff --git a/mitmproxy/addons/core.py b/mitmproxy/addons/core.py
index 8a2ea525..3de1638c 100644
--- a/mitmproxy/addons/core.py
+++ b/mitmproxy/addons/core.py
@@ -10,6 +10,13 @@ from mitmproxy.utils import human
class Core:
def configure(self, opts, updated):
+ if opts.add_upstream_certs_to_client_chain and not opts.upstream_cert:
+ raise exceptions.OptionsError(
+ "The no-upstream-cert and add-upstream-certs-to-client-chain "
+ "options are mutually exclusive. If no-upstream-cert is enabled "
+ "then the upstream certificate is not retrieved before generating "
+ "the client certificate chain."
+ )
if "body_size_limit" in updated and opts.body_size_limit:
try:
opts._processed["body_size_limit"] = human.parse_size(
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py
index 21e366c3..319fe622 100644
--- a/mitmproxy/optmanager.py
+++ b/mitmproxy/optmanager.py
@@ -162,6 +162,9 @@ class OptManager:
def keys(self):
return set(self._options.keys())
+ def __contains__(self, k):
+ return k in self._options
+
def reset(self):
"""
Restore defaults for all options.
diff --git a/mitmproxy/tools/cmdline.py b/mitmproxy/tools/cmdline.py
index ef99ba37..f3c3b6d0 100644
--- a/mitmproxy/tools/cmdline.py
+++ b/mitmproxy/tools/cmdline.py
@@ -1,7 +1,6 @@
import argparse
import os
-from mitmproxy import exceptions
from mitmproxy import options
from mitmproxy import version
@@ -13,82 +12,6 @@ class ParseException(Exception):
pass
-def get_common_options(args):
- if args.add_upstream_certs_to_client_chain and not args.upstream_cert:
- raise exceptions.OptionsError(
- "The no-upstream-cert and add-upstream-certs-to-client-chain "
- "options are mutually exclusive. If no-upstream-cert is enabled "
- "then the upstream certificate is not retrieved before generating "
- "the client certificate chain."
- )
-
- if args.quiet:
- args.verbose = 0
-
- return dict(
- onboarding=args.onboarding,
- onboarding_host=args.onboarding_host,
- onboarding_port=args.onboarding_port,
-
- anticache=args.anticache,
- anticomp=args.anticomp,
- client_replay=args.client_replay,
- replay_kill_extra=args.replay_kill_extra,
- no_server=args.no_server,
- refresh_server_playback=args.refresh_server_playback,
- server_replay_use_headers=args.server_replay_use_headers,
- rfile=args.rfile,
- replacements=args.replacements,
- replacement_files=args.replacement_files,
- setheaders=args.setheaders,
- keep_host_header=args.keep_host_header,
- server_replay=args.server_replay,
- scripts=args.scripts,
- stickycookie=args.stickycookie,
- stickyauth=args.stickyauth,
- stream_large_bodies=args.stream_large_bodies,
- showhost=args.showhost,
- streamfile=args.streamfile,
- verbosity=args.verbose,
- server_replay_nopop=args.server_replay_nopop,
- server_replay_ignore_content=args.server_replay_ignore_content,
- server_replay_ignore_params=args.server_replay_ignore_params,
- server_replay_ignore_payload_params=args.server_replay_ignore_payload_params,
- server_replay_ignore_host=args.server_replay_ignore_host,
-
- auth_nonanonymous = args.auth_nonanonymous,
- auth_singleuser = args.auth_singleuser,
- auth_htpasswd = args.auth_htpasswd,
- add_upstream_certs_to_client_chain = args.add_upstream_certs_to_client_chain,
- body_size_limit = args.body_size_limit,
- cadir = args.cadir,
- certs = args.certs,
- ciphers_client = args.ciphers_client,
- ciphers_server = args.ciphers_server,
- client_certs = args.client_certs,
- ignore_hosts = args.ignore_hosts,
- listen_host = args.listen_host,
- listen_port = args.listen_port,
- upstream_bind_address = args.upstream_bind_address,
- mode = args.mode,
- upstream_cert = args.upstream_cert,
- spoof_source_address = args.spoof_source_address,
-
- http2 = args.http2,
- http2_priority = args.http2_priority,
- websocket = args.websocket,
- rawtcp = args.rawtcp,
-
- upstream_auth = args.upstream_auth,
- ssl_version_client = args.ssl_version_client,
- ssl_version_server = args.ssl_version_server,
- ssl_insecure = args.ssl_insecure,
- ssl_verify_upstream_trusted_cadir = args.ssl_verify_upstream_trusted_cadir,
- ssl_verify_upstream_trusted_ca = args.ssl_verify_upstream_trusted_ca,
- tcp_hosts = args.tcp_hosts,
- )
-
-
def basic_options(parser, opts):
parser.add_argument(
'--version',
@@ -272,7 +195,7 @@ def mitmdump(opts):
opts.make_parser(parser, "keepserving")
opts.make_parser(parser, "flow_detail", metavar = "LEVEL")
parser.add_argument(
- 'filter',
+ 'filter_args',
nargs="...",
help="""
Filter view expression, used to only show flows that match a certain filter.
diff --git a/mitmproxy/tools/main.py b/mitmproxy/tools/main.py
index c0293f28..a231c421 100644
--- a/mitmproxy/tools/main.py
+++ b/mitmproxy/tools/main.py
@@ -38,6 +38,14 @@ def process_options(parser, options, args):
if args.version:
print(debug.dump_system_info())
sys.exit(0)
+ if args.quiet:
+ args.flow_detail = 0
+
+ adict = {}
+ for n in dir(args):
+ if n in options:
+ adict[n] = getattr(args, n)
+ options.merge(adict)
debug.register_info_dumpers()
pconf = config.ProxyConfig(options)
@@ -67,21 +75,6 @@ def mitmproxy(args=None): # pragma: no cover
try:
console_options.load_paths(args.conf)
- console_options.merge(cmdline.get_common_options(args))
- console_options.merge(
- dict(
- console_palette = args.console_palette,
- console_palette_transparent = args.console_palette_transparent,
- console_eventlog = args.console_eventlog,
- console_focus_follow = args.console_focus_follow,
- console_mouse = args.console_mouse,
- console_order = args.console_order,
-
- filter = args.filter,
- intercept = args.intercept,
- )
- )
-
server = process_options(parser, console_options, args)
m = console.master.ConsoleMaster(console_options, server)
except exceptions.OptionsError as e:
@@ -101,21 +94,9 @@ def mitmdump(args=None): # pragma: no cover
dump_options = options.Options()
parser = cmdline.mitmdump(dump_options)
args = parser.parse_args(args)
- if args.quiet:
- args.flow_detail = 0
-
master = None
try:
dump_options.load_paths(args.conf)
- dump_options.merge(cmdline.get_common_options(args))
- dump_options.merge(
- dict(
- flow_detail = args.flow_detail,
- keepserving = args.keepserving,
- filtstr = " ".join(args.filter) if args.filter else None,
- )
- )
-
server = process_options(parser, dump_options, args)
master = dump.DumpMaster(dump_options, server)
@@ -145,16 +126,6 @@ def mitmweb(args=None): # pragma: no cover
try:
web_options.load_paths(args.conf)
- web_options.merge(cmdline.get_common_options(args))
- web_options.merge(
- dict(
- intercept = args.intercept,
- web_open_browser = args.web_open_browser,
- web_debug = args.web_debug,
- web_iface = args.web_iface,
- web_port = args.web_port,
- )
- )
server = process_options(parser, web_options, args)
m = web.master.WebMaster(web_options, server)
except exceptions.OptionsError as e:
diff --git a/test/mitmproxy/test_proxy.py b/test/mitmproxy/test_proxy.py
index 784a7d84..6afda18c 100644
--- a/test/mitmproxy/test_proxy.py
+++ b/test/mitmproxy/test_proxy.py
@@ -6,6 +6,7 @@ import pytest
from mitmproxy.tools import cmdline
+from mitmproxy.tools import main
from mitmproxy import options
from mitmproxy.proxy import ProxyConfig
from mitmproxy.proxy.server import DummyServer, ProxyServer, ConnectionHandler
@@ -33,7 +34,7 @@ class TestProcessProxyOptions:
opts = options.Options()
cmdline.common_options(parser, opts)
args = parser.parse_args(args=args)
- opts.merge(cmdline.get_common_options(args))
+ main.process_options(parser, opts, args)
pconf = config.ProxyConfig(opts)
return parser, pconf
diff --git a/test/mitmproxy/tools/test_cmdline.py b/test/mitmproxy/tools/test_cmdline.py
index bae68f83..65cfeb07 100644
--- a/test/mitmproxy/tools/test_cmdline.py
+++ b/test/mitmproxy/tools/test_cmdline.py
@@ -1,5 +1,6 @@
import argparse
from mitmproxy.tools import cmdline
+from mitmproxy.tools import main
from mitmproxy import options
@@ -8,14 +9,7 @@ def test_common():
opts = options.Options()
cmdline.common_options(parser, opts)
args = parser.parse_args(args=[])
-
- assert cmdline.get_common_options(args)
-
- args.stickycookie = "foo"
- args.stickyauth = "foo"
- v = cmdline.get_common_options(args)
- assert v["stickycookie"] == "foo"
- assert v["stickyauth"] == "foo"
+ assert main.process_options(parser, opts, args)
def test_mitmproxy():