Sub host options: ala whitecolor #82
@@ -1,6 +1,6 @@
|
|||||||
# localtunnel-server
|
# localtunnel-server
|
||||||
|
|
||||||
[](https://travis-ci.org/localtunnel/server)
|
[](https://travis-ci.org/gojisystems/gojiconnect-server)
|
||||||
|
|
||||||
|
|
|||||||
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
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -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,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();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -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');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -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');
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user
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.