From 65ebd20a383264255bdb2934a03c48611624abe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Guimar=C3=A3es?= Date: Wed, 13 Dec 2017 18:36:47 -0200 Subject: [PATCH 1/5] Fix process.env._HANDLER undefined --- client/index.js | 2 +- client/index.tests.js | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/client/index.js b/client/index.js index e05cefb..43acda3 100644 --- a/client/index.js +++ b/client/index.js @@ -16,7 +16,7 @@ function getStorageProvider (options) { function load (options) { const mergedOptions = Object.assign({}, secrets.options, options) - const environmentSecrets = Object.assign({}, secrets.environments.$global, secrets.environments[process.env._HANDLER.split('.')[1]]) + const environmentSecrets = Object.assign({}, secrets.environments.$global, secrets.environments[process.env._HANDLER ? process.env._HANDLER.split('.')[1] : Object.keys(secrets.environments)[0]]) const parameterNames = _.uniq(_.values(environmentSecrets)) const provider = getStorageProvider(mergedOptions) return provider.getSecret(parameterNames).then(data => { diff --git a/client/index.tests.js b/client/index.tests.js index 3940768..fc33b77 100644 --- a/client/index.tests.js +++ b/client/index.tests.js @@ -21,11 +21,12 @@ const defaultSecrets = { } } -process.env._HANDLER = 'asdf.asdf' processEnvClone = _.cloneDeep(process.env) secrets = _.cloneDeep(defaultSecrets) test.beforeEach('create client', t => { + process.env._HANDLER = 'asdf.asdf' + awsModule = td.replace('../lib/providers/aws', td.function()) provider = td.object(['getSecret', 'setSecret']) td.when(awsModule(td.matchers.anything())).thenReturn(provider) @@ -58,6 +59,20 @@ test.serial.cb('load: happy path', t => { }) }) +test.serial.cb('load: process.env._HANDLER undefined', t => { + process.env._HANDLER = undefined + + secrets.environments.$global.test_variable = 'test_parameter' + + const promise = Promise.resolve({test_parameter: 'test_secret'}) + td.when(provider.getSecret(['test_parameter'])).thenReturn(promise) + + client.load().then(() => { + t.is(process.env.test_variable, 'test_secret') + t.end() + }) +}) + test.serial.cb('load: no env vars to retrieve', t => { td.when(provider.getSecret(td.matchers.anything())).thenReturn(Promise.resolve({})) From 11ecd76ccd18a2bda3d3d53359e661ae005902b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Guimar=C3=A3es?= Date: Thu, 14 Dec 2017 08:01:46 -0200 Subject: [PATCH 2/5] Revert "Fix process.env._HANDLER undefined" This reverts commit 65ebd20a383264255bdb2934a03c48611624abe0. --- client/index.js | 2 +- client/index.tests.js | 17 +---------------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/client/index.js b/client/index.js index 43acda3..e05cefb 100644 --- a/client/index.js +++ b/client/index.js @@ -16,7 +16,7 @@ function getStorageProvider (options) { function load (options) { const mergedOptions = Object.assign({}, secrets.options, options) - const environmentSecrets = Object.assign({}, secrets.environments.$global, secrets.environments[process.env._HANDLER ? process.env._HANDLER.split('.')[1] : Object.keys(secrets.environments)[0]]) + const environmentSecrets = Object.assign({}, secrets.environments.$global, secrets.environments[process.env._HANDLER.split('.')[1]]) const parameterNames = _.uniq(_.values(environmentSecrets)) const provider = getStorageProvider(mergedOptions) return provider.getSecret(parameterNames).then(data => { diff --git a/client/index.tests.js b/client/index.tests.js index fc33b77..3940768 100644 --- a/client/index.tests.js +++ b/client/index.tests.js @@ -21,12 +21,11 @@ const defaultSecrets = { } } +process.env._HANDLER = 'asdf.asdf' processEnvClone = _.cloneDeep(process.env) secrets = _.cloneDeep(defaultSecrets) test.beforeEach('create client', t => { - process.env._HANDLER = 'asdf.asdf' - awsModule = td.replace('../lib/providers/aws', td.function()) provider = td.object(['getSecret', 'setSecret']) td.when(awsModule(td.matchers.anything())).thenReturn(provider) @@ -59,20 +58,6 @@ test.serial.cb('load: happy path', t => { }) }) -test.serial.cb('load: process.env._HANDLER undefined', t => { - process.env._HANDLER = undefined - - secrets.environments.$global.test_variable = 'test_parameter' - - const promise = Promise.resolve({test_parameter: 'test_secret'}) - td.when(provider.getSecret(['test_parameter'])).thenReturn(promise) - - client.load().then(() => { - t.is(process.env.test_variable, 'test_secret') - t.end() - }) -}) - test.serial.cb('load: no env vars to retrieve', t => { td.when(provider.getSecret(td.matchers.anything())).thenReturn(Promise.resolve({})) From ccaa6a2c1eca0767e8a25bed83ff27b129711570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Guimar=C3=A3es?= Date: Thu, 14 Dec 2017 08:05:48 -0200 Subject: [PATCH 3/5] inject process.env._HANDLER --- plugin/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugin/index.js b/plugin/index.js index a1882f3..d0295c0 100644 --- a/plugin/index.js +++ b/plugin/index.js @@ -245,6 +245,12 @@ class ServerlessSecrets { if (!functions[functionName].environment) functions[functionName].environment = {} Object.assign(functions[functionName].environment, this.config.environments.$global, this.config.environments[functionName]) }) + + // process.env.IS_LOCAL === 'true' is set when called 'sls invoke local' + if (process.env._HANDLER === undefined && process.env.IS_LOCAL === 'true') { + const invokedFunction = functions[this.serverless.processedInput.options.function] + process.env._HANDLER = invokedFunction.handler + } } setIamPermissions () { From 04759f4d514f4e2453b6d9a4bbfc3c1804abba5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Guimar=C3=A3es?= Date: Thu, 14 Dec 2017 08:07:40 -0200 Subject: [PATCH 4/5] Fix comment --- plugin/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/index.js b/plugin/index.js index d0295c0..58cc7a7 100644 --- a/plugin/index.js +++ b/plugin/index.js @@ -246,7 +246,7 @@ class ServerlessSecrets { Object.assign(functions[functionName].environment, this.config.environments.$global, this.config.environments[functionName]) }) - // process.env.IS_LOCAL === 'true' is set when called 'sls invoke local' + // process.env.IS_LOCAL === 'true' is set when called by 'sls invoke local' if (process.env._HANDLER === undefined && process.env.IS_LOCAL === 'true') { const invokedFunction = functions[this.serverless.processedInput.options.function] process.env._HANDLER = invokedFunction.handler From 5e8f94fc3cfd5a6a7742134f9ea75717e28e512f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Guimar=C3=A3es?= Date: Thu, 14 Dec 2017 09:27:56 -0200 Subject: [PATCH 5/5] using this.options.function --- plugin/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/index.js b/plugin/index.js index 58cc7a7..29e0ff5 100644 --- a/plugin/index.js +++ b/plugin/index.js @@ -248,7 +248,7 @@ class ServerlessSecrets { // process.env.IS_LOCAL === 'true' is set when called by 'sls invoke local' if (process.env._HANDLER === undefined && process.env.IS_LOCAL === 'true') { - const invokedFunction = functions[this.serverless.processedInput.options.function] + const invokedFunction = functions[this.options.function] process.env._HANDLER = invokedFunction.handler } }