2018-09-14 23:54:14 +00:00
|
|
|
/**
|
|
|
|
* An array of all valid environment variables
|
|
|
|
* @constant
|
|
|
|
* @type {string[]}
|
|
|
|
*/
|
|
|
|
const env_whitelist = [
|
|
|
|
"CONTROL_HOST",
|
|
|
|
"TOR_PATH",
|
|
|
|
"INSTANCES",
|
|
|
|
"SOCKS_HOST",
|
|
|
|
"DNS_HOST",
|
|
|
|
"HTTP_HOST",
|
|
|
|
"LOG_LEVEL",
|
|
|
|
'PARENT_DATA_DIRECTORIES',
|
|
|
|
'LOAD_BALANCE_METHOD',
|
|
|
|
"WEBSOCKET_CONTROL_PORT",
|
|
|
|
"PROXY_BY_NAME",
|
|
|
|
"DENY_UNIDENTIFIED_USERS"
|
|
|
|
];
|
2018-08-10 04:57:47 +00:00
|
|
|
|
2018-09-14 23:54:14 +00:00
|
|
|
/**
|
|
|
|
* Converts a configuration property's name from env variable format to application config format
|
|
|
|
* `"CONTROL_HOST"` -> `"controlHost"`
|
|
|
|
* @param {string} env - Environment variable
|
|
|
|
* @returns {string}
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
function env_to_config(env) {
|
|
|
|
let a = env.toLowerCase().split('_');
|
|
|
|
i = 1;
|
|
|
|
while (i < a.length) {
|
|
|
|
a[i] = a[i][0].toUpperCase() + a[i].substr(1);
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
return a.join('');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets up nconf with the `env` store.
|
|
|
|
* @param {Provider} nconf - Instance of `nconf.Provider`.
|
|
|
|
* @returns {Provider} - Same instance of `nconf.Provider`.
|
|
|
|
*/
|
|
|
|
function setup_nconf_env(nconf) {
|
2018-08-10 04:57:47 +00:00
|
|
|
return nconf
|
|
|
|
.env({
|
2018-09-14 23:54:14 +00:00
|
|
|
whitelist: env_whitelist.concat(env_whitelist.map(env_to_config)),
|
2018-08-10 04:57:47 +00:00
|
|
|
parseValues: true,
|
|
|
|
transform: (obj) => {
|
|
|
|
if (env_whitelist.includes(obj.key)) {
|
|
|
|
if (obj.key.indexOf('_') !== -1) {
|
2018-09-14 23:54:14 +00:00
|
|
|
obj.key = env_to_config(obj.key);
|
2018-08-10 04:57:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
});
|
2018-09-14 23:54:14 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This module returns a function
|
|
|
|
* @module tor-router/nconf_load_env
|
|
|
|
*/
|
|
|
|
module.exports = setup_nconf_env;
|