node-mitm icon indicating copy to clipboard operation
node-mitm copied to clipboard

Make connect opts available to request listeners

Open papandreou opened this issue 10 years ago • 2 comments

I'm implementing a "recording" mode in my testing lib where it would be really useful to know the originally intended host/port/etc. of the intercepted connection, which were passed as the second parameter to the connect listeners. Right now I can either try to get the host and port number from the Host header, which might not be the correct value, or I can have listeners for both the connect and request events and try to pair them up, which also seems like a fool's errand as they aren't necessarily one-to-one when keep-alive is in play.

Would it be possible to pass the connect opts as the third parameter to the request listeners?

Properly mocking out {req,res}.socket.{remote,local}{Family,Address,Port} would also be really nice, but even if they were, it would be nice to have the original, non-resolved host available.

papandreou avatar Feb 12 '15 15:02 papandreou

:+1:

vvo avatar Apr 01 '15 08:04 vvo

Just documenting here my hacks to get around this until a proper solution is implemented:

mitm.on('connect', (socket, opts) => {
  let serverSocket = undefined;
  Object.defineProperty(socket, 'serverSocket', {
    set(server) {
      serverSocket = server;
      server._mitm = { client: socket, opts };
    },
    get() {
      return serverSocket;
    },
  });
});

mitm.on('request', (req, res) => {
  const { client, opts } = req.connection._mitm;
});

OR

mitm.on('connect', (socket, opts) => {
  socket._handle.remote._mitm = { client: socket, opts };
});

mitm.on('request', (req, res) => {
  const { client, opts } = req.connection._handle._mitm;
});

jakzo avatar Nov 09 '18 15:11 jakzo