def __init__(self, options, server): master.Master.__init__(self, options, server) self.has_errored = False self.addons.add(termlog.TermLog()) self.addons.add(*addons.default_addons()) self.addons.add(dumper.Dumper()) # This line is just for type hinting self.options = self.options # type: Options if not self.options.no_server: self.add_log( "Proxy server listening at http://{}".format(server.address), "info" ) if self.server and self.options.http2 and not tcp.HAS_ALPN: # pragma: no cover self.add_log( "ALPN support missing (OpenSSL 1.0.2+ required)!\n" "HTTP/2 is disabled. Use --no-http2 to silence this warning.", "error" ) if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log("Flow file corrupted.", "error") raise DumpError(v)
def __init__(self, options, with_termlog=True): super().__init__(options) self.view = view.View() self.view.sig_view_add.connect(self._sig_view_add) self.view.sig_view_remove.connect(self._sig_view_remove) self.view.sig_view_update.connect(self._sig_view_update) self.view.sig_view_refresh.connect(self._sig_view_refresh) self.events = eventstore.EventStore() self.events.sig_add.connect(self._sig_events_add) self.events.sig_refresh.connect(self._sig_events_refresh) self.options.changed.connect(self._sig_options_update) self.options.changed.connect(self._sig_settings_update) self.addons.add(*addons.default_addons()) self.addons.add( webaddons.WebAddon(), intercept.Intercept(), readfile.ReadFile(), static_viewer.StaticViewer(), self.view, self.events, ) if with_termlog: self.addons.add(termlog.TermLog(), termstatus.TermStatus()) self.app = app.Application( self, self.options.web_debug )
def __init__( self, options: Options, server, with_termlog=True, with_dumper=True, ) -> None: master.Master.__init__(self, options, server) self.has_errored = False if with_termlog: self.addons.add(termlog.TermLog()) self.addons.add(*addons.default_addons()) if with_dumper: self.addons.add(dumper.Dumper()) if not self.options.no_server: self.add_log( "Proxy server listening at http://{}:{}".format( server.address[0], server.address[1]), "info") if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log("Flow file corrupted.", "error") raise DumpError(v)
def __init__(self, opts): super().__init__(opts) self.view = view.View() # type: view.View self.stream_path = None self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(consoleaddons.Logger()) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, consoleaddons.UnsupportedLog(), readfile.ReadFile(), consoleaddons.ConsoleAddon(self), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler) self.window = None
def __init__( self, options: Options, server, with_termlog=True, with_dumper=True, ) -> None: master.Master.__init__(self, options, server) self.has_errored = False if with_termlog: self.addons.add(termlog.TermLog()) self.addons.add(*addons.default_addons()) if with_dumper: self.addons.add(dumper.Dumper()) if not self.options.no_server: self.add_log( "Proxy server listening at http://{}".format(server.address), "info" ) if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log("Flow file corrupted.", "error") raise DumpError(v)
def __init__(self, opts): super().__init__(opts) self.start_err: typing.Optional[log.LogEntry] = None self.view: view.View = view.View() self.events = eventstore.EventStore() self.events.sig_add.connect(self.sig_add_log) self.stream_path = None self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, self.events, readfile.ReadFile(), consoleaddons.ConsoleAddon(self), keymap.KeymapConfig(), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler) self.window = None
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() # type: view.View self.view.sig_view_update.connect(signals.flow_change.send) self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.keymap = keymap.Keymap(self) default_keymap(self.keymap) self.options.errored.connect(self.options_error) self.logbuffer = urwid.SimpleListWalker([]) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.pop_view_state.connect(self.sig_pop_view_state) signals.replace_view_state.connect(self.sig_replace_view_state) signals.push_view_state.connect(self.sig_push_view_state) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(Logger()) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, UnsupportedLog(), readfile.ReadFile(), ConsoleCommands(self), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler)
def __init__(self, options, server): master.Master.__init__(self, options, server) self.has_errored = False self.addons.add(termlog.TermLog()) self.addons.add(*addons.default_addons()) self.addons.add(dumper.Dumper()) # This line is just for type hinting self.options = self.options # type: Options if not self.options.no_server: self.add_log( "Proxy server listening at http://{}".format(server.address), "info" ) if self.server and self.options.http2 and not tcp.HAS_ALPN: # pragma: no cover self.add_log( "ALPN support missing (OpenSSL 1.0.2+ required)!\n" "HTTP/2 is disabled. Use --no-http2 to silence this warning.", "error" ) if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log("Flow file corrupted.", "error") raise DumpError(v)
def __init__(self, options, server, with_termlog=True): super().__init__(options, server) self.view = view.View() self.view.sig_view_add.connect(self._sig_view_add) self.view.sig_view_remove.connect(self._sig_view_remove) self.view.sig_view_update.connect(self._sig_view_update) self.view.sig_view_refresh.connect(self._sig_view_refresh) self.events = eventstore.EventStore() self.events.sig_add.connect(self._sig_events_add) self.events.sig_refresh.connect(self._sig_events_refresh) self.options.changed.connect(self._sig_options_update) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, self.events, ) if with_termlog: self.addons.add(termlog.TermLog()) self.app = app.Application(self, self.options.wdebug) # This line is just for type hinting self.options = self.options # type: Options if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log("Could not read flow file: %s" % v, "error")
def __init__(self, options, server, with_termlog=True): super().__init__(options, server) self.view = view.View() self.view.sig_view_add.connect(self._sig_view_add) self.view.sig_view_remove.connect(self._sig_view_remove) self.view.sig_view_update.connect(self._sig_view_update) self.view.sig_view_refresh.connect(self._sig_view_refresh) self.events = eventstore.EventStore() self.events.sig_add.connect(self._sig_events_add) self.events.sig_refresh.connect(self._sig_events_refresh) self.options.changed.connect(self._sig_options_update) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, self.events, ) if with_termlog: self.addons.add(termlog.TermLog(), termstatus.TermStatus()) self.app = app.Application(self, self.options.web_debug) # This line is just for type hinting self.options = self.options # type: Options
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() # type: view.View self.view.sig_view_update.connect(signals.flow_change.send) self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.options.errored.connect(self.options_error) self.logbuffer = urwid.SimpleListWalker([]) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.pop_view_state.connect(self.sig_pop_view_state) signals.replace_view_state.connect(self.sig_replace_view_state) signals.push_view_state.connect(self.sig_push_view_state) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(Logger()) self.addons.add(*addons.default_addons()) self.addons.add(intercept.Intercept(), self.view) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler)
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() # type: view.View self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.keymap = keymap.Keymap(self) default_keymap(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(Logger()) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, UnsupportedLog(), readfile.ReadFile(), ConsoleAddon(self), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler) self.window = None
def __init__(self, options, server, with_termlog=True): super().__init__(options, server) self.view = view.View() self.view.sig_view_add.connect(self._sig_view_add) self.view.sig_view_remove.connect(self._sig_view_remove) self.view.sig_view_update.connect(self._sig_view_update) self.view.sig_view_refresh.connect(self._sig_view_refresh) self.events = eventstore.EventStore() self.events.sig_add.connect(self._sig_events_add) self.events.sig_refresh.connect(self._sig_events_refresh) self.options.changed.connect(self._sig_options_update) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), readfile.ReadFile(), self.view, self.events, ) if with_termlog: self.addons.add(termlog.TermLog(), termstatus.TermStatus()) self.app = app.Application( self, self.options.web_debug ) # This line is just for type hinting self.options = self.options # type: Options
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() self.view.sig_add.connect(self._sig_add) self.view.sig_remove.connect(self._sig_remove) self.view.sig_update.connect(self._sig_update) self.view.sig_refresh.connect(self._sig_refresh) self.addons.add(*addons.default_addons()) self.addons.add(self.view, intercept.Intercept()) self.app = app.Application( self, self.options.wdebug, self.options.wauthenticator ) # This line is just for type hinting self.options = self.options # type: Options if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log( "Could not read flow file: %s" % v, "error" ) if options.outfile: err = self.start_stream_to_path( options.outfile[0], options.outfile[1] ) if err: print("Stream file error: {}".format(err), file=sys.stderr) sys.exit(1)
def __init__(self, opts): super().__init__(opts) self.start_err = None # type: typing.Optional[log.LogEntry] self.view = view.View() # type: view.View self.events = eventstore.EventStore() self.events.sig_add.connect(self.sig_add_log) self.stream_path = None self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] signals.call_in.connect(self.sig_call_in) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, self.events, consoleaddons.UnsupportedLog(), readfile.ReadFile(), consoleaddons.ConsoleAddon(self), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler) self.window = None
def __init__(self, opts): super().__init__(opts) self.view: view.View = view.View() self.events = eventstore.EventStore() self.events.sig_add.connect(self.sig_add_log) self.stream_path = None self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, self.events, readfile.ReadFile(), consoleaddons.ConsoleAddon(self), keymap.KeymapConfig(), errorcheck.ErrorCheck(log_to_stderr=True), ) self.window = None
def __init__(self, options, server): super().__init__(options, server) self.state = ConsoleState() self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.options.errored.connect(self.options_error) r = self.set_intercept(options.intercept) if r: print("Intercept error: {}".format(r), file=sys.stderr) sys.exit(1) if options.filter: self.set_view_filter(options.filter) self.palette = options.palette self.palette_transparent = options.palette_transparent self.logbuffer = urwid.SimpleListWalker([]) self.follow = options.follow self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.pop_view_state.connect(self.sig_pop_view_state) signals.replace_view_state.connect(self.sig_replace_view_state) signals.push_view_state.connect(self.sig_push_view_state) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(*addons.default_addons()) self.addons.add(self.state)
def __init__(self, options, server, with_termlog=True): super().__init__(options, server) self.view = view.View() self.view.sig_view_add.connect(self._sig_view_add) self.view.sig_view_remove.connect(self._sig_view_remove) self.view.sig_view_update.connect(self._sig_view_update) self.view.sig_view_refresh.connect(self._sig_view_refresh) self.events = eventstore.EventStore() self.events.sig_add.connect(self._sig_events_add) self.events.sig_refresh.connect(self._sig_events_refresh) self.options.changed.connect(self._sig_options_update) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, self.events, ) if with_termlog: self.addons.add(termlog.TermLog()) self.app = app.Application( self, self.options.web_debug ) # This line is just for type hinting self.options = self.options # type: Options if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log( "Could not read flow file: %s" % v, "error" )
def __init__(self, options, server): super().__init__(options, server) self.state = WebState() self.addons.add(*addons.default_addons()) self.addons.add(self.state, intercept.Intercept()) self.app = app.Application( self, self.options.wdebug, self.options.wauthenticator ) # This line is just for type hinting self.options = self.options # type: Options if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log( "Could not read flow file: %s" % v, "error" ) if options.outfile: err = self.start_stream_to_path( options.outfile[0], options.outfile[1] ) if err: print("Stream file error: {}".format(err), file=sys.stderr) sys.exit(1)
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() # type: view.View self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.options.errored.connect(self.options_error) self.logbuffer = urwid.SimpleListWalker([]) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.pop_view_state.connect(self.sig_pop_view_state) signals.replace_view_state.connect(self.sig_replace_view_state) signals.push_view_state.connect(self.sig_push_view_state) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(Logger()) self.addons.add(*addons.default_addons()) self.addons.add(intercept.Intercept(), self.view) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler)
def __init__(self, host, port, options): self.options = options # Used to stored captured requests self.storage = RequestStorage( base_dir=options.pop('request_storage_base_dir', None)) # Used to modify requests/responses passing through the server # Deprecated. Will be superceded by request/response interceptors. self.modifier = RequestModifier() # The scope of requests we're interested in capturing. self.scopes = [] self.request_interceptor = None self.response_interceptor = None try: self._event_loop = asyncio.get_event_loop() if self._event_loop.is_closed(): # The event loop may be closed if the server had previously # been shutdown and then spun up again self._event_loop = asyncio.new_event_loop() asyncio.set_event_loop(self._event_loop) except: self._event_loop = asyncio.new_event_loop() asyncio.set_event_loop(self._event_loop) # mitmproxy specific options mitmproxy_opts = Options( listen_host=host, listen_port=port, ) # Create an instance of the mitmproxy server self._master = Master(mitmproxy_opts) self._master.server = ProxyServer(ProxyConfig(mitmproxy_opts)) self._master.addons.add(*addons.default_addons()) self._master.addons.add(SendToLogger()) self._master.addons.add(MitmProxyRequestHandler(self)) # Update the options now all addons have been added mitmproxy_opts.update( confdir=DEFAULT_CONFDIR, ssl_insecure=options.get('verify_ssl', True), upstream_cert=DEFAULT_UPSTREAM_CERT, stream_websockets=DEFAULT_STREAM_WEBSOCKETS, **self._get_upstream_proxy_args(), ) # Options that are prefixed mitm_ are passed through to mitmproxy mitmproxy_opts.update( **{k[5:]: v for k, v in options.items() if k.startswith('mitm_')})
def __init__(self, proxy_events, listen_port, include_path): self.opts = options.Options() self.opts.listen_port = listen_port self.opts.confdir = include_path self.master = master.Master(self.opts) proxy_events.set_proxy(self) self.master.addons.add(proxy_events) self.master.addons.add(termlog.TermLog()) self.master.addons.add(*addons.default_addons()) self.master.addons.add(keepserving.KeepServing(), readfile.ReadFileStdin())
def __init__( self, options: options.Options, with_termlog=True, with_dumper=True, ) -> None: super().__init__(options) self.errorcheck = ErrorCheck() if with_termlog: self.addons.add(termlog.TermLog(), termstatus.TermStatus()) self.addons.add(*addons.default_addons()) if with_dumper: self.addons.add(dumper.Dumper()) self.addons.add(keepserving.KeepServing(), self.errorcheck)
def __init__(self, options, server, with_termlog=False) -> None: master.Master.__init__(self, options, server) self.has_errored = False self.monitor_host = 'monitor.zkt' self.monitor_port = 80 # TODO: 考虑用tornado替代flask以减少冗余依赖 # 将Flask的实例注入mitmproxy self.addons.add( wsgiapp.WSGIApp(app, self.monitor_host, self.monitor_port)) self.db_session = DBSession() if with_termlog: self.addons.add(termlog.TermLog()) self.addons.add(*addons.default_addons()) if not self.options.no_server: self.add_log("代理服务运行于 http://{}".format(server.address), "info")
def __init__(self, mode: ProxyMode, port: int): mode = (f'{mode.value}:https://dummy-upstream' if mode == ProxyMode.REVERSE else mode.value) opts = Options(mode=mode, listen_port=port) super().__init__(opts) self.view = View() self.addons.add( *default_addons(), VaultFlows(), self.view, ProxyEventsAddon(), ) self.server = ProxyServer(ProxyConfig(opts))
def __init__( self, options: options.Options, server, with_termlog=True, with_dumper=True, ) -> None: master.Master.__init__(self, options, server) self.errorcheck = ErrorCheck() if with_termlog: self.addons.add(termlog.TermLog(), termstatus.TermStatus()) self.addons.add(*addons.default_addons()) if with_dumper: self.addons.add(dumper.Dumper()) self.addons.add(readstdin.ReadStdin(), keepserving.KeepServing(), self.errorcheck)
def __init__( self, options: options.Options, with_termlog=True, with_dumper=True, ) -> None: super().__init__(options) if with_termlog: self.addons.add(termlog.TermLog()) self.addons.add(*addons.default_addons()) if with_dumper: self.addons.add(dumper.Dumper()) self.addons.add( keepserving.KeepServing(), readfile.ReadFileStdin(), errorcheck.ErrorCheck(), )
def __init__( self, options: options.Options, with_termlog=True, with_dumper=True, ) -> None: super().__init__(options) self.errorcheck = ErrorCheck() if with_termlog: self.addons.add(termlog.TermLog(), termstatus.TermStatus()) self.addons.add(*addons.default_addons()) if with_dumper: self.addons.add(dumper.Dumper()) self.addons.add( keepserving.KeepServing(), readfile.ReadFileStdin(), self.errorcheck )
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() self.view.sig_add.connect(self._sig_add) self.view.sig_remove.connect(self._sig_remove) self.view.sig_update.connect(self._sig_update) self.view.sig_refresh.connect(self._sig_refresh) self.addons.add(*addons.default_addons()) self.addons.add(self.view, intercept.Intercept()) self.app = app.Application(self, self.options.wdebug, self.options.wauthenticator) # This line is just for type hinting self.options = self.options # type: Options if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log("Could not read flow file: %s" % v, "error")
def __init__( self, options: options.Options, mode, flow_name, ) -> None: super().__init__(options) self.addons.add(termlog.TermLog()) self.addons.add(termstatus.TermStatus()) self.addons.add(keepserving.KeepServing()) self.addons.add(*addons.default_addons()) if mode == "fuzz": self.addons.add(dumper.Dumper()) self.addons.add(FuzzResponseAnalyzer()) if mode == "runfuzz": self.addons.add(FuzzResponseAnalyzer()) if mode == "capture": self.addons.add(Capture(flow_name)) if mode == "intercept": self.addons.add(Interceptor())
def __init__( self, options: options.Options, server, with_termlog=True, with_dumper=True, ) -> None: master.Master.__init__(self, options, server) self.has_errored = False if with_termlog: self.addons.add(termlog.TermLog(), termstatus.TermStatus()) self.addons.add(*addons.default_addons()) if with_dumper: self.addons.add(dumper.Dumper()) if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log("Flow file corrupted.", "error") raise exceptions.OptionsError(v)
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.options.errored.connect(self.options_error) self.palette = options.palette self.palette_transparent = options.palette_transparent self.logbuffer = urwid.SimpleListWalker([]) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.pop_view_state.connect(self.sig_pop_view_state) signals.replace_view_state.connect(self.sig_replace_view_state) signals.push_view_state.connect(self.sig_push_view_state) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(*addons.default_addons()) self.addons.add(intercept.Intercept(), self.view)
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.options.errored.connect(self.options_error) self.palette = options.palette self.palette_transparent = options.palette_transparent self.logbuffer = urwid.SimpleListWalker([]) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.pop_view_state.connect(self.sig_pop_view_state) signals.replace_view_state.connect(self.sig_replace_view_state) signals.push_view_state.connect(self.sig_push_view_state) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(*addons.default_addons()) self.addons.add(intercept.Intercept(), self.view)
def __init__(self, options, server): super().__init__(options, server) if not sys.stdout.isatty(): print( "Error: mitmproxy's console interface requires a tty. " "Please run mitmproxy in an interactive shell environment.", file=sys.stderr) sys.exit(1) self.view = view.View() # type: view.View self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(consoleaddons.Logger()) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, consoleaddons.UnsupportedLog(), readfile.ReadFile(), consoleaddons.ConsoleAddon(self), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler) self.window = None
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() self.view.sig_add.connect(self._sig_add) self.view.sig_remove.connect(self._sig_remove) self.view.sig_update.connect(self._sig_update) self.view.sig_refresh.connect(self._sig_refresh) self.addons.add(*addons.default_addons()) self.addons.add(self.view, intercept.Intercept()) self.app = app.Application( self, self.options.wdebug, self.options.wauthenticator ) # This line is just for type hinting self.options = self.options # type: Options if options.rfile: try: self.load_flows_file(options.rfile) except exceptions.FlowReadException as v: self.add_log( "Could not read flow file: %s" % v, "error" )
def test_defaults(): assert addons.default_addons()
def test_defaults(): assert addons.default_addons()
def __init__(self, opts): super().__init__(opts) self.addons.add(*addons.default_addons()) # this installs ProxyAuth self.addons.add(BlockHttp()) self.addons.add(SecureHeaders())