diff --git a/blockchain-rest-service/config.json b/blockchain-rest-service/default-config.json similarity index 100% rename from blockchain-rest-service/config.json rename to blockchain-rest-service/default-config.json diff --git a/blockchain-rest-service/package.json b/blockchain-rest-service/package.json index 29561cad4458ac4a4a027ef031d8d35d94f77f70..ccd5a8aa575a4cc223f1413b0c26813ff0f01505 100644 --- a/blockchain-rest-service/package.json +++ b/blockchain-rest-service/package.json @@ -10,11 +10,12 @@ "license": "ISC", "dependencies": { "body-parser": "1.18.2", + "change-case": "3.0.1", "ethers": "2.1.2", "express": "4.15.5", "http-status-codes": "^1.3.0", "morgan": "1.9.0", - "nconf": "0.8.5", + "nconf": "git+https://github.com/indexzero/nconf.git", "web3": "1.0.0-beta.22", "winston": "2.3.1" } diff --git a/blockchain-rest-service/utils/config.js b/blockchain-rest-service/utils/config.js index 59104fc9cc65aa1af3547e1ea5ea65e4408c3834..038ca58b4ffaab7b51f2e5e185e25a54dd5deb85 100644 --- a/blockchain-rest-service/utils/config.js +++ b/blockchain-rest-service/utils/config.js @@ -1,6 +1,26 @@ const nconf = require('nconf'); +const changeCase = require('change-case'); -nconf.argv().env(); -nconf.file({ file: 'config.json' }); +const ENV_VARIABLES_PREFIX = 'PFR_APP_'; + +function transformEnvVariable(keyValueObj) { + const { key, value } = keyValueObj; + const minKeyLength = ENV_VARIABLES_PREFIX.length + 1; + if (!key || !key.startsWith(ENV_VARIABLES_PREFIX) || key.length < minKeyLength) { + return false; + } + + return { + key: changeCase.camelCase(key.slice(ENV_VARIABLES_PREFIX.length)), + value + }; +} + +nconf.argv().env({ + transform: transformEnvVariable, + parseValues: true +}).file({ + file: 'default-config.json' +}); module.exports = nconf;