handle connection within telebit
This commit is contained in:
parent
6f343a875d
commit
37591d11c6
|
@ -9,7 +9,6 @@ var remote = require('../remote.js');
|
||||||
var state = {};
|
var state = {};
|
||||||
|
|
||||||
var argv = process.argv.slice(2);
|
var argv = process.argv.slice(2);
|
||||||
//var Greenlock = require('greenlock');
|
|
||||||
|
|
||||||
var confIndex = argv.indexOf('--config');
|
var confIndex = argv.indexOf('--config');
|
||||||
var confpath;
|
var confpath;
|
||||||
|
@ -124,6 +123,8 @@ function connectTunnel() {
|
||||||
});
|
});
|
||||||
console.info('');
|
console.info('');
|
||||||
|
|
||||||
|
state.greenlock = state.config.greenlock || {};
|
||||||
|
// TODO Check undefined vs false for greenlock config
|
||||||
var tun = remote.connect({
|
var tun = remote.connect({
|
||||||
relay: state.config.relay
|
relay: state.config.relay
|
||||||
, locals: state.config.servernames
|
, locals: state.config.servernames
|
||||||
|
@ -131,6 +132,29 @@ function connectTunnel() {
|
||||||
, net: state.net
|
, net: state.net
|
||||||
, insecure: state.config.relay_ignore_invalid_certificates
|
, insecure: state.config.relay_ignore_invalid_certificates
|
||||||
, token: state.token
|
, token: state.token
|
||||||
|
, greenlockConfig: {
|
||||||
|
version: state.greenlock.version || 'draft-11'
|
||||||
|
, server: state.greenlock.server || 'https://acme-v02.api.letsencrypt.org/directory'
|
||||||
|
, communityMember: state.greenlock.communityMember || state.config.communityMember
|
||||||
|
, telemetry: state.greenlock.telemetry || state.config.telemetry
|
||||||
|
, configDir: state.greenlock.configDir || '~/acme/etc/'
|
||||||
|
// TODO, store: require(state.greenlock.store.name || 'le-store-certbot').create(state.greenlock.store.options || {})
|
||||||
|
, approveDomains: function (opts, certs, cb) {
|
||||||
|
// Certs being renewed are listed in certs.altnames
|
||||||
|
if (certs) {
|
||||||
|
opts.domains = certs.altnames;
|
||||||
|
cb(null, { options: opts, certs: certs });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-1 !== state.config.servernames.indexOf(opts.domains[0])) {
|
||||||
|
opts.email = state.greenlock.email || state.config.email;
|
||||||
|
opts.agreeTos = state.greenlock.agree || state.agreeTos;
|
||||||
|
cb(null, { options: opts, certs: certs });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function sigHandler() {
|
function sigHandler() {
|
||||||
|
|
|
@ -49,10 +49,12 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bluebird": "^3.5.1",
|
"bluebird": "^3.5.1",
|
||||||
"commander": "^2.9.0",
|
"commander": "^2.9.0",
|
||||||
|
"greenlock": "^2.2.19",
|
||||||
"js-yaml": "^3.11.0",
|
"js-yaml": "^3.11.0",
|
||||||
"jsonwebtoken": "^7.1.9",
|
"jsonwebtoken": "^7.1.9",
|
||||||
"recase": "^1.0.4",
|
"recase": "^1.0.4",
|
||||||
"sni": "^1.0.0",
|
"sni": "^1.0.0",
|
||||||
|
"socket-pair": "^1.0.3",
|
||||||
"tunnel-packer": "^1.2.0",
|
"tunnel-packer": "^1.2.0",
|
||||||
"ws": "^2.2.3"
|
"ws": "^2.2.3"
|
||||||
}
|
}
|
||||||
|
|
64
remote.js
64
remote.js
|
@ -320,14 +320,64 @@ function run(copts) {
|
||||||
, remoteAddress: opts.address
|
, remoteAddress: opts.address
|
||||||
, remotePort: opts.port
|
, remotePort: opts.port
|
||||||
};
|
};
|
||||||
var conn = net.createConnection(createOpts, function () {
|
var conn;
|
||||||
// this will happen before 'data' or 'readable' is triggered
|
|
||||||
// We use the data from the createOpts object so that the createConnection function has
|
function handleNow(socket) {
|
||||||
// the oppurtunity of removing/changing it if it wants/needs to handle it differently.
|
var httpServer;
|
||||||
if (createOpts.data) {
|
var tlsServer;
|
||||||
conn.write(createOpts.data);
|
if ('https' === service) {
|
||||||
|
if (!copts.greenlock) {
|
||||||
|
copts.greenlock = require('greenlock').create(copts.greenlockConfig);
|
||||||
|
}
|
||||||
|
httpServer = require('http').createServer(function (req, res) {
|
||||||
|
console.log('[hit http/s server]');
|
||||||
|
res.end('Hello, Encrypted Tunnel World!');
|
||||||
|
});
|
||||||
|
tlsServer = require('tls').createServer(copts.greenlock.tlsOptions, function (tlsSocket) {
|
||||||
|
console.log('[hit tls server]');
|
||||||
|
httpServer.emit('connection', tlsSocket);
|
||||||
|
});
|
||||||
|
tlsServer.emit('connection', socket);
|
||||||
|
} else {
|
||||||
|
httpServer = require('http').createServer(copts.greenlock.middleware(function (req, res) {
|
||||||
|
console.log('[hit pure http server]');
|
||||||
|
res.end('Hello, Encrypted Tunnel World!');
|
||||||
|
}));
|
||||||
|
// http://aj.telebit.cloud/.well-known/acme-challenge/blah
|
||||||
|
httpServer.emit('connection', socket);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
if ('aj.telebit.cloud' === servername) {
|
||||||
|
console.log('NEW CONNECTION to AJ\'s telebit could');
|
||||||
|
// For performance it may be better to use socket-pair, needs testing
|
||||||
|
var socketPair = require('socket-pair');
|
||||||
|
conn = socketPair.create(function (err, other) {
|
||||||
|
if (err) { console.error('[Error] ' + err.message); }
|
||||||
|
handleNow(other);
|
||||||
|
if (createOpts.data) {
|
||||||
|
conn.write(createOpts.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/*
|
||||||
|
var streamPair = require('stream-pair');
|
||||||
|
var pair = streamPair.create();
|
||||||
|
conn = pair.other;
|
||||||
|
process.nextTick(function () {
|
||||||
|
if (createOpts.data) {
|
||||||
|
conn.write(createOpts.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
} else {
|
||||||
|
conn = net.createConnection(createOpts, function () {
|
||||||
|
// this will happen before 'data' or 'readable' is triggered
|
||||||
|
// We use the data from the createOpts object so that the createConnection function has
|
||||||
|
// the oppurtunity of removing/changing it if it wants/needs to handle it differently.
|
||||||
|
if (createOpts.data) {
|
||||||
|
conn.write(createOpts.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
clientHandlers.add(conn, cid, opts, servername);
|
clientHandlers.add(conn, cid, opts, servername);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue