def mock_int_macro(modified_req=None, modified_rsp=None, drop_req=False, drop_rsp=False): macro = mock.MagicMock() if modified_req or drop_req: macro.async_req = True macro.intercept_requests = True if drop_req: newreq = None else: newreq = http.Request(modified_req) macro.async_mangle_request.return_value = mock_deferred(newreq) else: macro.intercept_requests = False if modified_rsp or drop_rsp: macro.async_rsp = True macro.intercept_responses = True if drop_rsp: newrsp = None else: newrsp = http.Response(modified_rsp) macro.async_mangle_response.return_value = mock_deferred(newrsp) else: macro.intercept_responses = False return macro
def handle_response_end(self, *args, **kwargs): if self._response_obj.response_code == 407: print "Incorrect credentials for HTTP proxy. Please check your username and password." self.transport.loseConnection() return if self.proxy_connected: self.log( "Received request while connected, forwarding to http proxy", verbosity_level=3) self.request.response = self._response_obj self.transport.loseConnection() assert self._response_obj.full_response self.data_defer.callback(self.request) elif self._response_obj.response_code != 200: print "Error establishing connection to proxy" self.transport.loseConnection() return elif self.connect_response: self.log("Response to CONNECT request recieved from http proxy", verbosity_level=3) self.proxy_connected = True self.stream_response = True self._response_obj = http.Response() self.setLineMode() self.completed = False self._sent = False self.log("Starting TLS", verbosity_level=3) self.transport.startTLS(ssl.ClientContextFactory()) self.log("TLS started", verbosity_level=3) lines = self.request.full_message.splitlines() for l in lines: self.log(l, symbol='>rpr', verbosity_level=3) self.transport.write(self.request.full_message)
def async_mangle_response(request): # This function gets called to mangle/edit respones passed through the proxy retrsp = request.response # Write original response to the temp file with tempfile.NamedTemporaryFile(delete=False) as tf: tfName = tf.name tf.write(request.response.full_response) # Have the console edit the file yield pappyproxy.console.edit_file(tfName, front=True) # Create new mangled response from edited file with open(tfName, 'r') as f: text = f.read() os.remove(tfName) # Check if dropped if text == '': pappyproxy.proxy.log('Response dropped!') defer.returnValue(None) mangled_rsp = http.Response(text, update_content_length=True) if mangled_rsp.full_response != request.response.full_response: mangled_rsp.unmangled = request.response retrsp = mangled_rsp defer.returnValue(retrsp)
def __init__(self, request): self.factory = None self._response_sent = False self._sent = False self.request = request self.data_defer = defer.Deferred() self._response_obj = http.Response()
def __init__(self, request): self.factory = None self._response_sent = False self._sent = False self.request = request self.data_defer = defer.Deferred() self.completed = False self.stream_response = True # used so child classes can temporarily turn off response streaming self.data_received = False # we assume something's wrong until we get some data self._response_obj = http.Response()
def send_response_back(self, request): if request.response is not None: self.transport.write(request.response.full_response) else: droppedrsp = http.Response(('HTTP/1.1 200 OK\r\n' 'Connection: close\r\n' 'Cache-control: no-cache\r\n' 'Pragma: no-cache\r\n' 'Cache-control: no-store\r\n' 'X-Frame-Options: DENY\r\n\r\n')) self.transport.write(droppedrsp.full_message) self.log("Response sent back, losing connection") self.transport.loseConnection()
def send_error_back(self, failure): errorrsp = http.Response( ('HTTP/1.1 200 OK\r\n' 'Connection: close\r\n' 'Cache-control: no-cache\r\n' 'Pragma: no-cache\r\n' 'Cache-control: no-store\r\n' 'X-Frame-Options: DENY\r\n' 'Content-Length: %d\r\n\r\n' '%s') % (len(str( failure.getErrorMessage())), str(failure.getErrorMessage()))) self.transport.write(errorrsp.full_message) self.log("Error response sent back, losing connection") self.transport.loseConnection()
def rsp_mangler_change(request): rsp = http.Response('HTTP/1.1 500 MANGLED\r\n\r\n') d = mock_deferred(rsp) return d