made the --tunnel option (partially) work
This commit is contained in:
parent
5c7f2321cc
commit
509f2f4f4f
|
@ -137,6 +137,8 @@ function readConfigAndRun(args) {
|
||||||
config.addresses = addresses;
|
config.addresses = addresses;
|
||||||
config.device = { hostname: 'daplien-pod' };
|
config.device = { hostname: 'daplien-pod' };
|
||||||
|
|
||||||
|
config.tunnel = args.tunnel || config.tunnel;
|
||||||
|
|
||||||
var PromiseA = require('bluebird');
|
var PromiseA = require('bluebird');
|
||||||
var tcpProm, dnsProm;
|
var tcpProm, dnsProm;
|
||||||
|
|
||||||
|
|
51
lib/app.js
51
lib/app.js
|
@ -15,7 +15,6 @@ module.exports = function (myDeps, conf, overrideHttp) {
|
||||||
//var server;
|
//var server;
|
||||||
var serveInit;
|
var serveInit;
|
||||||
var app;
|
var app;
|
||||||
var tun;
|
|
||||||
var request;
|
var request;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -43,7 +42,6 @@ module.exports = function (myDeps, conf, overrideHttp) {
|
||||||
|
|
||||||
function createServeInit() {
|
function createServeInit() {
|
||||||
var PromiseA = require('bluebird');
|
var PromiseA = require('bluebird');
|
||||||
var stunnel = require('stunnel');
|
|
||||||
var OAUTH3 = require('../packages/assets/org.oauth3');
|
var OAUTH3 = require('../packages/assets/org.oauth3');
|
||||||
require('../packages/assets/org.oauth3/oauth3.domains.js');
|
require('../packages/assets/org.oauth3/oauth3.domains.js');
|
||||||
require('../packages/assets/org.oauth3/oauth3.dns.js');
|
require('../packages/assets/org.oauth3/oauth3.dns.js');
|
||||||
|
@ -143,8 +141,7 @@ module.exports = function (myDeps, conf, overrideHttp) {
|
||||||
providerUri: providerUri
|
providerUri: providerUri
|
||||||
, session: session
|
, session: session
|
||||||
});
|
});
|
||||||
//var crypto = require('crypto');
|
|
||||||
//var id = crypto.createHash('sha256').update(session.token.sub).digest('hex');
|
|
||||||
return oauth3.setProvider(providerUri).then(function () {
|
return oauth3.setProvider(providerUri).then(function () {
|
||||||
/*
|
/*
|
||||||
return oauth3.api('domains.list').then(function (domains) {
|
return oauth3.api('domains.list').then(function (domains) {
|
||||||
|
@ -173,55 +170,13 @@ module.exports = function (myDeps, conf, overrideHttp) {
|
||||||
}
|
}
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
console.log('got a token from the tunnel server?');
|
console.log('got a token from the tunnel server?');
|
||||||
console.log(result);
|
result.owner = session.id;
|
||||||
if (!result.tunnelUrl) {
|
deps.tunneler.add(result);
|
||||||
result.tunnelUrl = ('wss://' + (new Buffer(result.jwt.split('.')[1], 'base64').toString('ascii')).aud + '/');
|
|
||||||
}
|
|
||||||
var services = { https: { '*': 443 }, http: { '*': 80 }, smtp: { '*': 25}, smtps: { '*': 587 /*also 465/starttls*/ } /*, ssh: { '*': 22 }*/ };
|
|
||||||
/*
|
|
||||||
console.log('blah');
|
|
||||||
console.log(result.jwt);
|
|
||||||
console.log(result.tunnelUrl);
|
|
||||||
console.log(services);
|
|
||||||
console.log('deps.tunnel');
|
|
||||||
console.log(deps.tunnel);
|
|
||||||
console.log('deps.tunnel.net');
|
|
||||||
console.log(deps.tunnel.net.toString());
|
|
||||||
console.log('deps.net');
|
|
||||||
console.log(deps.net);
|
|
||||||
*/
|
|
||||||
var opts3 = {
|
|
||||||
token: result.jwt
|
|
||||||
, stunneld: result.tunnelUrl
|
|
||||||
// we'll provide faux networking and pipe as we please
|
|
||||||
, services: services
|
|
||||||
, net: myDeps.tunnel.net
|
|
||||||
};
|
|
||||||
|
|
||||||
console.log('blah 2');
|
|
||||||
if (tun) {
|
|
||||||
console.log('balh 3');
|
|
||||||
if (tun.append) {
|
|
||||||
tun.append(result.jwt);
|
|
||||||
}
|
|
||||||
else if (tun.end) {
|
|
||||||
tun.end();
|
|
||||||
tun = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('might have tunnel?');
|
|
||||||
if (!tun) {
|
|
||||||
console.log('connecting to the tunnel');
|
|
||||||
tun = stunnel.connect(opts3);
|
|
||||||
conf.tun = true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
/*
|
/*
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
});
|
});
|
||||||
//, { token: token, refresh: refresh });
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -184,6 +184,7 @@ module.exports.create = function (deps, config) {
|
||||||
return writer;
|
return writer;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
deps.tunneler = require('./tunnel-manager').create(deps, config);
|
||||||
|
|
||||||
var listenPromises = [];
|
var listenPromises = [];
|
||||||
var tcpPortMap = {};
|
var tcpPortMap = {};
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports.create = function (deps, config) {
|
||||||
|
var stunnel = require('stunnel');
|
||||||
|
var activeTunnels = {};
|
||||||
|
|
||||||
|
function addToken(data) {
|
||||||
|
if (!data.tunnelUrl) {
|
||||||
|
var decoded;
|
||||||
|
try {
|
||||||
|
decoded = JSON.parse(new Buffer(data.jwt.split('.')[1], 'base64').toString('ascii'));
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('invalid web token given to tunnel manager', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!decoded.aud) {
|
||||||
|
console.warn('tunnel manager given token with no tunnelUrl or audience');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
data.tunnelUrl = 'wss://' + decoded.aud + '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!activeTunnels[data.tunnelUrl]) {
|
||||||
|
console.log('creating new tunnel client for', data.tunnelUrl);
|
||||||
|
// We create the tunnel without an initial token so we can append the token and
|
||||||
|
// get the promise that should tell us more about if it worked or not.
|
||||||
|
activeTunnels[data.tunnelUrl] = stunnel.connect({
|
||||||
|
stunneld: data.tunnelUrl
|
||||||
|
, net: deps.tunnel.net
|
||||||
|
// NOTE: the ports here aren't that important since we are providing a custom
|
||||||
|
// `net.createConnection` that doesn't actually use the port. What is important
|
||||||
|
// is that any services we are interested in are listed in this object and have
|
||||||
|
// a '*' sub-property.
|
||||||
|
, services: {
|
||||||
|
https: { '*': 443 }
|
||||||
|
, http: { '*': 80 }
|
||||||
|
, smtp: { '*': 25 }
|
||||||
|
, smtps: { '*': 587 /*also 465/starttls*/ }
|
||||||
|
, ssh: { '*': 22 }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('appending token to tunnel at', data.tunnelUrl);
|
||||||
|
return activeTunnels[data.tunnelUrl].append(data.jwt);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof config.tunnel === 'string') {
|
||||||
|
config.tunnel.split(',').forEach(function (jwt) {
|
||||||
|
addToken({ jwt: jwt, owner: 'config' });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
add: addToken
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in New Issue