Sub host options: ala whitecolor #82

Closed
gojisystems wants to merge 7 commits from master into master
6 changed files with 218 additions and 69 deletions
Showing only changes of commit 09d9affa92 - Show all commits
+8 -1
View File
@@ -1,6 +1,6 @@
# localtunnel-server # localtunnel-server
[![Build Status](https://travis-ci.org/localtunnel/server.svg?branch=master)](https://travis-ci.org/localtunnel/server) [![Build Status](https://travis-ci.org/gojisystems/gojiconnect-server.svg?branch=master)](https://travis-ci.org/gojisystems/gojiconnect-server)
defunctzombie commented 2018-04-02 02:31:36 +00:00 (Migrated from github.com)
Review

When making a PR please don't alter files in this way as such a change can't be merged into this repo as-is. This is great for your repo but for the PR it should be removed.

When making a PR please don't alter files in this way as such a change can't be merged into this repo as-is. This is great for your repo but for the PR it should be removed.
localtunnel exposes your localhost to the world for easy testing and sharing! No need to mess with DNS or deploy just to have others test out your changes. localtunnel exposes your localhost to the world for easy testing and sharing! No need to mess with DNS or deploy just to have others test out your changes.
@@ -30,6 +30,7 @@ bin/server --port 1234
The localtunnel server is now running and waiting for client requests on port 1234. You will most likely want to set up a reverse proxy to listen on port 80 (or start localtunnel on port 80 directly). The localtunnel server is now running and waiting for client requests on port 1234. You will most likely want to set up a reverse proxy to listen on port 80 (or start localtunnel on port 80 directly).
**Note** that to use sub-hosts you should pass `--sub-host` option during set up. Pass this argument for every sub-host level. **Note** that to use sub-hosts you should pass `--sub-host` option during set up. Pass this argument for every sub-host level.
Alternatively, `--sub-host` may be passed in as a single argument with the all sub hosts in a string `"nested.sub"`
```shell ```shell
# server set to run on port 1234 w/ a sub host to allow for this URL to work "http://sub.example.com" # server set to run on port 1234 w/ a sub host to allow for this URL to work "http://sub.example.com"
@@ -43,6 +44,12 @@ bin/server --port 1234 \
--sub-host nested \ --sub-host nested \
--sub-host sub --sub-host sub
``` ```
**Alternative**
```shell
# server set to run on port 1234 w/ a sub host to allow for this URL to work "http://nested.sub.example.com"
bin/server --port 1234 \
--sub-host "nested.sub"
```
## use your server ## use your server
+68
View File
@@ -0,0 +1,68 @@
var http = require('http');
var url = require('url');
var assert = require('assert');
var localtunnel = require('localtunnel');
var localtunnel_server = require('../server')({
max_tcp_sockets: 2,
subHost: ['nested','sub']
});
var lt_server_port
suite('nested-sub');
test('set up localtunnel server', function(done) {
var server = localtunnel_server.listen(function() {
lt_server_port = server.address().port;
done();
});
});
test('set up local http server', function(done) {
var server = http.createServer(function(req, res) {
res.end('hello world!');
});
server.listen(function() {
test._fake_port = server.address().port;
done();
});
});
test('set up localtunnel client (sub-host)', function (done) {
var opt = {
host: 'http://nested.sub.host:' + lt_server_port,
subdomain: 'txy-z'
};
localtunnel(test._fake_port, opt, function (err, tunnel) {
assert.ifError(err);
var url = tunnel.url;
assert.ok(new RegExp('^http:\/\/.*nested.sub.host:' + lt_server_port + '$').test(url));
test._fake_url = url;
done(err);
});
});
test('should respond to request (sub-host)', function (done) {
var hostname = url.parse(test._fake_url).hostname;
var opt = {
host: 'nested.sub.host',
port: lt_server_port,
headers: {
host: hostname + '.tld'
}
};
http.get(opt, function (res) {
var body = '';
res.setEncoding('utf-8');
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
assert.equal(body, 'hello world!');
done();
});
});
});
+68
View File
@@ -0,0 +1,68 @@
var http = require('http');
var url = require('url');
var assert = require('assert');
var localtunnel = require('localtunnel');
var localtunnel_server = require('../server')({
max_tcp_sockets: 2,
subHost: ['nested.sub']
});
var lt_server_port
suite('nested.sub');
test('set up localtunnel server', function(done) {
var server = localtunnel_server.listen(function() {
lt_server_port = server.address().port;
done();
});
});
test('set up local http server', function(done) {
var server = http.createServer(function(req, res) {
res.end('hello world!');
});
server.listen(function() {
test._fake_port = server.address().port;
done();
});
});
test('set up localtunnel client (sub-host)', function (done) {
var opt = {
host: 'http://nested.sub.host:' + lt_server_port,
subdomain: 'txy-z'
};
localtunnel(test._fake_port, opt, function (err, tunnel) {
assert.ifError(err);
var url = tunnel.url;
assert.ok(new RegExp('^http:\/\/.*nested.sub.host:' + lt_server_port + '$').test(url));
test._fake_url = url;
done(err);
});
});
test('should respond to request (sub-host)', function (done) {
var hostname = url.parse(test._fake_url).hostname;
var opt = {
host: 'nested.sub.host',
port: lt_server_port,
headers: {
host: hostname + '.tld'
}
};
http.get(opt, function (res) {
var body = '';
res.setEncoding('utf-8');
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
assert.equal(body, 'hello world!');
done();
});
});
});
-37
View File
@@ -68,40 +68,3 @@ test('should respond to request', function(done) {
}); });
}); });
}); });
test('set up localtunnel client (sub-host)', function (done) {
var opt = {
host: 'http://nested.sub.host:' + lt_server_port,
subdomain: 'txy-z'
};
localtunnel(test._fake_port, opt, function (err, tunnel) {
assert.ifError(err);
var url = tunnel.url;
assert.ok(new RegExp('^http:\/\/.*nested.sub.host:' + lt_server_port + '$').test(url));
test._fake_url = url;
done(err);
});
});
test('should respond to request (sub-host)', function (done) {
var hostname = url.parse(test._fake_url).hostname;
var opt = {
host: 'nested.sub.host',
port: lt_server_port,
headers: {
host: hostname + '.tld'
}
};
http.get(opt, function (res) {
var body = '';
res.setEncoding('utf-8');
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
assert.equal(body, 'hello world!');
done();
});
});
});
-31
View File
@@ -73,34 +73,3 @@ test('websocket server request', function(done) {
ws.send('something'); ws.send('something');
}); });
}); });
test('set up localtunnel client (sub host)', function (done) {
var opt = {
host: 'http://sub.host:' + lt_server_port
};
localtunnel(test._fake_port, opt, function (err, tunnel) {
assert.ifError(err);
var url = tunnel.url;
assert.ok(new RegExp('^http:\/\/.*sub.host:' + lt_server_port + '$').test(url));
test._fake_url = url;
done(err);
});
});
test('websocket server request (sub-host)', function (done) {
var hostname = url.parse(test._fake_url).hostname;
var ws = new WebSocket('http://sub.host:' + lt_server_port, {
headers: {
host: hostname + '.tld'
}
});
ws.on('message', function (msg) {
assert.equal(msg, 'something');
done();
});
ws.on('open', function open() {
ws.send('something');
});
});
+74
View File
@@ -0,0 +1,74 @@
var http = require('http');
var url = require('url');
var assert = require('assert');
var localtunnel = require('localtunnel');
var WebSocket = require('ws');
var WebSocketServer = require('ws').Server;
var localtunnel_server = require('../server')({
max_tcp_sockets: 2,
subHost: ['sub']
});
var lt_server_port
suite('websocket.sub');
before('set up localtunnel server', function(done) {
var server = localtunnel_server.listen(function() {
lt_server_port = server.address().port;
done();
});
});
before('set up local websocket server', function(done) {
var wss = new WebSocketServer({ port: 0 }, function() {
test._fake_port = wss._server.address().port;
done();
});
wss.on('error', function(err) {
done(err);
});
wss.on('connection', function connection(ws) {
ws.on('error', function(err) {
done(err);
});
ws.on('message', function incoming(message) {
ws.send(message);
});
});
});
test('set up localtunnel client (sub host)', function (done) {
var opt = {
host: 'http://sub.host:' + lt_server_port
};
localtunnel(test._fake_port, opt, function (err, tunnel) {
assert.ifError(err);
var url = tunnel.url;
assert.ok(new RegExp('^http:\/\/.*sub.host:' + lt_server_port + '$').test(url));
test._fake_url = url;
done(err);
});
});
test('websocket server request (sub-host)', function (done) {
var hostname = url.parse(test._fake_url).hostname;
var ws = new WebSocket('http://sub.host:' + lt_server_port, {
headers: {
host: hostname + '.tld'
}
});
ws.on('message', function (msg) {
assert.equal(msg, 'something');
done();
});
ws.on('open', function open() {
ws.send('something');
});
});