2017-04-27 02:16:47 +00:00
|
|
|
'use strict';
|
|
|
|
|
2017-06-09 18:40:39 +00:00
|
|
|
var config;
|
2017-10-10 17:08:19 +00:00
|
|
|
var modules;
|
2017-06-09 18:40:39 +00:00
|
|
|
|
|
|
|
// Everything that uses the config should be reading it when relevant rather than
|
|
|
|
// just at the beginning, so we keep the reference for the main object and just
|
|
|
|
// change all of its properties to match the new config.
|
|
|
|
function update(conf) {
|
|
|
|
var newKeys = Object.keys(conf);
|
|
|
|
|
|
|
|
Object.keys(config).forEach(function (key) {
|
|
|
|
if (newKeys.indexOf(key) < 0) {
|
|
|
|
delete config[key];
|
|
|
|
} else {
|
|
|
|
config[key] = conf[key];
|
|
|
|
}
|
|
|
|
});
|
2017-10-10 17:08:19 +00:00
|
|
|
|
|
|
|
console.log('config update', JSON.stringify(config));
|
|
|
|
Object.values(modules).forEach(function (mod) {
|
|
|
|
if (typeof mod.updateConf === 'function') {
|
|
|
|
mod.updateConf(config);
|
|
|
|
}
|
|
|
|
});
|
2017-06-09 18:40:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function create(conf) {
|
2017-09-26 00:06:48 +00:00
|
|
|
var PromiseA = require('bluebird');
|
|
|
|
var OAUTH3 = require('../packages/assets/org.oauth3');
|
|
|
|
require('../packages/assets/org.oauth3/oauth3.domains.js');
|
|
|
|
require('../packages/assets/org.oauth3/oauth3.dns.js');
|
|
|
|
require('../packages/assets/org.oauth3/oauth3.tunnel.js');
|
|
|
|
OAUTH3._hooks = require('../packages/assets/org.oauth3/oauth3.node.storage.js');
|
|
|
|
|
2017-06-09 18:40:39 +00:00
|
|
|
config = conf;
|
2017-04-27 02:16:47 +00:00
|
|
|
var deps = {
|
|
|
|
messenger: process
|
2017-09-26 00:06:48 +00:00
|
|
|
, PromiseA: PromiseA
|
|
|
|
, OAUTH3: OAUTH3
|
|
|
|
, request: PromiseA.promisify(require('request'))
|
|
|
|
, recase: require('recase').create({})
|
2017-05-10 22:05:54 +00:00
|
|
|
// Note that if a custom createConnections is used it will be called with different
|
|
|
|
// sets of custom options based on what is actually being proxied. Most notably the
|
|
|
|
// HTTP proxying connection creation is not something we currently control.
|
2017-04-27 22:05:34 +00:00
|
|
|
, net: require('net')
|
2017-04-27 02:16:47 +00:00
|
|
|
};
|
2017-10-10 17:08:19 +00:00
|
|
|
|
|
|
|
modules = {
|
|
|
|
storage: require('./storage').create(deps, conf)
|
|
|
|
, socks5: require('./socks5-server').create(deps, conf)
|
|
|
|
, ddns: require('./ddns').create(deps, conf)
|
2017-10-27 18:56:09 +00:00
|
|
|
, mdns: require('./mdns').create(deps, conf)
|
2017-10-26 22:27:10 +00:00
|
|
|
, udp: require('./udp').create(deps, conf)
|
2017-10-30 21:57:18 +00:00
|
|
|
, tcp: require('./tcp').create(deps, conf)
|
2017-10-31 21:39:24 +00:00
|
|
|
, stunneld: require('./tunnel-server-manager').create(deps, config)
|
2017-10-10 17:08:19 +00:00
|
|
|
};
|
|
|
|
Object.assign(deps, modules);
|
2017-05-17 20:06:24 +00:00
|
|
|
|
2017-06-09 18:40:39 +00:00
|
|
|
process.removeListener('message', create);
|
|
|
|
process.on('message', update);
|
|
|
|
}
|
|
|
|
|
|
|
|
process.on('message', create);
|