Skip to content
This repository was archived by the owner on Jul 26, 2022. It is now read-only.

Commit 1d5a9dd

Browse files
authored
fix(AWSSM): treat value as object iff the es specifies .property (#74)
See #73 for discussion.
1 parent 5da11a0 commit 1d5a9dd

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

lib/backends/kv-backend.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,16 @@ class KVBackend extends AbstractBackend {
2828
const value = await this._get({ secretKey: secretProperty.key })
2929

3030
if ('property' in secretProperty) {
31-
return value[secretProperty.property]
31+
let parsedValue
32+
try {
33+
parsedValue = JSON.parse(value)
34+
} catch (err) {
35+
this._logger.warn(`Failed to JSON.parse '${value}':`, err)
36+
return
37+
}
38+
return parsedValue[secretProperty.property]
3239
}
40+
3341
return value
3442
}))
3543
}

lib/backends/kv-backend.test.js

+14-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ describe('SecretsManagerBackend', () => {
1313
beforeEach(() => {
1414
loggerMock = sinon.mock()
1515
loggerMock.info = sinon.stub()
16+
loggerMock.warn = sinon.stub()
1617

1718
kvBackend = new KVBackend({
1819
logger: loggerMock
@@ -26,7 +27,7 @@ describe('SecretsManagerBackend', () => {
2627
})
2728

2829
it('handles secrets values that are objects', async () => {
29-
kvBackend._get.onFirstCall().resolves({ foo: 'bar' })
30+
kvBackend._get.onFirstCall().resolves('{"foo":"bar"}')
3031
const secretPropertyValues = await kvBackend._fetchSecretPropertyValues({
3132
externalData: [{
3233
key: 'mocked-key',
@@ -37,6 +38,18 @@ describe('SecretsManagerBackend', () => {
3738
expect(secretPropertyValues).to.deep.equal(['bar'])
3839
})
3940

41+
it('handles invalid JSON objects', async () => {
42+
kvBackend._get.onFirstCall().resolves('{')
43+
const secretPropertyValues = await kvBackend._fetchSecretPropertyValues({
44+
externalData: [{
45+
key: 'mocked-key',
46+
name: 'mocked-name',
47+
property: 'foo'
48+
}]
49+
})
50+
expect(secretPropertyValues).to.deep.equal([undefined])
51+
})
52+
4053
it('fetches secret property values', async () => {
4154
kvBackend._get.onFirstCall().resolves('fakePropertyValue1')
4255
kvBackend._get.onSecondCall().resolves('fakePropertyValue2')

lib/backends/secrets-manager-backend.js

+1-6
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,7 @@ class SecretsManagerBackend extends KVBackend {
2424
.getSecretValue({ SecretId: secretKey })
2525
.promise()
2626

27-
const secretValue = data.SecretString
28-
try {
29-
return JSON.parse(secretValue)
30-
} catch (err) {
31-
return secretValue
32-
}
27+
return data.SecretString
3328
}
3429
}
3530

0 commit comments

Comments
 (0)