aws-delivlib 13.4.2 → 13.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/create-release.js +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package-lock.json +100 -95
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package.json +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/publish.sh +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/sign-files.sh +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/with-signing-key.sh +0 -0
- package/cdk.out/{asset.dc2e98009b027861f34e56eebb81faa5a3951ed9da80ce4a903a45de04268238 → asset.3044256b9586ecb8a7709713aaca30ceb34f699e3f93c8858f633aaf2f0c7140}/index.js +17 -11
- package/cdk.out/delivlib-test.assets.json +8 -8
- package/cdk.out/delivlib-test.template.json +32 -27
- package/cdk.out/manifest.json +272 -272
- package/cdk.out/tree.json +442 -437
- package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
- package/lib/publishing/github/package-lock.json +100 -95
- package/package.json +17 -18
- package/lib/__tests__/auto-build.test.d.ts +0 -1
- package/lib/__tests__/auto-build.test.js +0 -119
- package/lib/__tests__/build-spec.test.d.ts +0 -1
- package/lib/__tests__/build-spec.test.js +0 -82
- package/lib/__tests__/bump.test.d.ts +0 -1
- package/lib/__tests__/bump.test.js +0 -284
- package/lib/__tests__/canary.test.d.ts +0 -1
- package/lib/__tests__/canary.test.js +0 -144
- package/lib/__tests__/change-control-lambda/disable-transition.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/disable-transition.test.js +0 -64
- package/lib/__tests__/change-control-lambda/handler.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/handler.test.js +0 -143
- package/lib/__tests__/change-control-lambda/time-window.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/time-window.test.js +0 -131
- package/lib/__tests__/chime-notifier.test.d.ts +0 -6
- package/lib/__tests__/chime-notifier.test.js +0 -138
- package/lib/__tests__/code-signing-cert.test.d.ts +0 -1
- package/lib/__tests__/code-signing-cert.test.js +0 -72
- package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.js +0 -100
- package/lib/__tests__/custom-resource-handlers/_exec.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_exec.test.js +0 -9
- package/lib/__tests__/custom-resource-handlers/_rmrf.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_rmrf.test.js +0 -13
- package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.js +0 -171
- package/lib/__tests__/custom-resource-handlers/pgp-secret.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/pgp-secret.test.js +0 -169
- package/lib/__tests__/custom-resource-handlers/private-key.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/private-key.test.js +0 -164
- package/lib/__tests__/integ.delivlib.d.ts +0 -1
- package/lib/__tests__/integ.delivlib.js +0 -33
- package/lib/__tests__/open-pgp-key-pair.test.d.ts +0 -1
- package/lib/__tests__/open-pgp-key-pair.test.js +0 -130
- package/lib/__tests__/pipeline-notifications/chime.test.d.ts +0 -1
- package/lib/__tests__/pipeline-notifications/chime.test.js +0 -69
- package/lib/__tests__/pipeline-notifications/slack.test.d.ts +0 -1
- package/lib/__tests__/pipeline-notifications/slack.test.js +0 -82
- package/lib/__tests__/pipeline.test.d.ts +0 -1
- package/lib/__tests__/pipeline.test.js +0 -362
- package/lib/__tests__/pr.test.d.ts +0 -3
- package/lib/__tests__/pr.test.js +0 -88
- package/lib/__tests__/publishing.test.d.ts +0 -1
- package/lib/__tests__/publishing.test.js +0 -89
- package/lib/__tests__/registry-sync/ecr-mirror.test.d.ts +0 -1
- package/lib/__tests__/registry-sync/ecr-mirror.test.js +0 -313
- package/lib/__tests__/registry-sync/mirror-source.test.d.ts +0 -1
- package/lib/__tests__/registry-sync/mirror-source.test.js +0 -225
- package/lib/__tests__/shellable.test.d.ts +0 -1
- package/lib/__tests__/shellable.test.js +0 -479
- package/lib/__tests__/test-stack.d.ts +0 -4
- package/lib/__tests__/test-stack.js +0 -184
- package/lib/__tests__/watcher-handler.test.d.ts +0 -1
- package/lib/__tests__/watcher-handler.test.js +0 -190
- package/lib/__tests__/watcher.test.d.ts +0 -1
- package/lib/__tests__/watcher.test.js +0 -78
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
4
|
-
const crypto = require("crypto");
|
|
5
|
-
const fs = require("fs");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const aws = require("aws-sdk");
|
|
8
|
-
const jest_create_mock_instance_1 = require("jest-create-mock-instance");
|
|
9
|
-
const cfn = require("../../custom-resource-handlers/src/_cloud-formation");
|
|
10
|
-
const context = { awsRequestId: 'E3802D69-27F8-44F0-9E4C-3329A8736A4C' };
|
|
11
|
-
const mockTmpDir = '/tmp/directory/is/phony';
|
|
12
|
-
const mockPrivateKey = '---BEGIN RSA FAKE PRIVATE KEY---';
|
|
13
|
-
const mockPublicKey = '---BEGIN RSA FAKE PUBLIC KEY---';
|
|
14
|
-
const mockEventBase = {
|
|
15
|
-
LogicalResourceId: 'ResourceID12345689',
|
|
16
|
-
ResponseURL: 'https://response/url',
|
|
17
|
-
RequestId: '5EF100FB-0075-4716-970B-FBCA05BFE118',
|
|
18
|
-
ResourceProperties: {
|
|
19
|
-
ServiceToken: 'Service-Token (Would be the function ARN',
|
|
20
|
-
ResourceVersion: 'The hash of the function code',
|
|
21
|
-
KeySizeBits: 4096,
|
|
22
|
-
Identity: 'Test Identity',
|
|
23
|
-
Email: 'test@amazon.com',
|
|
24
|
-
Expiry: '1d',
|
|
25
|
-
SecretName: 'Secret/Name/Shhhhh',
|
|
26
|
-
KeyArn: 'alias/KmsKey',
|
|
27
|
-
Description: 'Description',
|
|
28
|
-
},
|
|
29
|
-
ResourceType: 'Custom::Resource::Type',
|
|
30
|
-
StackId: 'StackID-1324597',
|
|
31
|
-
};
|
|
32
|
-
const secretArn = 'arn::::::secret';
|
|
33
|
-
const passphrase = crypto.randomBytes(32);
|
|
34
|
-
const keyConfig = `Key-Type: RSA
|
|
35
|
-
Key-Length: ${mockEventBase.ResourceProperties.KeySizeBits}
|
|
36
|
-
Name-Real: ${mockEventBase.ResourceProperties.Identity}
|
|
37
|
-
Name-Email: ${mockEventBase.ResourceProperties.Email}
|
|
38
|
-
Expire-Date: ${mockEventBase.ResourceProperties.Expiry}
|
|
39
|
-
Passphrase: ${passphrase.toString('base64')}
|
|
40
|
-
%commit
|
|
41
|
-
%echo done`;
|
|
42
|
-
jest.spyOn(crypto, 'randomBytes').mockImplementation(() => passphrase);
|
|
43
|
-
jest.spyOn(fs, 'mkdtemp')
|
|
44
|
-
.mockImplementation(async (_, cb) => cb(undefined, mockTmpDir));
|
|
45
|
-
const writeFile = fs.writeFile = jest.fn().mockName('fs.writeFile')
|
|
46
|
-
.mockImplementation((_pth, _data, _opts, cb) => cb());
|
|
47
|
-
jest.mock('../../custom-resource-handlers/src/_exec', () => async (cmd, ...args) => {
|
|
48
|
-
await expect(cmd).toBe('/opt/gpg');
|
|
49
|
-
const process = require('process');
|
|
50
|
-
await expect(process.env.GNUPGHOME).toBe(mockTmpDir);
|
|
51
|
-
await expect(args).toContain('--batch');
|
|
52
|
-
if (args.indexOf('--gen-key') !== -1) {
|
|
53
|
-
await expect(args[args.indexOf('--gen-key') + 1]).toBe(require('path').join(mockTmpDir, 'key.config'));
|
|
54
|
-
return '';
|
|
55
|
-
}
|
|
56
|
-
await expect(args).toContain('--yes');
|
|
57
|
-
if (args.indexOf('--import') !== -1) {
|
|
58
|
-
return '';
|
|
59
|
-
}
|
|
60
|
-
await expect(args).toContain('--armor');
|
|
61
|
-
if (args.indexOf('--export') !== -1) {
|
|
62
|
-
return mockPublicKey;
|
|
63
|
-
}
|
|
64
|
-
else if (args.indexOf('--export-secret-keys') !== -1) {
|
|
65
|
-
return mockPrivateKey;
|
|
66
|
-
}
|
|
67
|
-
throw new Error('Invalid call to _exec');
|
|
68
|
-
});
|
|
69
|
-
const mockSecretsManager = (0, jest_create_mock_instance_1.createMockInstance)(aws.SecretsManager);
|
|
70
|
-
aws.SecretsManager = jest.fn().mockName('SecretsManager')
|
|
71
|
-
.mockImplementation(() => mockSecretsManager);
|
|
72
|
-
const mockSendResponse = jest.spyOn(cfn, 'sendResponse').mockName('cfn.sendResponse').mockResolvedValue(Promise.resolve());
|
|
73
|
-
const mockRmrf = jest.fn().mockName('_rmrf').mockResolvedValue(undefined);
|
|
74
|
-
jest.mock('../../custom-resource-handlers/src/_rmrf', () => mockRmrf);
|
|
75
|
-
test('Create', async () => {
|
|
76
|
-
const event = {
|
|
77
|
-
RequestType: cfn.RequestType.CREATE,
|
|
78
|
-
PhysicalResourceId: undefined,
|
|
79
|
-
...mockEventBase,
|
|
80
|
-
};
|
|
81
|
-
mockSecretsManager.createSecret = jest.fn().mockName('SecretsManager.createSecret')
|
|
82
|
-
.mockImplementation(() => ({ promise: () => Promise.resolve({ ARN: secretArn, VersionId: 'Secret-VersionId' }) }));
|
|
83
|
-
const { handler } = require('../../custom-resource-handlers/src/pgp-secret');
|
|
84
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
85
|
-
await expect(writeFile)
|
|
86
|
-
.toBeCalledWith(path.join(mockTmpDir, 'key.config'), keyConfig, expect.anything(), expect.any(Function));
|
|
87
|
-
await expect(mockRmrf)
|
|
88
|
-
.toBeCalledWith(mockTmpDir);
|
|
89
|
-
await expect(mockSecretsManager.createSecret)
|
|
90
|
-
.toBeCalledWith({
|
|
91
|
-
ClientRequestToken: context.awsRequestId,
|
|
92
|
-
Description: event.ResourceProperties.Description,
|
|
93
|
-
KmsKeyId: event.ResourceProperties.KeyArn,
|
|
94
|
-
Name: event.ResourceProperties.SecretName,
|
|
95
|
-
SecretString: JSON.stringify({
|
|
96
|
-
PrivateKey: mockPrivateKey,
|
|
97
|
-
Passphrase: passphrase.toString('base64'),
|
|
98
|
-
}),
|
|
99
|
-
});
|
|
100
|
-
return expect(mockSendResponse)
|
|
101
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, secretArn, {
|
|
102
|
-
Ref: secretArn,
|
|
103
|
-
SecretArn: secretArn,
|
|
104
|
-
PublicKey: mockPublicKey,
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
test('Update', async () => {
|
|
108
|
-
const event = {
|
|
109
|
-
RequestType: cfn.RequestType.UPDATE,
|
|
110
|
-
PhysicalResourceId: secretArn,
|
|
111
|
-
OldResourceProperties: {
|
|
112
|
-
...mockEventBase.ResourceProperties,
|
|
113
|
-
Description: 'Old Description',
|
|
114
|
-
KeyArn: 'alias/OldKey',
|
|
115
|
-
},
|
|
116
|
-
...mockEventBase,
|
|
117
|
-
};
|
|
118
|
-
mockSecretsManager.updateSecret = jest.fn().mockName('SecretsManager.updateSecret')
|
|
119
|
-
.mockImplementation(() => ({ promise: () => Promise.resolve({ ARN: secretArn }) }));
|
|
120
|
-
mockSecretsManager.getSecretValue = jest.fn().mockName('SecretsManager.getSecretValue')
|
|
121
|
-
.mockImplementation(() => ({
|
|
122
|
-
promise: () => Promise.resolve({
|
|
123
|
-
SecretString: JSON.stringify({
|
|
124
|
-
PrivateKey: mockPrivateKey,
|
|
125
|
-
Passphrase: passphrase.toString('base64'),
|
|
126
|
-
}),
|
|
127
|
-
}),
|
|
128
|
-
}));
|
|
129
|
-
const { handler } = require('../../custom-resource-handlers/src/pgp-secret');
|
|
130
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
131
|
-
await expect(mockSecretsManager.updateSecret)
|
|
132
|
-
.toBeCalledWith({
|
|
133
|
-
ClientRequestToken: context.awsRequestId,
|
|
134
|
-
SecretId: secretArn,
|
|
135
|
-
Description: event.ResourceProperties.Description,
|
|
136
|
-
KmsKeyId: event.ResourceProperties.KeyArn,
|
|
137
|
-
});
|
|
138
|
-
await expect(mockSecretsManager.getSecretValue)
|
|
139
|
-
.toBeCalledWith({ SecretId: secretArn });
|
|
140
|
-
await expect(mockRmrf)
|
|
141
|
-
.toBeCalledWith(mockTmpDir);
|
|
142
|
-
return expect(mockSendResponse)
|
|
143
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, secretArn, {
|
|
144
|
-
Ref: secretArn,
|
|
145
|
-
SecretArn: secretArn,
|
|
146
|
-
PublicKey: mockPublicKey,
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
test('Delete', async () => {
|
|
150
|
-
const event = {
|
|
151
|
-
RequestType: cfn.RequestType.DELETE,
|
|
152
|
-
PhysicalResourceId: secretArn,
|
|
153
|
-
...mockEventBase,
|
|
154
|
-
};
|
|
155
|
-
mockSecretsManager.deleteSecret = jest.fn()
|
|
156
|
-
.mockName('SecretsManager.deleteSecret')
|
|
157
|
-
.mockImplementation(() => ({ promise: () => Promise.resolve() }));
|
|
158
|
-
const { handler } = require('../../custom-resource-handlers/src/pgp-secret');
|
|
159
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
160
|
-
await expect(mockSecretsManager.deleteSecret).toBeCalledWith({
|
|
161
|
-
SecretId: secretArn,
|
|
162
|
-
ForceDeleteWithoutRecovery: false,
|
|
163
|
-
});
|
|
164
|
-
return expect(mockSendResponse)
|
|
165
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, event.PhysicalResourceId, {
|
|
166
|
-
Ref: event.PhysicalResourceId,
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGdwLXNlY3JldC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGdwLXNlY3JldC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMERBQTBEO0FBQzFELGlDQUFrQztBQUNsQyx5QkFBMEI7QUFDMUIsNkJBQThCO0FBQzlCLCtCQUFnQztBQUNoQyx5RUFBK0Q7QUFDL0QsMkVBQTRFO0FBRzVFLE1BQU0sT0FBTyxHQUFtQixFQUFFLFlBQVksRUFBRSxzQ0FBc0MsRUFBUyxDQUFDO0FBQ2hHLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDO0FBQzdDLE1BQU0sY0FBYyxHQUFHLGtDQUFrQyxDQUFDO0FBQzFELE1BQU0sYUFBYSxHQUFHLGlDQUFpQyxDQUFDO0FBQ3hELE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGlCQUFpQixFQUFFLG9CQUFvQjtJQUN2QyxXQUFXLEVBQUUsc0JBQXNCO0lBQ25DLFNBQVMsRUFBRSxzQ0FBc0M7SUFDakQsa0JBQWtCLEVBQUU7UUFDbEIsWUFBWSxFQUFFLDBDQUEwQztRQUN4RCxlQUFlLEVBQUUsK0JBQStCO1FBRWhELFdBQVcsRUFBRSxJQUFLO1FBQ2xCLFFBQVEsRUFBRSxlQUFlO1FBQ3pCLEtBQUssRUFBRSxpQkFBaUI7UUFDeEIsTUFBTSxFQUFFLElBQUk7UUFDWixVQUFVLEVBQUUsb0JBQW9CO1FBQ2hDLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLFdBQVcsRUFBRSxhQUFhO0tBQzNCO0lBQ0QsWUFBWSxFQUFFLHdCQUF3QjtJQUN0QyxPQUFPLEVBQUUsaUJBQWlCO0NBQzNCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztBQUVwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTFDLE1BQU0sU0FBUyxHQUFHO2NBQ0osYUFBYSxDQUFDLGtCQUFrQixDQUFDLFdBQVc7YUFDN0MsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFFBQVE7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LGNBQWMsQ0FBQztRQUMzRCxRQUFRLEVBQUUsU0FBUztRQUNuQiwwQkFBMEIsRUFBRSxLQUFLO0tBQ2xDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDO1NBQzVCLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFO1FBQ25FLEdBQUcsRUFBRSxLQUFLLENBQUMsa0JBQWtCO0tBQzlCLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuaW1wb3J0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuaW1wb3J0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmltcG9ydCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuaW1wb3J0IGF3cyA9IHJlcXVpcmUoJ2F3cy1zZGsnKTtcbmltcG9ydCB7IGNyZWF0ZU1vY2tJbnN0YW5jZSB9IGZyb20gJ2plc3QtY3JlYXRlLW1vY2staW5zdGFuY2UnO1xuaW1wb3J0IGNmbiA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvX2Nsb3VkLWZvcm1hdGlvbicpO1xuaW1wb3J0IGxhbWJkYSA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvX2xhbWJkYScpO1xuXG5jb25zdCBjb250ZXh0OiBsYW1iZGEuQ29udGV4dCA9IHsgYXdzUmVxdWVzdElkOiAnRTM4MDJENjktMjdGOC00NEYwLTlFNEMtMzMyOUE4NzM2QTRDJyB9IGFzIGFueTtcbmNvbnN0IG1vY2tUbXBEaXIgPSAnL3RtcC9kaXJlY3RvcnkvaXMvcGhvbnknO1xuY29uc3QgbW9ja1ByaXZhdGVLZXkgPSAnLS0tQkVHSU4gUlNBIEZBS0UgUFJJVkFURSBLRVktLS0nO1xuY29uc3QgbW9ja1B1YmxpY0tleSA9ICctLS1CRUdJTiBSU0EgRkFLRSBQVUJMSUMgS0VZLS0tJztcbmNvbnN0IG1vY2tFdmVudEJhc2UgPSB7XG4gIExvZ2ljYWxSZXNvdXJjZUlkOiAnUmVzb3VyY2VJRDEyMzQ1Njg5JyxcbiAgUmVzcG9uc2VVUkw6ICdodHRwczovL3Jlc3BvbnNlL3VybCcsXG4gIFJlcXVlc3RJZDogJzVFRjEwMEZCLTAwNzUtNDcxNi05NzBCLUZCQ0EwNUJGRTExOCcsXG4gIFJlc291cmNlUHJvcGVydGllczoge1xuICAgIFNlcnZpY2VUb2tlbjogJ1NlcnZpY2UtVG9rZW4gKFdvdWxkIGJlIHRoZSBmdW5jdGlvbiBBUk4nLFxuICAgIFJlc291cmNlVmVyc2lvbjogJ1RoZSBoYXNoIG9mIHRoZSBmdW5jdGlvbiBjb2RlJyxcblxuICAgIEtleVNpemVCaXRzOiA0XzA5NixcbiAgICBJZGVudGl0eTogJ1Rlc3QgSWRlbnRpdHknLFxuICAgIEVtYWlsOiAndGVzdEBhbWF6b24uY29tJyxcbiAgICBFeHBpcnk6ICcxZCcsXG4gICAgU2VjcmV0TmFtZTogJ1NlY3JldC9OYW1lL1NoaGhoaCcsXG4gICAgS2V5QXJuOiAnYWxpYXMvS21zS2V5JyxcbiAgICBEZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcbiAgfSxcbiAgUmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpSZXNvdXJjZTo6VHlwZScsXG4gIFN0YWNrSWQ6ICdTdGFja0lELTEzMjQ1OTcnLFxufTtcblxuY29uc3Qgc2VjcmV0QXJuID0gJ2Fybjo6Ojo6OnNlY3JldCc7XG5cbmNvbnN0IHBhc3NwaHJhc2UgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpO1xuXG5jb25zdCBrZXlDb25maWcgPSBgS2V5LVR5cGU6IFJTQVxuS2V5LUxlbmd0aDogJHttb2NrRXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5LZXlTaXplQml0c31cbk5hbWUtUmVhbDogJHttb2NrRXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5JZGVudGl0eX1cbk5hbWUtRW1haWw6ICR7bW9ja0V2ZW50QmFzZS5SZXNvdXJjZVByb3BlcnRpZXMuRW1haWx9XG5FeHBpcmUtRGF0ZTogJHttb2NrRXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5FeHBpcnl9XG5QYXNzcGhyYXNlOiAke3Bhc3NwaHJhc2UudG9TdHJpbmcoJ2Jhc2U2NCcpfVxuJWNvbW1pdFxuJWVjaG8gZG9uZWA7XG5cbmplc3Quc3B5T24oY3J5cHRvLCAncmFuZG9tQnl0ZXMnKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gcGFzc3BocmFzZSk7XG5qZXN0LnNweU9uKGZzLCAnbWtkdGVtcCcpXG4gIC5tb2NrSW1wbGVtZW50YXRpb24oYXN5bmMgKF8sIGNiKSA9PiBjYih1bmRlZmluZWQgYXMgYW55LCBtb2NrVG1wRGlyKSk7XG5jb25zdCB3cml0ZUZpbGUgPSBmcy53cml0ZUZpbGUgPSBqZXN0LmZuKCkubW9ja05hbWUoJ2ZzLndyaXRlRmlsZScpXG4gIC5tb2NrSW1wbGVtZW50YXRpb24oKF9wdGgsIF9kYXRhLCBfb3B0cywgY2IpID0+IGNiKCkpIGFzIGFueTtcbmplc3QubW9jaygnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9fZXhlYycsICgpID0+IGFzeW5jIChjbWQ6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pID0+IHtcbiAgYXdhaXQgZXhwZWN0KGNtZCkudG9CZSgnL29wdC9ncGcnKTtcbiAgY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MnKTtcbiAgYXdhaXQgZXhwZWN0KHByb2Nlc3MuZW52LkdOVVBHSE9NRSkudG9CZShtb2NrVG1wRGlyKTtcbiAgYXdhaXQgZXhwZWN0KGFyZ3MpLnRvQ29udGFpbignLS1iYXRjaCcpO1xuICBpZiAoYXJncy5pbmRleE9mKCctLWdlbi1rZXknKSAhPT0gLTEpIHtcbiAgICBhd2FpdCBleHBlY3QoYXJnc1thcmdzLmluZGV4T2YoJy0tZ2VuLWtleScpICsgMV0pLnRvQmUocmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2tleS5jb25maWcnKSk7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGF3YWl0IGV4cGVjdChhcmdzKS50b0NvbnRhaW4oJy0teWVzJyk7XG4gIGlmIChhcmdzLmluZGV4T2YoJy0taW1wb3J0JykgIT09IC0xKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGF3YWl0IGV4cGVjdChhcmdzKS50b0NvbnRhaW4oJy0tYXJtb3InKTtcbiAgaWYgKGFyZ3MuaW5kZXhPZignLS1leHBvcnQnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gbW9ja1B1YmxpY0tleTtcbiAgfSBlbHNlIGlmIChhcmdzLmluZGV4T2YoJy0tZXhwb3J0LXNlY3JldC1rZXlzJykgIT09IC0xKSB7XG4gICAgcmV0dXJuIG1vY2tQcml2YXRlS2V5O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjYWxsIHRvIF9leGVjJyk7XG59KTtcbmNvbnN0IG1vY2tTZWNyZXRzTWFuYWdlciA9IGNyZWF0ZU1vY2tJbnN0YW5jZShhd3MuU2VjcmV0c01hbmFnZXIpO1xuYXdzLlNlY3JldHNNYW5hZ2VyID0gamVzdC5mbigpLm1vY2tOYW1lKCdTZWNyZXRzTWFuYWdlcicpXG4gIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja1NlY3JldHNNYW5hZ2VyKSBhcyBhbnk7XG5jb25zdCBtb2NrU2VuZFJlc3BvbnNlID0gamVzdC5zcHlPbihjZm4sICdzZW5kUmVzcG9uc2UnKS5tb2NrTmFtZSgnY2ZuLnNlbmRSZXNwb25zZScpLm1vY2tSZXNvbHZlZFZhbHVlKFByb21pc2UucmVzb2x2ZSgpKTtcbmNvbnN0IG1vY2tSbXJmID0gamVzdC5mbigpLm1vY2tOYW1lKCdfcm1yZicpLm1vY2tSZXNvbHZlZFZhbHVlKHVuZGVmaW5lZCk7XG5qZXN0Lm1vY2soJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvX3JtcmYnLCAoKSA9PiBtb2NrUm1yZik7XG5cbnRlc3QoJ0NyZWF0ZScsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZXZlbnQ6IGNmbi5FdmVudCA9IHtcbiAgICBSZXF1ZXN0VHlwZTogY2ZuLlJlcXVlc3RUeXBlLkNSRUFURSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHVuZGVmaW5lZCxcbiAgICAuLi5tb2NrRXZlbnRCYXNlLFxuICB9O1xuXG4gIG1vY2tTZWNyZXRzTWFuYWdlci5jcmVhdGVTZWNyZXQgPSBqZXN0LmZuKCkubW9ja05hbWUoJ1NlY3JldHNNYW5hZ2VyLmNyZWF0ZVNlY3JldCcpXG4gICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoeyBwcm9taXNlOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoeyBBUk46IHNlY3JldEFybiwgVmVyc2lvbklkOiAnU2VjcmV0LVZlcnNpb25JZCcgfSkgfSkpIGFzIGFueTtcblxuICBjb25zdCB7IGhhbmRsZXIgfSA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvcGdwLXNlY3JldCcpO1xuICBhd2FpdCBleHBlY3QoaGFuZGxlcihldmVudCwgY29udGV4dCkpLnJlc29sdmVzLnRvQmUodW5kZWZpbmVkKTtcblxuICBhd2FpdCBleHBlY3Qod3JpdGVGaWxlKVxuICAgIC50b0JlQ2FsbGVkV2l0aChwYXRoLmpvaW4obW9ja1RtcERpciwgJ2tleS5jb25maWcnKSxcbiAgICAgIGtleUNvbmZpZyxcbiAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgZXhwZWN0LmFueShGdW5jdGlvbikpO1xuICBhd2FpdCBleHBlY3QobW9ja1JtcmYpXG4gICAgLnRvQmVDYWxsZWRXaXRoKG1vY2tUbXBEaXIpO1xuICBhd2FpdCBleHBlY3QobW9ja1NlY3JldHNNYW5hZ2VyLmNyZWF0ZVNlY3JldClcbiAgICAudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiBjb250ZXh0LmF3c1JlcXVlc3RJZCxcbiAgICAgIERlc2NyaXB0aW9uOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuRGVzY3JpcHRpb24sXG4gICAgICBLbXNLZXlJZDogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLktleUFybixcbiAgICAgIE5hbWU6IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5TZWNyZXROYW1lLFxuICAgICAgU2VjcmV0U3RyaW5nOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIFByaXZhdGVLZXk6IG1vY2tQcml2YXRlS2V5LFxuICAgICAgICBQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICByZXR1cm4gZXhwZWN0KG1vY2tTZW5kUmVzcG9uc2UpXG4gICAgLnRvQmVDYWxsZWRXaXRoKGV2ZW50LFxuICAgICAgY2ZuLlN0YXR1cy5TVUNDRVNTLFxuICAgICAgc2VjcmV0QXJuLFxuICAgICAge1xuICAgICAgICBSZWY6IHNlY3JldEFybixcbiAgICAgICAgU2VjcmV0QXJuOiBzZWNyZXRBcm4sXG4gICAgICAgIFB1YmxpY0tleTogbW9ja1B1YmxpY0tleSxcbiAgICAgIH0pO1xufSk7XG5cbnRlc3QoJ1VwZGF0ZScsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZXZlbnQ6IGNmbi5FdmVudCA9IHtcbiAgICBSZXF1ZXN0VHlwZTogY2ZuLlJlcXVlc3RUeXBlLlVQREFURSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHNlY3JldEFybixcbiAgICBPbGRSZXNvdXJjZVByb3BlcnRpZXM6IHtcbiAgICAgIC4uLm1vY2tFdmVudEJhc2UuUmVzb3VyY2VQcm9wZXJ0aWVzLFxuICAgICAgRGVzY3JpcHRpb246ICdPbGQgRGVzY3JpcHRpb24nLFxuICAgICAgS2V5QXJuOiAnYWxpYXMvT2xkS2V5JyxcbiAgICB9LFxuICAgIC4uLm1vY2tFdmVudEJhc2UsXG4gIH07XG5cbiAgbW9ja1NlY3JldHNNYW5hZ2VyLnVwZGF0ZVNlY3JldCA9IGplc3QuZm4oKS5tb2NrTmFtZSgnU2VjcmV0c01hbmFnZXIudXBkYXRlU2VjcmV0JylcbiAgICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7IHByb21pc2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7IEFSTjogc2VjcmV0QXJuIH0pIH0pKSBhcyBhbnk7XG4gIG1vY2tTZWNyZXRzTWFuYWdlci5nZXRTZWNyZXRWYWx1ZSA9IGplc3QuZm4oKS5tb2NrTmFtZSgnU2VjcmV0c01hbmFnZXIuZ2V0U2VjcmV0VmFsdWUnKVxuICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgICAgIHByb21pc2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIFNlY3JldFN0cmluZzogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIFByaXZhdGVLZXk6IG1vY2tQcml2YXRlS2V5LFxuICAgICAgICAgIFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pKSBhcyBhbnk7XG5cbiAgY29uc3QgeyBoYW5kbGVyIH0gPSByZXF1aXJlKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL3BncC1zZWNyZXQnKTtcbiAgYXdhaXQgZXhwZWN0KGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpKS5yZXNvbHZlcy50b0JlKHVuZGVmaW5lZCk7XG4gIGF3YWl0IGV4cGVjdChtb2NrU2VjcmV0c01hbmFnZXIudXBkYXRlU2VjcmV0KVxuICAgIC50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICBDbGllbnRSZXF1ZXN0VG9rZW46IGNvbnRleHQuYXdzUmVxdWVzdElkLFxuICAgICAgU2VjcmV0SWQ6IHNlY3JldEFybixcbiAgICAgIERlc2NyaXB0aW9uOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuRGVzY3JpcHRpb24sXG4gICAgICBLbXNLZXlJZDogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLktleUFybixcbiAgICB9KTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tTZWNyZXRzTWFuYWdlci5nZXRTZWNyZXRWYWx1ZSlcbiAgICAudG9CZUNhbGxlZFdpdGgoeyBTZWNyZXRJZDogc2VjcmV0QXJuIH0pO1xuICBhd2FpdCBleHBlY3QobW9ja1JtcmYpXG4gICAgLnRvQmVDYWxsZWRXaXRoKG1vY2tUbXBEaXIpO1xuICByZXR1cm4gZXhwZWN0KG1vY2tTZW5kUmVzcG9uc2UpXG4gICAgLnRvQmVDYWxsZWRXaXRoKGV2ZW50LFxuICAgICAgY2ZuLlN0YXR1cy5TVUNDRVNTLFxuICAgICAgc2VjcmV0QXJuLFxuICAgICAge1xuICAgICAgICBSZWY6IHNlY3JldEFybixcbiAgICAgICAgU2VjcmV0QXJuOiBzZWNyZXRBcm4sXG4gICAgICAgIFB1YmxpY0tleTogbW9ja1B1YmxpY0tleSxcbiAgICAgIH0pO1xufSk7XG5cbnRlc3QoJ0RlbGV0ZScsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZXZlbnQ6IGNmbi5FdmVudCA9IHtcbiAgICBSZXF1ZXN0VHlwZTogY2ZuLlJlcXVlc3RUeXBlLkRFTEVURSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHNlY3JldEFybixcbiAgICAuLi5tb2NrRXZlbnRCYXNlLFxuICB9O1xuICBtb2NrU2VjcmV0c01hbmFnZXIuZGVsZXRlU2VjcmV0ID0gamVzdC5mbigpXG4gICAgLm1vY2tOYW1lKCdTZWNyZXRzTWFuYWdlci5kZWxldGVTZWNyZXQnKVxuICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHsgcHJvbWlzZTogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCkgfSkpO1xuXG4gIGNvbnN0IHsgaGFuZGxlciB9ID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9wZ3Atc2VjcmV0Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIGF3YWl0IGV4cGVjdChtb2NrU2VjcmV0c01hbmFnZXIuZGVsZXRlU2VjcmV0KS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldEFybixcbiAgICBGb3JjZURlbGV0ZVdpdGhvdXRSZWNvdmVyeTogZmFsc2UsXG4gIH0pO1xuXG4gIHJldHVybiBleHBlY3QobW9ja1NlbmRSZXNwb25zZSlcbiAgICAudG9CZUNhbGxlZFdpdGgoZXZlbnQsIGNmbi5TdGF0dXMuU1VDQ0VTUywgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkLCB7XG4gICAgICBSZWY6IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICB9KTtcbn0pO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const aws = require("aws-sdk");
|
|
6
|
-
const jest_create_mock_instance_1 = require("jest-create-mock-instance");
|
|
7
|
-
const cfn = require("../../custom-resource-handlers/src/_cloud-formation");
|
|
8
|
-
const context = { awsRequestId: '90E99AAE-B120-409A-9156-0C5925FDD996' };
|
|
9
|
-
const mockKeySize = 4096;
|
|
10
|
-
const eventBase = {
|
|
11
|
-
LogicalResourceId: 'ResourceID12345689',
|
|
12
|
-
ResponseURL: 'https://response/url',
|
|
13
|
-
RequestId: '5EF100FB-0075-4716-970B-FBCA05BFE118',
|
|
14
|
-
ResourceProperties: {
|
|
15
|
-
ServiceToken: 'Service-Token (Would be the function ARN',
|
|
16
|
-
ResourceVersion: 'The hash of the function code',
|
|
17
|
-
Description: 'Description of my secret',
|
|
18
|
-
KeySize: 4096,
|
|
19
|
-
KmsKeyId: 'alias/KmsKey',
|
|
20
|
-
SecretName: 'Sekret/Name/Shhhh',
|
|
21
|
-
},
|
|
22
|
-
ResourceType: 'Custom::Resource::Type',
|
|
23
|
-
StackId: 'StackID-1324597',
|
|
24
|
-
};
|
|
25
|
-
const mockTmpDir = '/tmp/directory/is/phony';
|
|
26
|
-
const mockPrivateKey = 'Phony PEM-Encoded Private Key';
|
|
27
|
-
const secretArn = 'arn::::::secret';
|
|
28
|
-
cfn.sendResponse = jest.fn().mockName('cfn.sendResponse').mockResolvedValue(undefined);
|
|
29
|
-
jest.mock('../../custom-resource-handlers/src/_exec', () => async (cmd, ...args) => {
|
|
30
|
-
await expect(cmd).toBe('/opt/openssl');
|
|
31
|
-
await expect(args).toEqual(['genrsa', '-out', require('path').join(mockTmpDir, 'private_key.pem'), mockKeySize]);
|
|
32
|
-
return '';
|
|
33
|
-
});
|
|
34
|
-
jest.spyOn(fs, 'mkdtemp').mockName('fs.mkdtemp')
|
|
35
|
-
.mockImplementation(async (_, cb) => cb(undefined, mockTmpDir));
|
|
36
|
-
fs.readFile = jest.fn().mockName('fs.readFile')
|
|
37
|
-
.mockImplementation(async (file, opts, cb) => {
|
|
38
|
-
await expect(file).toBe(require('path').join(mockTmpDir, 'private_key.pem'));
|
|
39
|
-
await expect(opts.encoding).toBe('utf8');
|
|
40
|
-
return cb(undefined, mockPrivateKey);
|
|
41
|
-
});
|
|
42
|
-
const mockSecretsManager = (0, jest_create_mock_instance_1.createMockInstance)(aws.SecretsManager);
|
|
43
|
-
aws.SecretsManager = jest.fn().mockName('SecretsManager')
|
|
44
|
-
.mockImplementation(() => mockSecretsManager);
|
|
45
|
-
mockSecretsManager.createSecret = jest.fn().mockName('SecretsManager.createSecret')
|
|
46
|
-
.mockImplementation(() => ({ promise: () => Promise.resolve({ ARN: secretArn, VersionId: 'Secret-VersionID' }) }));
|
|
47
|
-
mockSecretsManager.updateSecret = jest.fn().mockName('SecretsManager.updateSecret')
|
|
48
|
-
.mockImplementation(() => ({ promise: () => Promise.resolve({ ARN: secretArn }) }));
|
|
49
|
-
mockSecretsManager.deleteSecret = jest.fn().mockName('SecretsManager.deleteSecret')
|
|
50
|
-
.mockImplementation(() => ({ promise: () => Promise.resolve({}) }));
|
|
51
|
-
const mockRmrf = jest.fn().mockName('_rmrf').mockResolvedValue(undefined);
|
|
52
|
-
jest.mock('../../custom-resource-handlers/src/_rmrf', () => mockRmrf);
|
|
53
|
-
beforeEach(() => jest.clearAllMocks());
|
|
54
|
-
test('Create', async () => {
|
|
55
|
-
const event = {
|
|
56
|
-
RequestType: cfn.RequestType.CREATE,
|
|
57
|
-
PhysicalResourceId: undefined,
|
|
58
|
-
...eventBase,
|
|
59
|
-
};
|
|
60
|
-
const { handler } = require('../../custom-resource-handlers/src/private-key');
|
|
61
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
62
|
-
await expect(mockSecretsManager.createSecret)
|
|
63
|
-
.toBeCalledWith({
|
|
64
|
-
ClientRequestToken: context.awsRequestId,
|
|
65
|
-
Description: event.ResourceProperties.Description,
|
|
66
|
-
KmsKeyId: event.ResourceProperties.KmsKeyId,
|
|
67
|
-
Name: event.ResourceProperties.SecretName,
|
|
68
|
-
SecretString: mockPrivateKey,
|
|
69
|
-
});
|
|
70
|
-
await expect(mockSecretsManager.updateSecret).not.toBeCalled();
|
|
71
|
-
await expect(mockSecretsManager.deleteSecret).not.toBeCalled();
|
|
72
|
-
await expect(mockRmrf).toBeCalledWith(mockTmpDir);
|
|
73
|
-
return expect(cfn.sendResponse)
|
|
74
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, secretArn, { Ref: secretArn, SecretArn: secretArn });
|
|
75
|
-
});
|
|
76
|
-
test('Update (changing KeySize)', async () => {
|
|
77
|
-
const event = {
|
|
78
|
-
RequestType: cfn.RequestType.UPDATE,
|
|
79
|
-
PhysicalResourceId: secretArn,
|
|
80
|
-
OldResourceProperties: {
|
|
81
|
-
...eventBase.ResourceProperties,
|
|
82
|
-
KeySize: mockKeySize * 2,
|
|
83
|
-
},
|
|
84
|
-
...eventBase,
|
|
85
|
-
};
|
|
86
|
-
const { handler } = require('../../custom-resource-handlers/src/private-key');
|
|
87
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
88
|
-
await expect(mockSecretsManager.createSecret).not.toBeCalled();
|
|
89
|
-
await expect(mockSecretsManager.updateSecret).not.toBeCalled();
|
|
90
|
-
await expect(mockSecretsManager.deleteSecret).not.toBeCalled();
|
|
91
|
-
return expect(cfn.sendResponse)
|
|
92
|
-
.toBeCalledWith(event, cfn.Status.FAILED, secretArn, {}, expect.stringContaining('The KeySize property cannot be updated'));
|
|
93
|
-
});
|
|
94
|
-
test('Update (changing SecretName)', async () => {
|
|
95
|
-
const event = {
|
|
96
|
-
RequestType: cfn.RequestType.UPDATE,
|
|
97
|
-
PhysicalResourceId: secretArn,
|
|
98
|
-
OldResourceProperties: {
|
|
99
|
-
...eventBase.ResourceProperties,
|
|
100
|
-
SecretName: 'Old/Secret/Name',
|
|
101
|
-
},
|
|
102
|
-
...eventBase,
|
|
103
|
-
};
|
|
104
|
-
const { handler } = require('../../custom-resource-handlers/src/private-key');
|
|
105
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
106
|
-
await expect(mockSecretsManager.createSecret).not.toBeCalled();
|
|
107
|
-
await expect(mockSecretsManager.updateSecret).not.toBeCalled();
|
|
108
|
-
await expect(mockSecretsManager.deleteSecret).not.toBeCalled();
|
|
109
|
-
return expect(cfn.sendResponse)
|
|
110
|
-
.toBeCalledWith(event, cfn.Status.FAILED, secretArn, {}, expect.stringContaining('The SecretName property cannot be updated'));
|
|
111
|
-
});
|
|
112
|
-
test('Update (changing Description and KmsKeyId)', async () => {
|
|
113
|
-
const event = {
|
|
114
|
-
RequestType: cfn.RequestType.UPDATE,
|
|
115
|
-
PhysicalResourceId: secretArn,
|
|
116
|
-
OldResourceProperties: {
|
|
117
|
-
...eventBase.ResourceProperties,
|
|
118
|
-
Description: 'Old description',
|
|
119
|
-
KmsKeyId: 'alias/OldKmsKey',
|
|
120
|
-
},
|
|
121
|
-
...eventBase,
|
|
122
|
-
};
|
|
123
|
-
const { handler } = require('../../custom-resource-handlers/src/private-key');
|
|
124
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
125
|
-
await expect(mockSecretsManager.createSecret).not.toBeCalled();
|
|
126
|
-
await expect(mockSecretsManager.updateSecret)
|
|
127
|
-
.toBeCalledWith({
|
|
128
|
-
ClientRequestToken: context.awsRequestId,
|
|
129
|
-
Description: event.ResourceProperties.Description,
|
|
130
|
-
KmsKeyId: event.ResourceProperties.KmsKeyId,
|
|
131
|
-
SecretId: secretArn,
|
|
132
|
-
});
|
|
133
|
-
await expect(mockSecretsManager.deleteSecret).not.toBeCalled();
|
|
134
|
-
return expect(cfn.sendResponse)
|
|
135
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, secretArn, { Ref: secretArn, SecretArn: secretArn });
|
|
136
|
-
});
|
|
137
|
-
test('Delete', async () => {
|
|
138
|
-
const event = {
|
|
139
|
-
RequestType: cfn.RequestType.DELETE,
|
|
140
|
-
PhysicalResourceId: secretArn,
|
|
141
|
-
...eventBase,
|
|
142
|
-
};
|
|
143
|
-
jest.spyOn(cfn, 'customResourceHandler').mockName('cfn.customResourceHandler')
|
|
144
|
-
.mockImplementation((cb) => {
|
|
145
|
-
return async (evt, ctx) => {
|
|
146
|
-
const result = await cb(evt, ctx);
|
|
147
|
-
await expect(result).toEqual({
|
|
148
|
-
Ref: event.PhysicalResourceId,
|
|
149
|
-
});
|
|
150
|
-
};
|
|
151
|
-
});
|
|
152
|
-
const { handler } = require('../../custom-resource-handlers/src/private-key');
|
|
153
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
154
|
-
await expect(mockSecretsManager.createSecret).not.toBeCalled();
|
|
155
|
-
await expect(mockSecretsManager.updateSecret).not.toBeCalled();
|
|
156
|
-
await expect(mockSecretsManager.deleteSecret)
|
|
157
|
-
.toBeCalledWith({
|
|
158
|
-
SecretId: secretArn,
|
|
159
|
-
ForceDeleteWithoutRecovery: true,
|
|
160
|
-
});
|
|
161
|
-
return expect(cfn.sendResponse)
|
|
162
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, event.PhysicalResourceId, { Ref: event.PhysicalResourceId });
|
|
163
|
-
});
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1rZXkudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByaXZhdGUta2V5LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwREFBMEQ7QUFDMUQseUJBQTBCO0FBQzFCLCtCQUFnQztBQUNoQyx5RUFBK0Q7QUFDL0QsMkVBQTRFO0FBRzVFLE1BQU0sT0FBTyxHQUFtQixFQUFFLFlBQVksRUFBRSxzQ0FBc0MsRUFBb0IsQ0FBQztBQUMzRyxNQUFNLFdBQVcsR0FBRyxJQUFLLENBQUM7QUFDMUIsTUFBTSxTQUFTLEdBQUc7SUFDaEIsaUJBQWlCLEVBQUUsb0JBQW9CO0lBQ3ZDLFdBQVcsRUFBRSxzQkFBc0I7SUFDbkMsU0FBUyxFQUFFLHNDQUFzQztJQUNqRCxrQkFBa0IsRUFBRTtRQUNsQixZQUFZLEVBQUUsMENBQTBDO1FBQ3hELGVBQWUsRUFBRSwrQkFBK0I7UUFFaEQsV0FBVyxFQUFFLDBCQUEwQjtRQUN2QyxPQUFPLEVBQUUsSUFBSztRQUNkLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLFVBQVUsRUFBRSxtQkFBbUI7S0FDaEM7SUFDRCxZQUFZLEVBQUUsd0JBQXdCO0lBQ3RDLE9BQU8sRUFBRSxpQkFBaUI7Q0FDM0IsQ0FBQztBQUNGLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDO0FBQzdDLE1BQU0sY0FBYyxHQUFHLCtCQUErQixDQUFDO0FBQ3ZELE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDO0FBRXBDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQVcsRUFBRSxHQUFHLElBQWMsRUFBRSxFQUFFO0lBQ25HLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxD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LE1BQU0sQ0FBQyxPQUFPLEVBQ2xCLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbmltcG9ydCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5pbXBvcnQgYXdzID0gcmVxdWlyZSgnYXdzLXNkaycpO1xuaW1wb3J0IHsgY3JlYXRlTW9ja0luc3RhbmNlIH0gZnJvbSAnamVzdC1jcmVhdGUtbW9jay1pbnN0YW5jZSc7XG5pbXBvcnQgY2ZuID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9fY2xvdWQtZm9ybWF0aW9uJyk7XG5pbXBvcnQgbGFtYmRhID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9fbGFtYmRhJyk7XG5cbmNvbnN0IGNvbnRleHQ6IGxhbWJkYS5Db250ZXh0ID0geyBhd3NSZXF1ZXN0SWQ6ICc5MEU5OUFBRS1CMTIwLTQwOUEtOTE1Ni0wQzU5MjVGREQ5OTYnIH0gYXMgbGFtYmRhLkNvbnRleHQ7XG5jb25zdCBtb2NrS2V5U2l6ZSA9IDRfMDk2O1xuY29uc3QgZXZlbnRCYXNlID0ge1xuICBMb2dpY2FsUmVzb3VyY2VJZDogJ1Jlc291cmNlSUQxMjM0NTY4OScsXG4gIFJlc3BvbnNlVVJMOiAnaHR0cHM6Ly9yZXNwb25zZS91cmwnLFxuICBSZXF1ZXN0SWQ6ICc1RUYxMDBGQi0wMDc1LTQ3MTYtOTcwQi1GQkNBMDVCRkUxMTgnLFxuICBSZXNvdXJjZVByb3BlcnRpZXM6IHtcbiAgICBTZXJ2aWNlVG9rZW46ICdTZXJ2aWNlLVRva2VuIChXb3VsZCBiZSB0aGUgZnVuY3Rpb24gQVJOJyxcbiAgICBSZXNvdXJjZVZlcnNpb246ICdUaGUgaGFzaCBvZiB0aGUgZnVuY3Rpb24gY29kZScsXG5cbiAgICBEZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIG9mIG15IHNlY3JldCcsXG4gICAgS2V5U2l6ZTogNF8wOTYsXG4gICAgS21zS2V5SWQ6ICdhbGlhcy9LbXNLZXknLFxuICAgIFNlY3JldE5hbWU6ICdTZWtyZXQvTmFtZS9TaGhoaCcsXG4gIH0sXG4gIFJlc291cmNlVHlwZTogJ0N1c3RvbTo6UmVzb3VyY2U6OlR5cGUnLFxuICBTdGFja0lkOiAnU3RhY2tJRC0xMzI0NTk3Jyxcbn07XG5jb25zdCBtb2NrVG1wRGlyID0gJy90bXAvZGlyZWN0b3J5L2lzL3Bob255JztcbmNvbnN0IG1vY2tQcml2YXRlS2V5ID0gJ1Bob255IFBFTS1FbmNvZGVkIFByaXZhdGUgS2V5JztcbmNvbnN0IHNlY3JldEFybiA9ICdhcm46Ojo6OjpzZWNyZXQnO1xuXG5jZm4uc2VuZFJlc3BvbnNlID0gamVzdC5mbigpLm1vY2tOYW1lKCdjZm4uc2VuZFJlc3BvbnNlJykubW9ja1Jlc29sdmVkVmFsdWUodW5kZWZpbmVkKTtcbmplc3QubW9jaygnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9fZXhlYycsICgpID0+IGFzeW5jIChjbWQ6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pID0+IHtcbiAgYXdhaXQgZXhwZWN0KGNtZCkudG9CZSgnL29wdC9vcGVuc3NsJyk7XG4gIGF3YWl0IGV4cGVjdChhcmdzKS50b0VxdWFsKFsnZ2VucnNhJywgJy1vdXQnLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAncHJpdmF0ZV9rZXkucGVtJyksIG1vY2tLZXlTaXplXSk7XG4gIHJldHVybiAnJztcbn0pO1xuamVzdC5zcHlPbihmcywgJ21rZHRlbXAnKS5tb2NrTmFtZSgnZnMubWtkdGVtcCcpXG4gIC5tb2NrSW1wbGVtZW50YXRpb24oYXN5bmMgKF8sIGNiKSA9PiBjYih1bmRlZmluZWQgYXMgYW55LCBtb2NrVG1wRGlyKSk7XG5mcy5yZWFkRmlsZSA9IGplc3QuZm4oKS5tb2NrTmFtZSgnZnMucmVhZEZpbGUnKVxuICAubW9ja0ltcGxlbWVudGF0aW9uKGFzeW5jIChmaWxlLCBvcHRzLCBjYikgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChmaWxlKS50b0JlKHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdwcml2YXRlX2tleS5wZW0nKSk7XG4gICAgYXdhaXQgZXhwZWN0KG9wdHMuZW5jb2RpbmcpLnRvQmUoJ3V0ZjgnKTtcbiAgICByZXR1cm4gY2IodW5kZWZpbmVkLCBtb2NrUHJpdmF0ZUtleSk7XG4gIH0pIGFzIGFueTtcbmNvbnN0IG1vY2tTZWNyZXRzTWFuYWdlciA9IGNyZWF0ZU1vY2tJbnN0YW5jZShhd3MuU2VjcmV0c01hbmFnZXIpO1xuYXdzLlNlY3JldHNNYW5hZ2VyID0gamVzdC5mbigpLm1vY2tOYW1lKCdTZWNyZXRzTWFuYWdlcicpXG4gIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja1NlY3JldHNNYW5hZ2VyKSBhcyBhbnk7XG5tb2NrU2VjcmV0c01hbmFnZXIuY3JlYXRlU2VjcmV0ID0gamVzdC5mbigpLm1vY2tOYW1lKCdTZWNyZXRzTWFuYWdlci5jcmVhdGVTZWNyZXQnKVxuICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7IHByb21pc2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7IEFSTjogc2VjcmV0QXJuLCBWZXJzaW9uSWQ6ICdTZWNyZXQtVmVyc2lvbklEJyB9KSB9KSkgYXMgYW55O1xubW9ja1NlY3JldHNNYW5hZ2VyLnVwZGF0ZVNlY3JldCA9IGplc3QuZm4oKS5tb2NrTmFtZSgnU2VjcmV0c01hbmFnZXIudXBkYXRlU2VjcmV0JylcbiAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoeyBwcm9taXNlOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoeyBBUk46IHNlY3JldEFybiB9KSB9KSkgYXMgYW55O1xubW9ja1NlY3JldHNNYW5hZ2VyLmRlbGV0ZVNlY3JldCA9IGplc3QuZm4oKS5tb2NrTmFtZSgnU2VjcmV0c01hbmFnZXIuZGVsZXRlU2VjcmV0JylcbiAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoeyBwcm9taXNlOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pIH0pKSBhcyBhbnk7XG5jb25zdCBtb2NrUm1yZiA9IGplc3QuZm4oKS5tb2NrTmFtZSgnX3JtcmYnKS5tb2NrUmVzb2x2ZWRWYWx1ZSh1bmRlZmluZWQpO1xuamVzdC5tb2NrKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL19ybXJmJywgKCkgPT4gbW9ja1JtcmYpO1xuXG5iZWZvcmVFYWNoKCgpID0+IGplc3QuY2xlYXJBbGxNb2NrcygpKTtcblxudGVzdCgnQ3JlYXRlJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBldmVudDogY2ZuLkV2ZW50ID0ge1xuICAgIFJlcXVlc3RUeXBlOiBjZm4uUmVxdWVzdFR5cGUuQ1JFQVRFLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogdW5kZWZpbmVkLFxuICAgIC4uLmV2ZW50QmFzZSxcbiAgfTtcblxuICBjb25zdCB7IGhhbmRsZXIgfSA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvcHJpdmF0ZS1rZXknKTtcbiAgYXdhaXQgZXhwZWN0KGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpKS5yZXNvbHZlcy50b0JlKHVuZGVmaW5lZCk7XG5cbiAgYXdhaXQgZXhwZWN0KG1vY2tTZWNyZXRzTWFuYWdlci5jcmVhdGVTZWNyZXQpXG4gICAgLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgIENsaWVudFJlcXVlc3RUb2tlbjogY29udGV4dC5hd3NSZXF1ZXN0SWQsXG4gICAgICBEZXNjcmlwdGlvbjogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uLFxuICAgICAgS21zS2V5SWQ6IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5LbXNLZXlJZCxcbiAgICAgIE5hbWU6IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5TZWNyZXROYW1lLFxuICAgICAgU2VjcmV0U3RyaW5nOiBtb2NrUHJpdmF0ZUtleSxcbiAgICB9KTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tTZWNyZXRzTWFuYWdlci51cGRhdGVTZWNyZXQpLm5vdC50b0JlQ2FsbGVkKCk7XG4gIGF3YWl0IGV4cGVjdChtb2NrU2VjcmV0c01hbmFnZXIuZGVsZXRlU2VjcmV0KS5ub3QudG9CZUNhbGxlZCgpO1xuICBhd2FpdCBleHBlY3QobW9ja1JtcmYpLnRvQmVDYWxsZWRXaXRoKG1vY2tUbXBEaXIpO1xuICByZXR1cm4gZXhwZWN0KGNmbi5zZW5kUmVzcG9uc2UpXG4gICAgLnRvQmVDYWxsZWRXaXRoKGV2ZW50LFxuICAgICAgY2ZuLlN0YXR1cy5TVUNDRVNTLFxuICAgICAgc2VjcmV0QXJuLFxuICAgICAgeyBSZWY6IHNlY3JldEFybiwgU2VjcmV0QXJuOiBzZWNyZXRBcm4gfSk7XG59KTtcblxudGVzdCgnVXBkYXRlIChjaGFuZ2luZyBLZXlTaXplKScsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZXZlbnQ6IGNmbi5FdmVudCA9IHtcbiAgICBSZXF1ZXN0VHlwZTogY2ZuLlJlcXVlc3RUeXBlLlVQREFURSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHNlY3JldEFybixcbiAgICBPbGRSZXNvdXJjZVByb3BlcnRpZXM6IHtcbiAgICAgIC4uLmV2ZW50QmFzZS5SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgICBLZXlTaXplOiBtb2NrS2V5U2l6ZSAqIDIsXG4gICAgfSxcbiAgICAuLi5ldmVudEJhc2UsXG4gIH07XG5cbiAgY29uc3QgeyBoYW5kbGVyIH0gPSByZXF1aXJlKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL3ByaXZhdGUta2V5Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIGF3YWl0IGV4cGVjdChtb2NrU2VjcmV0c01hbmFnZXIuY3JlYXRlU2VjcmV0KS5ub3QudG9CZUNhbGxlZCgpO1xuICBhd2FpdCBleHBlY3QobW9ja1NlY3JldHNNYW5hZ2VyLnVwZGF0ZVNlY3JldCkubm90LnRvQmVDYWxsZWQoKTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tTZWNyZXRzTWFuYWdlci5kZWxldGVTZWNyZXQpLm5vdC50b0JlQ2FsbGVkKCk7XG4gIHJldHVybiBleHBlY3QoY2ZuLnNlbmRSZXNwb25zZSlcbiAgICAudG9CZUNhbGxlZFdpdGgoZXZlbnQsXG4gICAgICBjZm4uU3RhdHVzLkZBSUxFRCxcbiAgICAgIHNlY3JldEFybixcbiAgICAgIHt9LFxuICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1RoZSBLZXlTaXplIHByb3BlcnR5IGNhbm5vdCBiZSB1cGRhdGVkJykpO1xufSk7XG5cbnRlc3QoJ1VwZGF0ZSAoY2hhbmdpbmcgU2VjcmV0TmFtZSknLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGV2ZW50OiBjZm4uRXZlbnQgPSB7XG4gICAgUmVxdWVzdFR5cGU6IGNmbi5SZXF1ZXN0VHlwZS5VUERBVEUsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBzZWNyZXRBcm4sXG4gICAgT2xkUmVzb3VyY2VQcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5ldmVudEJhc2UuUmVzb3VyY2VQcm9wZXJ0aWVzLFxuICAgICAgU2VjcmV0TmFtZTogJ09sZC9TZWNyZXQvTmFtZScsXG4gICAgfSxcbiAgICAuLi5ldmVudEJhc2UsXG4gIH07XG5cbiAgY29uc3QgeyBoYW5kbGVyIH0gPSByZXF1aXJlKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL3ByaXZhdGUta2V5Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIGF3YWl0IGV4cGVjdChtb2NrU2VjcmV0c01hbmFnZXIuY3JlYXRlU2VjcmV0KS5ub3QudG9CZUNhbGxlZCgpO1xuICBhd2FpdCBleHBlY3QobW9ja1NlY3JldHNNYW5hZ2VyLnVwZGF0ZVNlY3JldCkubm90LnRvQmVDYWxsZWQoKTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tTZWNyZXRzTWFuYWdlci5kZWxldGVTZWNyZXQpLm5vdC50b0JlQ2FsbGVkKCk7XG4gIHJldHVybiBleHBlY3QoY2ZuLnNlbmRSZXNwb25zZSlcbiAgICAudG9CZUNhbGxlZFdpdGgoZXZlbnQsXG4gICAgICBjZm4uU3RhdHVzLkZBSUxFRCxcbiAgICAgIHNlY3JldEFybixcbiAgICAgIHt9LFxuICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1RoZSBTZWNyZXROYW1lIHByb3BlcnR5IGNhbm5vdCBiZSB1cGRhdGVkJykpO1xufSk7XG5cbnRlc3QoJ1VwZGF0ZSAoY2hhbmdpbmcgRGVzY3JpcHRpb24gYW5kIEttc0tleUlkKScsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZXZlbnQ6IGNmbi5FdmVudCA9IHtcbiAgICBSZXF1ZXN0VHlwZTogY2ZuLlJlcXVlc3RUeXBlLlVQREFURSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHNlY3JldEFybixcbiAgICBPbGRSZXNvdXJjZVByb3BlcnRpZXM6IHtcbiAgICAgIC4uLmV2ZW50QmFzZS5SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgICBEZXNjcmlwdGlvbjogJ09sZCBkZXNjcmlwdGlvbicsXG4gICAgICBLbXNLZXlJZDogJ2FsaWFzL09sZEttc0tleScsXG4gICAgfSxcbiAgICAuLi5ldmVudEJhc2UsXG4gIH07XG5cbiAgY29uc3QgeyBoYW5kbGVyIH0gPSByZXF1aXJlKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL3ByaXZhdGUta2V5Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIGF3YWl0IGV4cGVjdChtb2NrU2VjcmV0c01hbmFnZXIuY3JlYXRlU2VjcmV0KS5ub3QudG9CZUNhbGxlZCgpO1xuICBhd2FpdCBleHBlY3QobW9ja1NlY3JldHNNYW5hZ2VyLnVwZGF0ZVNlY3JldClcbiAgICAudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiBjb250ZXh0LmF3c1JlcXVlc3RJZCxcbiAgICAgIERlc2NyaXB0aW9uOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuRGVzY3JpcHRpb24sXG4gICAgICBLbXNLZXlJZDogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkttc0tleUlkLFxuICAgICAgU2VjcmV0SWQ6IHNlY3JldEFybixcbiAgICB9KTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tTZWNyZXRzTWFuYWdlci5kZWxldGVTZWNyZXQpLm5vdC50b0JlQ2FsbGVkKCk7XG4gIHJldHVybiBleHBlY3QoY2ZuLnNlbmRSZXNwb25zZSlcbiAgICAudG9CZUNhbGxlZFdpdGgoZXZlbnQsXG4gICAgICBjZm4uU3RhdHVzLlNVQ0NFU1MsXG4gICAgICBzZWNyZXRBcm4sXG4gICAgICB7IFJlZjogc2VjcmV0QXJuLCBTZWNyZXRBcm46IHNlY3JldEFybiB9KTtcbn0pO1xuXG50ZXN0KCdEZWxldGUnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGV2ZW50OiBjZm4uRXZlbnQgPSB7XG4gICAgUmVxdWVzdFR5cGU6IGNmbi5SZXF1ZXN0VHlwZS5ERUxFVEUsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBzZWNyZXRBcm4sXG4gICAgLi4uZXZlbnRCYXNlLFxuICB9O1xuXG4gIGplc3Quc3B5T24oY2ZuLCAnY3VzdG9tUmVzb3VyY2VIYW5kbGVyJykubW9ja05hbWUoJ2Nmbi5jdXN0b21SZXNvdXJjZUhhbmRsZXInKVxuICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKGNiKSA9PiB7XG4gICAgICByZXR1cm4gYXN5bmMgKGV2dDogYW55LCBjdHg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYihldnQsIGN0eCk7XG4gICAgICAgIGF3YWl0IGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgICAgICAgIFJlZjogZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgY29uc3QgeyBoYW5kbGVyIH0gPSByZXF1aXJlKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL3ByaXZhdGUta2V5Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIGF3YWl0IGV4cGVjdChtb2NrU2VjcmV0c01hbmFnZXIuY3JlYXRlU2VjcmV0KS5ub3QudG9CZUNhbGxlZCgpO1xuICBhd2FpdCBleHBlY3QobW9ja1NlY3JldHNNYW5hZ2VyLnVwZGF0ZVNlY3JldCkubm90LnRvQmVDYWxsZWQoKTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tTZWNyZXRzTWFuYWdlci5kZWxldGVTZWNyZXQpXG4gICAgLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgIFNlY3JldElkOiBzZWNyZXRBcm4sXG4gICAgICBGb3JjZURlbGV0ZVdpdGhvdXRSZWNvdmVyeTogdHJ1ZSxcbiAgICB9KTtcbiAgcmV0dXJuIGV4cGVjdChjZm4uc2VuZFJlc3BvbnNlKVxuICAgIC50b0JlQ2FsbGVkV2l0aChldmVudCxcbiAgICAgIGNmbi5TdGF0dXMuU1VDQ0VTUyxcbiAgICAgIGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgIHsgUmVmOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgfSk7XG59KTtcbiJdfQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
const cdk = __importStar(require("monocdk"));
|
|
23
|
-
const test_stack_1 = require("./test-stack");
|
|
24
|
-
const stackName = process.env.TEST_STACK_NAME;
|
|
25
|
-
if (!stackName) {
|
|
26
|
-
throw new Error('TEST_STACK_NAME must be defined');
|
|
27
|
-
}
|
|
28
|
-
const app = new cdk.App();
|
|
29
|
-
new test_stack_1.TestStack(app, stackName, {
|
|
30
|
-
env: { region: 'us-east-1', account: '712950704752' },
|
|
31
|
-
});
|
|
32
|
-
app.synth();
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZGVsaXZsaWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy5kZWxpdmxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBK0I7QUFDL0IsNkNBQXlDO0FBR3pDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO0FBQzlDLElBQUksQ0FBQyxTQUFTLEVBQUU7SUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7Q0FDcEQ7QUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixJQUFJLHNCQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRTtJQUM1QixHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUU7Q0FDdEQsQ0FBQyxDQUFDO0FBQ0gsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ21vbm9jZGsnO1xuaW1wb3J0IHsgVGVzdFN0YWNrIH0gZnJvbSAnLi90ZXN0LXN0YWNrJztcblxuXG5jb25zdCBzdGFja05hbWUgPSBwcm9jZXNzLmVudi5URVNUX1NUQUNLX05BTUU7XG5pZiAoIXN0YWNrTmFtZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1RFU1RfU1RBQ0tfTkFNRSBtdXN0IGJlIGRlZmluZWQnKTtcbn1cblxuY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbm5ldyBUZXN0U3RhY2soYXBwLCBzdGFja05hbWUsIHtcbiAgZW52OiB7IHJlZ2lvbjogJ3VzLWVhc3QtMScsIGFjY291bnQ6ICc3MTI5NTA3MDQ3NTInIH0sXG59KTtcbmFwcC5zeW50aCgpO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
const assert = __importStar(require("@monocdk-experiment/assert"));
|
|
23
|
-
const monocdk_1 = require("monocdk");
|
|
24
|
-
const open_pgp_key_pair_1 = require("../../lib/open-pgp-key-pair");
|
|
25
|
-
test('correctly creates', () => {
|
|
26
|
-
// GIVEN
|
|
27
|
-
const stack = new monocdk_1.Stack(new monocdk_1.App(), 'TestStack');
|
|
28
|
-
const encryptionKey = new monocdk_1.aws_kms.Key(stack, 'CMK');
|
|
29
|
-
// WHEN
|
|
30
|
-
new open_pgp_key_pair_1.OpenPGPKeyPair(stack, 'Secret', {
|
|
31
|
-
email: 'nobody@nowhere.com',
|
|
32
|
-
encryptionKey,
|
|
33
|
-
expiry: '1d',
|
|
34
|
-
identity: 'Test',
|
|
35
|
-
keySizeBits: 1024,
|
|
36
|
-
pubKeyParameterName: 'TestParameter',
|
|
37
|
-
secretName: 'SecretName',
|
|
38
|
-
version: 0,
|
|
39
|
-
});
|
|
40
|
-
// THEN
|
|
41
|
-
assert.expect(stack).to(assert.haveResourceLike('AWS::CloudFormation::CustomResource', {
|
|
42
|
-
Identity: 'Test',
|
|
43
|
-
Email: 'nobody@nowhere.com',
|
|
44
|
-
Expiry: '1d',
|
|
45
|
-
KeySizeBits: 1024,
|
|
46
|
-
SecretName: 'SecretName',
|
|
47
|
-
KeyArn: stack.resolve(encryptionKey.keyArn),
|
|
48
|
-
Version: 0,
|
|
49
|
-
DeleteImmediately: false,
|
|
50
|
-
}));
|
|
51
|
-
});
|
|
52
|
-
test('correctly forwards parameter name', () => {
|
|
53
|
-
// GIVEN
|
|
54
|
-
const stack = new monocdk_1.Stack(new monocdk_1.App(), 'TestStack');
|
|
55
|
-
const parameterName = 'TestParameterName';
|
|
56
|
-
// WHEN
|
|
57
|
-
new open_pgp_key_pair_1.OpenPGPKeyPair(stack, 'Secret', {
|
|
58
|
-
pubKeyParameterName: parameterName,
|
|
59
|
-
email: 'nobody@nowhere.com',
|
|
60
|
-
encryptionKey: new monocdk_1.aws_kms.Key(stack, 'CMK'),
|
|
61
|
-
expiry: '1d',
|
|
62
|
-
identity: 'Test',
|
|
63
|
-
keySizeBits: 1024,
|
|
64
|
-
secretName: 'SecretName',
|
|
65
|
-
version: 0,
|
|
66
|
-
});
|
|
67
|
-
// THEN
|
|
68
|
-
assert.expect(stack).to(assert.haveResource('AWS::SSM::Parameter', {
|
|
69
|
-
Type: 'String',
|
|
70
|
-
Value: { 'Fn::GetAtt': ['SecretA720EF05', 'PublicKey'] },
|
|
71
|
-
Name: parameterName,
|
|
72
|
-
}));
|
|
73
|
-
});
|
|
74
|
-
test('Handler has appropriate permissions', () => {
|
|
75
|
-
// GIVEN
|
|
76
|
-
const stack = new monocdk_1.Stack(new monocdk_1.App(), 'TestStack');
|
|
77
|
-
// WHEN
|
|
78
|
-
new open_pgp_key_pair_1.OpenPGPKeyPair(stack, 'Secret', {
|
|
79
|
-
pubKeyParameterName: '/Foo',
|
|
80
|
-
email: 'nobody@nowhere.com',
|
|
81
|
-
encryptionKey: new monocdk_1.aws_kms.Key(stack, 'CMK'),
|
|
82
|
-
expiry: '1d',
|
|
83
|
-
identity: 'Test',
|
|
84
|
-
keySizeBits: 1024,
|
|
85
|
-
secretName: 'Bar',
|
|
86
|
-
version: 0,
|
|
87
|
-
});
|
|
88
|
-
// THEN
|
|
89
|
-
assert.expect(stack).to(assert.haveResource('AWS::IAM::Policy', {
|
|
90
|
-
PolicyDocument: {
|
|
91
|
-
Version: '2012-10-17',
|
|
92
|
-
Statement: [{
|
|
93
|
-
Effect: 'Allow',
|
|
94
|
-
Action: [
|
|
95
|
-
'secretsmanager:CreateSecret',
|
|
96
|
-
'secretsmanager:GetSecretValue',
|
|
97
|
-
'secretsmanager:UpdateSecret',
|
|
98
|
-
'secretsmanager:DeleteSecret',
|
|
99
|
-
],
|
|
100
|
-
Resource: {
|
|
101
|
-
'Fn::Join': ['',
|
|
102
|
-
['arn:', { Ref: 'AWS::Partition' }, ':secretsmanager:', { Ref: 'AWS::Region' }, ':', { Ref: 'AWS::AccountId' }, ':secret:Bar-??????']],
|
|
103
|
-
},
|
|
104
|
-
}, {
|
|
105
|
-
Effect: 'Allow',
|
|
106
|
-
Action: 'ssm:DeleteParameter',
|
|
107
|
-
Resource: '*',
|
|
108
|
-
}],
|
|
109
|
-
},
|
|
110
|
-
PolicyName: 'SingletonLambdaf25803d3054b44fc985f4860d7d6ee74ServiceRoleDefaultPolicyA8FDF5BD',
|
|
111
|
-
Roles: [{ Ref: 'SingletonLambdaf25803d3054b44fc985f4860d7d6ee74ServiceRole410148CF' }],
|
|
112
|
-
}));
|
|
113
|
-
assert.expect(stack).to(assert.haveResourceLike('AWS::KMS::Key', {
|
|
114
|
-
KeyPolicy: {
|
|
115
|
-
Statement: [{
|
|
116
|
-
// The key administration enabler statement -- exact content is irrelevant
|
|
117
|
-
Resource: '*',
|
|
118
|
-
}, {
|
|
119
|
-
Effect: 'Allow',
|
|
120
|
-
Action: ['kms:Decrypt', 'kms:GenerateDataKey'],
|
|
121
|
-
Resource: '*',
|
|
122
|
-
Condition: {
|
|
123
|
-
StringEquals: { 'kms:ViaService': { 'Fn::Join': ['', ['secretsmanager.', { Ref: 'AWS::Region' }, '.amazonaws.com']] } },
|
|
124
|
-
},
|
|
125
|
-
Principal: { AWS: { 'Fn::GetAtt': ['SingletonLambdaf25803d3054b44fc985f4860d7d6ee74ServiceRole410148CF', 'Arn'] } },
|
|
126
|
-
}],
|
|
127
|
-
},
|
|
128
|
-
}));
|
|
129
|
-
});
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1wZ3Ata2V5LXBhaXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9wZW4tcGdwLWtleS1wYWlyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUVBQXFEO0FBQ3JELHFDQUdpQjtBQUNqQixtRUFBNkQ7QUFHN0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRO0lBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFLLENBQUMsSUFBSSxhQUFHLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLGFBQWEsR0FBRyxJQUFJLGlCQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxPQUFPO0lBQ1AsSUFBSSxrQ0FBYyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7UUFDbEMsS0FBSyxFQUFFLG9CQUFvQjtRQUMzQixhQUFhO1FBQ2IsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUsTUFBTTtRQUNoQixXQUFXLEVBQUUsSUFBSztRQUNsQixtQkFBbUIsRUFBRSxlQUFlO1FBQ3BDLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQyxDQUFDO0lBRUgsT0FBTztJQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxxQ0FBcUMsRUFBRTtRQUNyRixRQUFRLEVBQUUsTUFBTTtRQUNoQixLQUFLLEVBQUUsb0JBQW9CO1FBQzNCLE1BQU0sRUFBRSxJQUFJO1FBQ1osV0FBVyxFQUFFLElBQUk7UUFDakIsVUFBVSxFQUFFLFlBQVk7UUFDeEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxPQUFPLEVBQUUsQ0FBQztRQUNWLGlCQUFpQixFQUFFLEtB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QU0sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7UUFDL0QsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFLENBQUM7b0JBQ1YsMEVBQTBFO29CQUMxRSxRQUFRLEVBQUUsR0FBRztpQkFDZCxFQUFFO29CQUNELE1BQU0sRUFBRSxPQUFPO29CQUNmLE1BQU0sRUFBRSxDQUFDLGFBQWEsRUFBRSxxQkFBcUIsQ0FBQztvQkFDOUMsUUFBUSxFQUFFLEdBQUc7b0JBQ2IsU0FBUyxFQUFFO3dCQUNULFlBQVksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUU7cUJBQ3hIO29CQUNELFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7aUJBQ3BILENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnQG1vbm9jZGstZXhwZXJpbWVudC9hc3NlcnQnO1xuaW1wb3J0IHtcbiAgQXBwLCBTdGFjayxcbiAgYXdzX2ttcyBhcyBrbXMsXG59IGZyb20gJ21vbm9jZGsnO1xuaW1wb3J0IHsgT3BlblBHUEtleVBhaXIgfSBmcm9tICcuLi8uLi9saWIvb3Blbi1wZ3Ata2V5LXBhaXInO1xuXG5cbnRlc3QoJ2NvcnJlY3RseSBjcmVhdGVzJywgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhuZXcgQXBwKCksICdUZXN0U3RhY2snKTtcbiAgY29uc3QgZW5jcnlwdGlvbktleSA9IG5ldyBrbXMuS2V5KHN0YWNrLCAnQ01LJyk7XG4gIC8vIFdIRU5cbiAgbmV3IE9wZW5QR1BLZXlQYWlyKHN0YWNrLCAnU2VjcmV0Jywge1xuICAgIGVtYWlsOiAnbm9ib2R5QG5vd2hlcmUuY29tJyxcbiAgICBlbmNyeXB0aW9uS2V5LFxuICAgIGV4cGlyeTogJzFkJyxcbiAgICBpZGVudGl0eTogJ1Rlc3QnLFxuICAgIGtleVNpemVCaXRzOiAxXzAyNCxcbiAgICBwdWJLZXlQYXJhbWV0ZXJOYW1lOiAnVGVzdFBhcmFtZXRlcicsXG4gICAgc2VjcmV0TmFtZTogJ1NlY3JldE5hbWUnLFxuICAgIHZlcnNpb246IDAsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgYXNzZXJ0LmV4cGVjdChzdGFjaykudG8oYXNzZXJ0LmhhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q2xvdWRGb3JtYXRpb246OkN1c3RvbVJlc291cmNlJywge1xuICAgIElkZW50aXR5OiAnVGVzdCcsXG4gICAgRW1haWw6ICdub2JvZHlAbm93aGVyZS5jb20nLFxuICAgIEV4cGlyeTogJzFkJyxcbiAgICBLZXlTaXplQml0czogMTAyNCxcbiAgICBTZWNyZXROYW1lOiAnU2VjcmV0TmFtZScsXG4gICAgS2V5QXJuOiBzdGFjay5yZXNvbHZlKGVuY3J5cHRpb25LZXkua2V5QXJuKSxcbiAgICBWZXJzaW9uOiAwLFxuICAgIERlbGV0ZUltbWVkaWF0ZWx5OiBmYWxzZSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ2NvcnJlY3RseSBmb3J3YXJkcyBwYXJhbWV0ZXIgbmFtZScsICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sobmV3IEFwcCgpLCAnVGVzdFN0YWNrJyk7XG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPSAnVGVzdFBhcmFtZXRlck5hbWUnO1xuXG4gIC8vIFdIRU5cbiAgbmV3IE9wZW5QR1BLZXlQYWlyKHN0YWNrLCAnU2VjcmV0Jywge1xuICAgIHB1YktleVBhcmFtZXRlck5hbWU6IHBhcmFtZXRlck5hbWUsXG4gICAgZW1haWw6ICdub2JvZHlAbm93aGVyZS5jb20nLFxuICAgIGVuY3J5cHRpb25LZXk6IG5ldyBrbXMuS2V5KHN0YWNrLCAnQ01LJyksXG4gICAgZXhwaXJ5OiAnMWQnLFxuICAgIGlkZW50aXR5OiAnVGVzdCcsXG4gICAga2V5U2l6ZUJpdHM6IDFfMDI0LFxuICAgIHNlY3JldE5hbWU6ICdTZWNyZXROYW1lJyxcbiAgICB2ZXJzaW9uOiAwLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGFzc2VydC5leHBlY3Qoc3RhY2spLnRvKGFzc2VydC5oYXZlUmVzb3VyY2UoJ0FXUzo6U1NNOjpQYXJhbWV0ZXInLCB7XG4gICAgVHlwZTogJ1N0cmluZycsXG4gICAgVmFsdWU6IHsgJ0ZuOjpHZXRBdHQnOiBbJ1NlY3JldEE3MjBFRjA1JywgJ1B1YmxpY0tleSddIH0sXG4gICAgTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgfSkpO1xufSk7XG5cbnRlc3QoJ0hhbmRsZXIgaGFzIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zJywgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhuZXcgQXBwKCksICdUZXN0U3RhY2snKTtcblxuICAvLyBXSEVOXG4gIG5ldyBPcGVuUEdQS2V5UGFpcihzdGFjaywgJ1NlY3JldCcsIHtcbiAgICBwdWJLZXlQYXJhbWV0ZXJOYW1lOiAnL0ZvbycsXG4gICAgZW1haWw6ICdub2JvZHlAbm93aGVyZS5jb20nLFxuICAgIGVuY3J5cHRpb25LZXk6IG5ldyBrbXMuS2V5KHN0YWNrLCAnQ01LJyksXG4gICAgZXhwaXJ5OiAnMWQnLFxuICAgIGlkZW50aXR5OiAnVGVzdCcsXG4gICAga2V5U2l6ZUJpdHM6IDFfMDI0LFxuICAgIHNlY3JldE5hbWU6ICdCYXInLFxuICAgIHZlcnNpb246IDAsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgYXNzZXJ0LmV4cGVjdChzdGFjaykudG8oYXNzZXJ0LmhhdmVSZXNvdXJjZSgnQVdTOjpJQU06OlBvbGljeScsIHtcbiAgICBQb2xpY3lEb2N1bWVudDoge1xuICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgU3RhdGVtZW50OiBbe1xuICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpDcmVhdGVTZWNyZXQnLFxuICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsXG4gICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOlVwZGF0ZVNlY3JldCcsXG4gICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkRlbGV0ZVNlY3JldCcsXG4gICAgICAgIF0sXG4gICAgICAgIFJlc291cmNlOiB7XG4gICAgICAgICAgJ0ZuOjpKb2luJzogWycnLFxuICAgICAgICAgICAgWydhcm46JywgeyBSZWY6ICdBV1M6OlBhcnRpdGlvbicgfSwgJzpzZWNyZXRzbWFuYWdlcjonLCB7IFJlZjogJ0FXUzo6UmVnaW9uJyB9LCAnOicsIHsgUmVmOiAnQVdTOjpBY2NvdW50SWQnIH0sICc6c2VjcmV0OkJhci0/Pz8/Pz8nXV0sXG4gICAgICAgIH0sXG4gICAgICB9LCB7XG4gICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgQWN0aW9uOiAnc3NtOkRlbGV0ZVBhcmFtZXRlcicsXG4gICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICB9XSxcbiAgICB9LFxuICAgIFBvbGljeU5hbWU6ICdTaW5nbGV0b25MYW1iZGFmMjU4MDNkMzA1NGI0NGZjOTg1ZjQ4NjBkN2Q2ZWU3NFNlcnZpY2VSb2xlRGVmYXVsdFBvbGljeUE4RkRGNUJEJyxcbiAgICBSb2xlczogW3sgUmVmOiAnU2luZ2xldG9uTGFtYmRhZjI1ODAzZDMwNTRiNDRmYzk4NWY0ODYwZDdkNmVlNzRTZXJ2aWNlUm9sZTQxMDE0OENGJyB9XSxcbiAgfSkpO1xuXG4gIGFzc2VydC5leHBlY3Qoc3RhY2spLnRvKGFzc2VydC5oYXZlUmVzb3VyY2VMaWtlKCdBV1M6OktNUzo6S2V5Jywge1xuICAgIEtleVBvbGljeToge1xuICAgICAgU3RhdGVtZW50OiBbe1xuICAgICAgICAvLyBUaGUga2V5IGFkbWluaXN0cmF0aW9uIGVuYWJsZXIgc3RhdGVtZW50IC0tIGV4YWN0IGNvbnRlbnQgaXMgaXJyZWxldmFudFxuICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgfSwge1xuICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgIEFjdGlvbjogWydrbXM6RGVjcnlwdCcsICdrbXM6R2VuZXJhdGVEYXRhS2V5J10sXG4gICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICAgIENvbmRpdGlvbjoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczogeyAna21zOlZpYVNlcnZpY2UnOiB7ICdGbjo6Sm9pbic6IFsnJywgWydzZWNyZXRzbWFuYWdlci4nLCB7IFJlZjogJ0FXUzo6UmVnaW9uJyB9LCAnLmFtYXpvbmF3cy5jb20nXV0gfSB9LFxuICAgICAgICB9LFxuICAgICAgICBQcmluY2lwYWw6IHsgQVdTOiB7ICdGbjo6R2V0QXR0JzogWydTaW5nbGV0b25MYW1iZGFmMjU4MDNkMzA1NGI0NGZjOTg1ZjQ4NjBkN2Q2ZWU3NFNlcnZpY2VSb2xlNDEwMTQ4Q0YnLCAnQXJuJ10gfSB9LFxuICAgICAgfV0sXG4gICAgfSxcbiAgfSkpO1xufSk7XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@monocdk-experiment/assert/jest';
|