Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
    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()
Ejemplo n.º 6
0
 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()
Ejemplo n.º 7
0
 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()
Ejemplo n.º 8
0
def rsp_mangler_change(request):
    rsp = http.Response('HTTP/1.1 500 MANGLED\r\n\r\n')
    d = mock_deferred(rsp)
    return d