From 63179d97511519ce0ba4384b2c6849ba96748d88 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Wed, 8 Mar 2017 15:17:07 +0100 Subject: core -> core_option_validation longer, but much clearer for devs who are unfamiliar with the codebase. --- mitmproxy/addons/__init__.py | 4 +- mitmproxy/addons/core.py | 45 ---------------------- mitmproxy/addons/core_option_validation.py | 45 ++++++++++++++++++++++ test/mitmproxy/addons/test_core.py | 43 --------------------- .../addons/test_core_option_validation.py | 43 +++++++++++++++++++++ 5 files changed, 90 insertions(+), 90 deletions(-) delete mode 100644 mitmproxy/addons/core.py create mode 100644 mitmproxy/addons/core_option_validation.py delete mode 100644 test/mitmproxy/addons/test_core.py create mode 100644 test/mitmproxy/addons/test_core_option_validation.py diff --git a/mitmproxy/addons/__init__.py b/mitmproxy/addons/__init__.py index 1bf89bbb..16510640 100644 --- a/mitmproxy/addons/__init__.py +++ b/mitmproxy/addons/__init__.py @@ -3,7 +3,7 @@ from mitmproxy.addons import anticomp from mitmproxy.addons import check_alpn from mitmproxy.addons import check_ca from mitmproxy.addons import clientplayback -from mitmproxy.addons import core +from mitmproxy.addons import core_option_validation from mitmproxy.addons import disable_h2c_upgrade from mitmproxy.addons import onboarding from mitmproxy.addons import proxyauth @@ -20,7 +20,7 @@ from mitmproxy.addons import upstream_auth def default_addons(): return [ - core.Core(), + core_option_validation.CoreOptionValidation(), anticache.AntiCache(), anticomp.AntiComp(), check_alpn.CheckALPN(), diff --git a/mitmproxy/addons/core.py b/mitmproxy/addons/core.py deleted file mode 100644 index 4c6a5516..00000000 --- a/mitmproxy/addons/core.py +++ /dev/null @@ -1,45 +0,0 @@ -""" - The core addon is responsible for verifying core settings that are not - checked by other addons. -""" -from mitmproxy import exceptions -from mitmproxy import platform -from mitmproxy.net import server_spec -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( - opts.body_size_limit - ) - except ValueError as e: - raise exceptions.OptionsError( - "Invalid body size limit specification: %s" % - opts.body_size_limit - ) - if "mode" in updated: - mode = opts.mode - if mode.startswith("reverse:") or mode.startswith("upstream:"): - try: - server_spec.parse_with_mode(mode) - except ValueError as e: - raise exceptions.OptionsError(str(e)) from e - elif mode == "transparent": - if not platform.original_addr: - raise exceptions.OptionsError( - "Transparent mode not supported on this platform." - ) - elif mode not in ["regular", "socks5"]: - raise exceptions.OptionsError( - "Invalid mode specification: %s" % mode - ) diff --git a/mitmproxy/addons/core_option_validation.py b/mitmproxy/addons/core_option_validation.py new file mode 100644 index 00000000..fd5f2788 --- /dev/null +++ b/mitmproxy/addons/core_option_validation.py @@ -0,0 +1,45 @@ +""" + The core addon is responsible for verifying core settings that are not + checked by other addons. +""" +from mitmproxy import exceptions +from mitmproxy import platform +from mitmproxy.net import server_spec +from mitmproxy.utils import human + + +class CoreOptionValidation: + 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( + opts.body_size_limit + ) + except ValueError as e: + raise exceptions.OptionsError( + "Invalid body size limit specification: %s" % + opts.body_size_limit + ) + if "mode" in updated: + mode = opts.mode + if mode.startswith("reverse:") or mode.startswith("upstream:"): + try: + server_spec.parse_with_mode(mode) + except ValueError as e: + raise exceptions.OptionsError(str(e)) from e + elif mode == "transparent": + if not platform.original_addr: + raise exceptions.OptionsError( + "Transparent mode not supported on this platform." + ) + elif mode not in ["regular", "socks5"]: + raise exceptions.OptionsError( + "Invalid mode specification: %s" % mode + ) diff --git a/test/mitmproxy/addons/test_core.py b/test/mitmproxy/addons/test_core.py deleted file mode 100644 index db739b5d..00000000 --- a/test/mitmproxy/addons/test_core.py +++ /dev/null @@ -1,43 +0,0 @@ -from mitmproxy import exceptions -from mitmproxy.addons import core -from mitmproxy.test import taddons -import pytest -from unittest import mock - - -def test_simple(): - sa = core.Core() - with taddons.context() as tctx: - with pytest.raises(exceptions.OptionsError): - tctx.configure(sa, body_size_limit = "invalid") - tctx.configure(sa, body_size_limit = "1m") - assert tctx.options._processed["body_size_limit"] - - with pytest.raises(exceptions.OptionsError, match="mutually exclusive"): - tctx.configure( - sa, - add_upstream_certs_to_client_chain = True, - upstream_cert = False - ) - with pytest.raises(exceptions.OptionsError, match="Invalid mode"): - tctx.configure( - sa, - mode = "Flibble" - ) - - -@mock.patch("mitmproxy.platform.original_addr", None) -def test_no_transparent(): - sa = core.Core() - with taddons.context() as tctx: - with pytest.raises(Exception, match="Transparent mode not supported"): - tctx.configure(sa, mode = "transparent") - - -@mock.patch("mitmproxy.platform.original_addr") -def test_modes(m): - sa = core.Core() - with taddons.context() as tctx: - tctx.configure(sa, mode = "reverse:http://localhost") - with pytest.raises(Exception, match="Invalid server specification"): - tctx.configure(sa, mode = "reverse:") diff --git a/test/mitmproxy/addons/test_core_option_validation.py b/test/mitmproxy/addons/test_core_option_validation.py new file mode 100644 index 00000000..0bb2bb0d --- /dev/null +++ b/test/mitmproxy/addons/test_core_option_validation.py @@ -0,0 +1,43 @@ +from mitmproxy import exceptions +from mitmproxy.addons import core_option_validation +from mitmproxy.test import taddons +import pytest +from unittest import mock + + +def test_simple(): + sa = core_option_validation.CoreOptionValidation() + with taddons.context() as tctx: + with pytest.raises(exceptions.OptionsError): + tctx.configure(sa, body_size_limit = "invalid") + tctx.configure(sa, body_size_limit = "1m") + assert tctx.options._processed["body_size_limit"] + + with pytest.raises(exceptions.OptionsError, match="mutually exclusive"): + tctx.configure( + sa, + add_upstream_certs_to_client_chain = True, + upstream_cert = False + ) + with pytest.raises(exceptions.OptionsError, match="Invalid mode"): + tctx.configure( + sa, + mode = "Flibble" + ) + + +@mock.patch("mitmproxy.platform.original_addr", None) +def test_no_transparent(): + sa = core_option_validation.CoreOptionValidation() + with taddons.context() as tctx: + with pytest.raises(Exception, match="Transparent mode not supported"): + tctx.configure(sa, mode = "transparent") + + +@mock.patch("mitmproxy.platform.original_addr") +def test_modes(m): + sa = core_option_validation.CoreOptionValidation() + with taddons.context() as tctx: + tctx.configure(sa, mode = "reverse:http://localhost") + with pytest.raises(Exception, match="Invalid server specification"): + tctx.configure(sa, mode = "reverse:") -- cgit v1.2.3