diff --git a/packages/api/src/utility/connectUtility.js b/packages/api/src/utility/connectUtility.js index d0bed40cc..a1c997191 100644 --- a/packages/api/src/utility/connectUtility.js +++ b/packages/api/src/utility/connectUtility.js @@ -3,9 +3,10 @@ const { decryptConnection } = require('./crypting'); const { getSshTunnelProxy } = require('./sshTunnelProxy'); const platformInfo = require('../utility/platformInfo'); const connections = require('../controllers/connections'); +const _ = require('lodash'); async function loadConnection(driver, storedConnection, connectionMode) { - const { allowShellConnection } = platformInfo; + const { allowShellConnection, allowConnectionFromEnvVariables } = platformInfo; if (connectionMode == 'app') { return storedConnection; @@ -33,6 +34,16 @@ async function loadConnection(driver, storedConnection, connectionMode) { } return loadedWithDb; } + + if (allowConnectionFromEnvVariables) { + return _.mapValues(storedConnection, (value, key) => { + if (_.isString(value) && value.startsWith('$')) { + return process.env[value.substring(1)]; + } + return value; + }); + } + return storedConnection; } diff --git a/packages/api/src/utility/platformInfo.js b/packages/api/src/utility/platformInfo.js index 9de3c3562..6bb5e2776 100644 --- a/packages/api/src/utility/platformInfo.js +++ b/packages/api/src/utility/platformInfo.js @@ -44,6 +44,7 @@ const platformInfo = { (!processArgs.listenApiChild && !isNpmDist) || !!process.env.SHELL_CONNECTION || !!isElectron() || !!isDbModel, allowShellScripting: (!processArgs.listenApiChild && !isNpmDist) || !!process.env.SHELL_SCRIPTING || !!isElectron() || !!isDbModel, + allowConnectionFromEnvVariables: !!isDbModel, defaultKeyfile: path.join(os.homedir(), '.ssh/id_rsa'), };