def unconnected_proxyserver(mocker): mocker.patch("twisted.test.iosim.FakeTransport.startTLS") mocker.patch("pappyproxy.proxy.load_certs_from_dir", new=mock_generate_cert) factory = ProxyServerFactory() protocol = factory.buildProtocol(('127.0.0.1', 0)) protocol.makeConnection(FakeTransport(protocol, True)) return protocol
def proxyserver(mocker): mocker.patch("twisted.test.iosim.FakeTransport.startTLS") mocker.patch("pappyproxy.proxy.load_certs_from_dir", new=mock_generate_cert) factory = ProxyServerFactory() protocol = factory.buildProtocol(('127.0.0.1', 0)) protocol.makeConnection(FakeTransport(protocol, True)) protocol.lineReceived('CONNECT https://www.AAAA.BBBB:443 HTTP/1.1') protocol.lineReceived('') protocol.transport.getOutBuffer() return protocol
class TestProxyConnection(object): @property def client_protocol(self): if 'protocol' not in self.conn_info: raise Exception( 'Connection to server not made. Cannot write data as server.') return self.conn_info['protocol'] @property def client_factory(self): if 'protocol' not in self.conn_info: raise Exception( 'Connection to server not made. Cannot write data as server.') return self.conn_info['factory'] def setUp(self, mocker, int_macros={}, socks_config=None, http_config=None, in_scope=True): self.mocker = mocker self.conn_info = {} # Mock config self.mock_config = pappyproxy.config.PappyConfig() self.mock_config.socks_proxy = socks_config self.mock_config.http_proxy = http_config self.mock_session = pappyproxy.pappy.PappySession(self.mock_config) mocker.patch.object(pappyproxy.pappy, 'session', new=self.mock_session) mocker.patch("pappyproxy.proxy.load_certs_from_dir", new=mock_generate_cert) # Listening server self.server_factory = ProxyServerFactory() self.server_factory.save_all = True self.server_factory.intercepting_macros = int_macros self.server_protocol = self.server_factory.buildProtocol( ('127.0.0.1', 0)) self.server_transport = TLSStringTransport() self.server_protocol.makeConnection(self.server_transport) # Other mocks self.req_save = mocker.patch.object(pappyproxy.http.Request, 'async_deep_save', autospec=True, side_effect=mock_req_async_save) self.submit_request = mocker.patch( 'pappyproxy.http.Request.submit_request', new=self.gen_mock_submit_request()) self.get_endpoint = mocker.patch('pappyproxy.proxy.get_endpoint') self.in_scope = mocker.patch( 'pappyproxy.context.in_scope').return_value = in_scope def gen_mock_submit_request(self): orig = Request.submit_request def f(request, save_request=False, intercepting_macros={}, stream_transport=None): return orig(request, save_request=save_request, intercepting_macros=intercepting_macros, stream_transport=stream_transport, _factory_string_transport=True, _conn_info=self.conn_info) return f def perform_connect_request(self): self.write_as_browser( 'CONNECT https://www.AAAA.BBBB:443 HTTP/1.1\r\n\r\n') assert self.read_as_browser( ) == 'HTTP/1.1 200 Connection established\r\n\r\n' def write_as_browser(self, data): self.server_protocol.dataReceived(data) def read_as_browser(self): s = self.server_protocol.transport.value() self.server_protocol.transport.clear() return s def write_as_server(self, data): self.client_protocol.dataReceived(data) def read_as_server(self): s = self.client_protocol.transport.value() self.client_protocol.transport.clear() return s
class TestProxyConnection(object): @property def client_protocol(self): if 'protocol' not in self.conn_info: raise Exception('Connection to server not made. Cannot write data as server.') return self.conn_info['protocol'] @property def client_factory(self): if 'protocol' not in self.conn_info: raise Exception('Connection to server not made. Cannot write data as server.') return self.conn_info['factory'] def setUp(self, mocker, int_macros={}, socks_config=None, http_config=None, in_scope=True): self.mocker = mocker self.conn_info = {} # Mock config self.mock_config = pappyproxy.config.PappyConfig() self.mock_config.socks_proxy = socks_config self.mock_config.http_proxy = http_config self.mock_session = pappyproxy.pappy.PappySession(self.mock_config) mocker.patch.object(pappyproxy.pappy, 'session', new=self.mock_session) mocker.patch("pappyproxy.proxy.load_certs_from_dir", new=mock_generate_cert) # Listening server self.server_factory = ProxyServerFactory() self.server_factory.save_all = True self.server_factory.intercepting_macros = int_macros self.server_protocol = self.server_factory.buildProtocol(('127.0.0.1', 0)) self.server_transport = TLSStringTransport() self.server_protocol.makeConnection(self.server_transport) # Other mocks self.req_save = mocker.patch.object(pappyproxy.http.Request, 'async_deep_save', autospec=True, side_effect=mock_req_async_save) self.submit_request = mocker.patch('pappyproxy.http.Request.submit_request', new=self.gen_mock_submit_request()) self.get_endpoint = mocker.patch('pappyproxy.proxy.get_endpoint') self.in_scope = mocker.patch('pappyproxy.context.in_scope').return_value = in_scope def gen_mock_submit_request(self): orig = Request.submit_request def f(request, save_request=False, intercepting_macros={}, stream_transport=None): return orig(request, save_request=save_request, intercepting_macros=intercepting_macros, stream_transport=stream_transport, _factory_string_transport=True, _conn_info=self.conn_info) return f def perform_connect_request(self): self.write_as_browser('CONNECT https://www.AAAA.BBBB:443 HTTP/1.1\r\n\r\n') assert self.read_as_browser() == 'HTTP/1.1 200 Connection established\r\n\r\n' def write_as_browser(self, data): self.server_protocol.dataReceived(data) def read_as_browser(self): s = self.server_protocol.transport.value() self.server_protocol.transport.clear() return s def write_as_server(self, data): self.client_protocol.dataReceived(data) def read_as_server(self): s = self.client_protocol.transport.value() self.client_protocol.transport.clear() return s