add --domain option to enable localtunnel servers on subdomains

This commit is contained in:
Roman Shtylman 2018-04-01 19:57:48 -07:00
parent 6b07a86ec1
commit 86dce49dd1
6 changed files with 76 additions and 9 deletions

View File

@ -29,6 +29,8 @@ 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).
**NOTE** By default, localtunnel will use subdomains for clients, if you plan to host your localtunnel server itself on a subdomain you will need to use the _--domain_ option and specify the domain name behind which you are hosting localtunnel. (i.e. my-localtunnel-server.example.com)
#### use your server
You can now use your domain with the `--host` flag for the `lt` client.

View File

@ -24,6 +24,9 @@ const argv = optimist
default: '0.0.0.0',
describe: 'IP address to bind to'
})
.options('domain', {
describe: 'Specify the base domain name. This is optional if hosting localtunnel from a regular example.com domain. This is required if hosting a localtunnel server from a subdomain (i.e. lt.example.dom where clients will be client-app.lt.example.come)',
})
.options('max-sockets', {
default: 10,
describe: 'maximum number of tcp sockets each client is allowed to establish at one time (the tunnels)'
@ -37,7 +40,8 @@ if (argv.help) {
const server = CreateServer({
max_tcp_sockets: argv['max-sockets'],
secure: argv.secure
secure: argv.secure,
domain: argv.domain,
});
server.listen(argv.port, argv.address, () => {

View File

@ -18,7 +18,7 @@
"on-finished": "2.3.0",
"optimist": "0.6.1",
"pump": "2.0.0",
"tldjs": "1.6.2"
"tldjs": "2.3.1"
},
"devDependencies": {
"localtunnel": "1.8.0",

View File

@ -9,13 +9,16 @@ import ClientManager from './lib/ClientManager';
const debug = Debug('localtunnel:server');
function GetClientIdFromHostname(hostname) {
return tldjs.getSubdomain(hostname);
}
export default function(opt) {
opt = opt || {};
const validHosts = (opt.domain) ? [opt.domain] : undefined;
const myTldjs = tldjs.fromUserSettings({ validHosts });
function GetClientIdFromHostname(hostname) {
return myTldjs.getSubdomain(hostname);
}
const manager = new ClientManager(opt);
const schema = opt.secure ? 'https' : 'http';

52
test/domain.js Normal file
View File

@ -0,0 +1,52 @@
import http from 'http';
import url from 'url';
import assert from 'assert';
import localtunnel from 'localtunnel';
import CreateServer from '../server';
const localtunnel_server = CreateServer({
domain: 'domain.example.com',
});
process.on('uncaughtException', (err) => {
console.error(err);
});
process.on('unhandledRejection', (reason, promise) => {
console.error(reason);
});
suite('domain');
var lt_server_port;
before('set up localtunnel server', function(done) {
var server = localtunnel_server.listen(function() {
lt_server_port = server.address().port;
done();
});
});
test('landing page', function(done) {
var opt = {
host: 'localhost',
port: lt_server_port,
headers: {
host: 'domain.example.com'
},
path: '/'
}
var req = http.request(opt, function(res) {
res.setEncoding('utf8');
assert.equal(res.headers.location, 'https://localtunnel.github.io/www/')
done();
});
req.end();
});
after('shutdown', function() {
localtunnel_server.close();
});

View File

@ -977,6 +977,10 @@ pump@2.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
qs@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.1.tgz#801fee030e0b9450d6385adc48a4cc55b44aedfc"
@ -1146,9 +1150,11 @@ supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
tldjs@1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/tldjs/-/tldjs-1.6.2.tgz#0d8b7145651f1052ac0b3c688843296636183b13"
tldjs@2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tldjs/-/tldjs-2.3.1.tgz#cf09c3eb5d7403a9e214b7d65f3cf9651c0ab039"
dependencies:
punycode "^1.4.1"
to-iso-string@0.0.2:
version "0.0.2"