diff --git a/bin/client b/bin/client index b385452..129d1f5 100755 --- a/bin/client +++ b/bin/client @@ -11,12 +11,11 @@ var argv = require('optimist') describe: 'request this subdomain' }) .options('local-host', { - describe: 'tunnel traffic to this host instead of localhost' + describe: 'tunnel traffic to this host instead of localhost, override Host header to this host' }) .options('version', { describe: 'print version and exit' }) - .default('local-host', 'localhost') .describe('port', 'internal http server port') .argv; diff --git a/client.js b/client.js index 173f278..c6e6164 100644 --- a/client.js +++ b/client.js @@ -60,7 +60,7 @@ TunnelCluster.prototype.open = function() { var remote_host = opt.remote_host; var remote_port = opt.remote_port; - var local_host = opt.local_host; + var local_host = opt.local_host || 'localhost'; var local_port = opt.local_port; debug('establishing tunnel %s:%s <> %s:%s', local_host, local_port, remote_host, remote_port); @@ -133,10 +133,11 @@ TunnelCluster.prototype.open = function() { var stream = remote; - // if user requested something other than localhost + // if user requested specific local host // then we use host header transform to replace the host header - if (local_host !== 'localhost') { - stream = remote.pipe(HeaderHostTransformer({ host: local_host })); + if (opt.local_host) { + debug('transform Host header to %s', opt.local_host); + stream = remote.pipe(HeaderHostTransformer({ host: opt.local_host })); } stream.pipe(local).pipe(remote); @@ -224,7 +225,7 @@ Tunnel.prototype._establish = function(info) { var self = this; var opt = self._opt; - info.local_host = opt.local_host || 'localhost'; + info.local_host = opt.local_host; info.local_port = opt.port; var tunnels = self.tunnel_cluster = TunnelCluster(info); diff --git a/test/index.js b/test/index.js index 9b429f7..6f0ae6c 100644 --- a/test/index.js +++ b/test/index.js @@ -68,7 +68,51 @@ test('request specific domain', function(done) { }); }); -suite('local-host'); +suite('--local-host localhost'); + +test('setup localtunnel client', function(done) { + var opt = { + local_host: 'localhost' + }; + localtunnel(test._fake_port, opt, function(err, tunnel) { + assert.ifError(err); + assert.ok(new RegExp('^https:\/\/.*localtunnel.me' + '$').test(tunnel.url)); + test._fake_url = tunnel.url; + done(); + }); +}); + +test('override Host header with local-host', function(done) { + var uri = test._fake_url; + var parsed = url.parse(uri); + + var opt = { + host: parsed.host, + port: 443, + headers: { + host: parsed.hostname + }, + path: '/' + }; + + var req = https.request(opt, function(res) { + res.setEncoding('utf8'); + var body = ''; + + res.on('data', function(chunk) { + body += chunk; + }); + + res.on('end', function() { + assert.equal(body, 'localhost'); + done(); + }); + }); + + req.end(); +}); + +suite('--local-host 127.0.0.1'); test('setup localtunnel client', function(done) { var opt = { @@ -111,3 +155,4 @@ test('override Host header with local-host', function(done) { req.end(); }); +