nconf_load_env.js

/**
 * 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;