tor-router/src/nconf_load_env.js

63 lines
1.3 KiB
JavaScript

/**
* 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"
];
/**
* 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) {
return nconf
.env({
whitelist: env_whitelist.concat(env_whitelist.map(env_to_config)),
parseValues: true,
transform: (obj) => {
if (env_whitelist.includes(obj.key)) {
if (obj.key.indexOf('_') !== -1) {
obj.key = env_to_config(obj.key);
}
}
return obj;
}
});
};
/**
* This module returns a function
* @module tor-router/nconf_load_env
*/
module.exports = setup_nconf_env;