mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-27 02:24:18 +00:00
1b09002edc
Instead of having the core addon do postprocessing on body_size_limit, we add a cache to the parsing function. First, this avoids any potential issues with options and _processed getting out of sync. As anecdotal evidence, the previous implementation did not clear _processed when body_size_limit was reset to None. Second, it achieves the same end result without introducing a new concept of a "_processed" scratch space. Third, it works even if addons aren't present, and does not require workarounds as previously present in test_http2.py. refs https://github.com/mitmproxy/mitmproxy/pull/2484#pullrequestreview-53101507
46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
"""
|
|
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 import ctx
|
|
from mitmproxy.net import server_spec
|
|
from mitmproxy.utils import human
|
|
|
|
|
|
class CoreOptionValidation:
|
|
def configure(self, updated):
|
|
opts = ctx.options
|
|
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:
|
|
try:
|
|
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
|
|
)
|