Handle command-line argument errors properly
At some point we stopped handling exceptions from get_common_options properly.
This commit is contained in:
parent
d2268ddb1e
commit
bd733e1232
|
@ -6,6 +6,7 @@ import re
|
|||
|
||||
import configargparse
|
||||
|
||||
from mitmproxy import exceptions
|
||||
from mitmproxy import filt
|
||||
from mitmproxy.proxy import config
|
||||
from netlib import human
|
||||
|
@ -149,17 +150,17 @@ def get_common_options(args):
|
|||
try:
|
||||
p = parse_replace_hook(i)
|
||||
except ParseException as e:
|
||||
raise configargparse.ArgumentTypeError(e)
|
||||
raise exceptions.OptionsError(e)
|
||||
reps.append(p)
|
||||
for i in args.replace_file:
|
||||
try:
|
||||
patt, rex, path = parse_replace_hook(i)
|
||||
except ParseException as e:
|
||||
raise configargparse.ArgumentTypeError(e)
|
||||
raise exceptions.OptionsError(e)
|
||||
try:
|
||||
v = open(path, "rb").read()
|
||||
except IOError as e:
|
||||
raise configargparse.ArgumentTypeError(
|
||||
raise exceptions.OptionsError(
|
||||
"Could not read replace file: %s" % path
|
||||
)
|
||||
reps.append((patt, rex, v))
|
||||
|
@ -169,17 +170,17 @@ def get_common_options(args):
|
|||
try:
|
||||
p = parse_setheader(i)
|
||||
except ParseException as e:
|
||||
raise configargparse.ArgumentTypeError(e)
|
||||
raise exceptions.OptionsError(e)
|
||||
setheaders.append(p)
|
||||
|
||||
if args.outfile and args.outfile[0] == args.rfile:
|
||||
if args.outfile[1] == "wb":
|
||||
raise configargparse.ArgumentTypeError(
|
||||
raise exceptions.OptionsError(
|
||||
"Cannot use '{}' for both reading and writing flows. "
|
||||
"Are you looking for --afile?".format(args.rfile)
|
||||
)
|
||||
else:
|
||||
raise configargparse.ArgumentTypeError(
|
||||
raise exceptions.OptionsError(
|
||||
"Cannot use '{}' for both reading and appending flows. "
|
||||
"That would trigger an infinite loop."
|
||||
)
|
||||
|
@ -194,7 +195,12 @@ def get_common_options(args):
|
|||
|
||||
body_size_limit = args.body_size_limit
|
||||
if body_size_limit:
|
||||
body_size_limit = human.parse_size(body_size_limit)
|
||||
try:
|
||||
body_size_limit = human.parse_size(body_size_limit)
|
||||
except ValueError, e:
|
||||
raise exceptions.OptionsError(
|
||||
"Invalid body size limit specification: %s" % body_size_limit
|
||||
)
|
||||
|
||||
return dict(
|
||||
app=args.app,
|
||||
|
|
|
@ -64,16 +64,18 @@ def mitmproxy(args=None): # pragma: no cover
|
|||
parser = cmdline.mitmproxy()
|
||||
args = parser.parse_args(args)
|
||||
|
||||
console_options = console.master.Options(**cmdline.get_common_options(args))
|
||||
console_options.palette = args.palette
|
||||
console_options.palette_transparent = args.palette_transparent
|
||||
console_options.eventlog = args.eventlog
|
||||
console_options.follow = args.follow
|
||||
console_options.intercept = args.intercept
|
||||
console_options.limit = args.limit
|
||||
console_options.no_mouse = args.no_mouse
|
||||
|
||||
try:
|
||||
console_options = console.master.Options(
|
||||
**cmdline.get_common_options(args)
|
||||
)
|
||||
console_options.palette = args.palette
|
||||
console_options.palette_transparent = args.palette_transparent
|
||||
console_options.eventlog = args.eventlog
|
||||
console_options.follow = args.follow
|
||||
console_options.intercept = args.intercept
|
||||
console_options.limit = args.limit
|
||||
console_options.no_mouse = args.no_mouse
|
||||
|
||||
proxy_config = process_options(parser, console_options, args)
|
||||
server = get_server(console_options.no_server, proxy_config)
|
||||
m = console.master.ConsoleMaster(server, console_options)
|
||||
|
@ -96,12 +98,12 @@ def mitmdump(args=None): # pragma: no cover
|
|||
if args.quiet:
|
||||
args.flow_detail = 0
|
||||
|
||||
dump_options = dump.Options(**cmdline.get_common_options(args))
|
||||
dump_options.flow_detail = args.flow_detail
|
||||
dump_options.keepserving = args.keepserving
|
||||
dump_options.filtstr = " ".join(args.args) if args.args else None
|
||||
|
||||
try:
|
||||
dump_options = dump.Options(**cmdline.get_common_options(args))
|
||||
dump_options.flow_detail = args.flow_detail
|
||||
dump_options.keepserving = args.keepserving
|
||||
dump_options.filtstr = " ".join(args.args) if args.args else None
|
||||
proxy_config = process_options(parser, dump_options, args)
|
||||
server = get_server(dump_options.no_server, proxy_config)
|
||||
master = dump.DumpMaster(server, dump_options)
|
||||
|
@ -130,16 +132,16 @@ def mitmweb(args=None): # pragma: no cover
|
|||
|
||||
args = parser.parse_args(args)
|
||||
|
||||
web_options = web.master.Options(**cmdline.get_common_options(args))
|
||||
web_options.intercept = args.intercept
|
||||
web_options.wdebug = args.wdebug
|
||||
web_options.wiface = args.wiface
|
||||
web_options.wport = args.wport
|
||||
web_options.wsingleuser = args.wsingleuser
|
||||
web_options.whtpasswd = args.whtpasswd
|
||||
web_options.process_web_options(parser)
|
||||
|
||||
try:
|
||||
web_options = web.master.Options(**cmdline.get_common_options(args))
|
||||
web_options.intercept = args.intercept
|
||||
web_options.wdebug = args.wdebug
|
||||
web_options.wiface = args.wiface
|
||||
web_options.wport = args.wport
|
||||
web_options.wsingleuser = args.wsingleuser
|
||||
web_options.whtpasswd = args.whtpasswd
|
||||
web_options.process_web_options(parser)
|
||||
|
||||
proxy_config = process_options(parser, web_options, args)
|
||||
server = get_server(web_options.no_server, proxy_config)
|
||||
m = web.master.WebMaster(server, web_options)
|
||||
|
|
Loading…
Reference in New Issue