def __init__(self, server, options): flow.FlowMaster.__init__(self, options, server, flow.DummyState()) self.has_errored = False self.addons.add(*builtins.default_addons()) self.addons.add(dumper.Dumper()) self.addons.add(termlog.TermLog()) # This line is just for type hinting self.options = self.options # type: Options self.set_stream_large_bodies(options.stream_large_bodies) if not self.options.no_server and 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) if self.options.app: self.start_app(self.options.app_host, self.options.app_port)
def __init__(self, server, options): flow.FlowMaster.__init__(self, options, server, flow.State()) self.has_errored = False self.addons.add(options, *builtins.default_addons()) self.addons.add(options, dumper.Dumper()) # This line is just for type hinting self.options = self.options # type: Options self.replay_ignore_params = options.replay_ignore_params self.replay_ignore_content = options.replay_ignore_content self.replay_ignore_host = options.replay_ignore_host self.refresh_server_playback = options.refresh_server_playback self.replay_ignore_payload_params = options.replay_ignore_payload_params self.set_stream_large_bodies(options.stream_large_bodies) if self.server and self.options.http2 and not tcp.HAS_ALPN: # pragma: no cover print( "ALPN support missing (OpenSSL 1.0.2+ required)!\n" "HTTP/2 is disabled. Use --no-http2 to silence this warning.", file=sys.stderr) if options.client_replay: self.start_client_playback(self._readflow(options.client_replay), not options.keepserving) 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) if self.options.app: self.start_app(self.options.app_host, self.options.app_port)
def test_simple(self): d = dumper.Dumper() sio = StringIO() updated = {"tfile", "flow_detail"} d.configure(dump.Options(tfile=sio, flow_detail=0), updated) d.response(tutils.tflow()) assert not sio.getvalue() d.configure(dump.Options(tfile=sio, flow_detail=4), updated) d.response(tutils.tflow()) assert sio.getvalue() sio = StringIO() d.configure(dump.Options(tfile=sio, flow_detail=4), updated) d.response(tutils.tflow(resp=True)) assert "<<" in sio.getvalue() sio = StringIO() d.configure(dump.Options(tfile=sio, flow_detail=4), updated) d.response(tutils.tflow(err=True)) assert "<<" in sio.getvalue() sio = StringIO() d.configure(dump.Options(tfile=sio, flow_detail=4), updated) flow = tutils.tflow() flow.request = netlib.tutils.treq() flow.request.stickycookie = True flow.client_conn = mock.MagicMock() flow.client_conn.address.host = "foo" flow.response = netlib.tutils.tresp(content=None) flow.response.is_replay = True flow.response.status_code = 300 d.response(flow) assert sio.getvalue() sio = StringIO() d.configure(dump.Options(tfile=sio, flow_detail=4), updated) flow = tutils.tflow(resp=netlib.tutils.tresp(content=b"{")) flow.response.headers["content-type"] = "application/json" flow.response.status_code = 400 d.response(flow) assert sio.getvalue() sio = StringIO() d.configure(dump.Options(tfile=sio), updated) flow = tutils.tflow() flow.request.content = None flow.response = models.HTTPResponse.wrap(netlib.tutils.tresp()) flow.response.content = None d.response(flow) assert "content missing" in sio.getvalue()
def test_contentview(self, view_auto): view_auto.side_effect = exceptions.ContentViewException("") s = state.State() sio = StringIO() o = dump.Options( flow_detail=4, verbosity=3, tfile=sio, ) m = mastertest.RecordingMaster(o, None, s) d = dumper.Dumper() m.addons.add(o, d) self.invoke(m, "response", tutils.tflow()) assert "Content viewer failed" in m.event_log[0][1]