@aws-solutions-constructs/aws-cloudfront-s3 1.144.0 → 1.147.0

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.
@@ -12,6 +12,12 @@
12
12
  }
13
13
  ]
14
14
  },
15
+ "Tags": [
16
+ {
17
+ "Key": "aws-cdk:auto-delete-objects",
18
+ "Value": "true"
19
+ }
20
+ ],
15
21
  "VersioningConfiguration": {
16
22
  "Status": "Enabled"
17
23
  }
@@ -45,6 +51,44 @@
45
51
  },
46
52
  "PolicyDocument": {
47
53
  "Statement": [
54
+ {
55
+ "Action": [
56
+ "s3:GetBucket*",
57
+ "s3:List*",
58
+ "s3:DeleteObject*"
59
+ ],
60
+ "Effect": "Allow",
61
+ "Principal": {
62
+ "AWS": {
63
+ "Fn::GetAtt": [
64
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
65
+ "Arn"
66
+ ]
67
+ }
68
+ },
69
+ "Resource": [
70
+ {
71
+ "Fn::GetAtt": [
72
+ "existingScriptLocation845F3C51",
73
+ "Arn"
74
+ ]
75
+ },
76
+ {
77
+ "Fn::Join": [
78
+ "",
79
+ [
80
+ {
81
+ "Fn::GetAtt": [
82
+ "existingScriptLocation845F3C51",
83
+ "Arn"
84
+ ]
85
+ },
86
+ "/*"
87
+ ]
88
+ ]
89
+ }
90
+ ]
91
+ },
48
92
  {
49
93
  "Action": "s3:GetObject",
50
94
  "Effect": "Allow",
@@ -112,6 +156,101 @@
112
156
  }
113
157
  }
114
158
  },
159
+ "existingScriptLocationAutoDeleteObjectsCustomResource0F729F9B": {
160
+ "Type": "Custom::S3AutoDeleteObjects",
161
+ "Properties": {
162
+ "ServiceToken": {
163
+ "Fn::GetAtt": [
164
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
165
+ "Arn"
166
+ ]
167
+ },
168
+ "BucketName": {
169
+ "Ref": "existingScriptLocation845F3C51"
170
+ }
171
+ },
172
+ "DependsOn": [
173
+ "existingScriptLocationPolicy276EC326"
174
+ ],
175
+ "UpdateReplacePolicy": "Delete",
176
+ "DeletionPolicy": "Delete"
177
+ },
178
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
179
+ "Type": "AWS::IAM::Role",
180
+ "Properties": {
181
+ "AssumeRolePolicyDocument": {
182
+ "Version": "2012-10-17",
183
+ "Statement": [
184
+ {
185
+ "Action": "sts:AssumeRole",
186
+ "Effect": "Allow",
187
+ "Principal": {
188
+ "Service": "lambda.amazonaws.com"
189
+ }
190
+ }
191
+ ]
192
+ },
193
+ "ManagedPolicyArns": [
194
+ {
195
+ "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
196
+ }
197
+ ]
198
+ }
199
+ },
200
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
201
+ "Type": "AWS::Lambda::Function",
202
+ "Properties": {
203
+ "Code": {
204
+ "S3Bucket": {
205
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
206
+ },
207
+ "S3Key": "15684a15d07860e99d2a8079150ad33dd2cb743677fcd7016dd07345e1b69538.zip"
208
+ },
209
+ "Timeout": 900,
210
+ "MemorySize": 128,
211
+ "Handler": "__entrypoint__.handler",
212
+ "Role": {
213
+ "Fn::GetAtt": [
214
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
215
+ "Arn"
216
+ ]
217
+ },
218
+ "Runtime": "nodejs12.x",
219
+ "Description": {
220
+ "Fn::Join": [
221
+ "",
222
+ [
223
+ "Lambda function for auto-deleting objects in ",
224
+ {
225
+ "Ref": "existingScriptLocation845F3C51"
226
+ },
227
+ " S3 bucket."
228
+ ]
229
+ ]
230
+ }
231
+ },
232
+ "DependsOn": [
233
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092"
234
+ ],
235
+ "Metadata": {
236
+ "cfn_nag": {
237
+ "rules_to_suppress": [
238
+ {
239
+ "id": "W58",
240
+ "reason": "CDK generated custom resource"
241
+ },
242
+ {
243
+ "id": "W89",
244
+ "reason": "CDK generated custom resource"
245
+ },
246
+ {
247
+ "id": "W92",
248
+ "reason": "CDK generated custom resource"
249
+ }
250
+ ]
251
+ }
252
+ }
253
+ },
115
254
  "testcloudfronts3SetHttpSecurityHeaders6C5A1E69": {
116
255
  "Type": "AWS::CloudFront::Function",
117
256
  "Properties": {
@@ -143,12 +282,18 @@
143
282
  "IgnorePublicAcls": true,
144
283
  "RestrictPublicBuckets": true
145
284
  },
285
+ "Tags": [
286
+ {
287
+ "Key": "aws-cdk:auto-delete-objects",
288
+ "Value": "true"
289
+ }
290
+ ],
146
291
  "VersioningConfiguration": {
147
292
  "Status": "Enabled"
148
293
  }
149
294
  },
150
- "UpdateReplacePolicy": "Retain",
151
- "DeletionPolicy": "Retain",
295
+ "UpdateReplacePolicy": "Delete",
296
+ "DeletionPolicy": "Delete",
152
297
  "Metadata": {
153
298
  "cfn_nag": {
154
299
  "rules_to_suppress": [
@@ -201,12 +346,69 @@
201
346
  ]
202
347
  }
203
348
  ]
349
+ },
350
+ {
351
+ "Action": [
352
+ "s3:GetBucket*",
353
+ "s3:List*",
354
+ "s3:DeleteObject*"
355
+ ],
356
+ "Effect": "Allow",
357
+ "Principal": {
358
+ "AWS": {
359
+ "Fn::GetAtt": [
360
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
361
+ "Arn"
362
+ ]
363
+ }
364
+ },
365
+ "Resource": [
366
+ {
367
+ "Fn::GetAtt": [
368
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
369
+ "Arn"
370
+ ]
371
+ },
372
+ {
373
+ "Fn::Join": [
374
+ "",
375
+ [
376
+ {
377
+ "Fn::GetAtt": [
378
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
379
+ "Arn"
380
+ ]
381
+ },
382
+ "/*"
383
+ ]
384
+ ]
385
+ }
386
+ ]
204
387
  }
205
388
  ],
206
389
  "Version": "2012-10-17"
207
390
  }
208
391
  }
209
392
  },
393
+ "testcloudfronts3CloudfrontLoggingBucketAutoDeleteObjectsCustomResource19604D88": {
394
+ "Type": "Custom::S3AutoDeleteObjects",
395
+ "Properties": {
396
+ "ServiceToken": {
397
+ "Fn::GetAtt": [
398
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
399
+ "Arn"
400
+ ]
401
+ },
402
+ "BucketName": {
403
+ "Ref": "testcloudfronts3CloudfrontLoggingBucket985C0FE8"
404
+ }
405
+ },
406
+ "DependsOn": [
407
+ "testcloudfronts3CloudfrontLoggingBucketPolicyDF55851B"
408
+ ],
409
+ "UpdateReplacePolicy": "Delete",
410
+ "DeletionPolicy": "Delete"
411
+ },
210
412
  "testcloudfronts3CloudFrontDistributionOrigin1S3Origin4695F058": {
211
413
  "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity",
212
414
  "Properties": {
@@ -24,9 +24,16 @@ const core_3 = require("@aws-solutions-constructs/core");
24
24
  const app = new core_1.App();
25
25
  const stack = new core_1.Stack(app, core_3.generateIntegStackName(__filename));
26
26
  let mybucket;
27
- mybucket = defaults.CreateScrapBucket(stack, { removalPolicy: core_1.RemovalPolicy.DESTROY });
27
+ mybucket = defaults.CreateScrapBucket(stack, {
28
+ removalPolicy: core_1.RemovalPolicy.DESTROY,
29
+ autoDeleteObjects: true
30
+ });
28
31
  const _construct = new lib_1.CloudFrontToS3(stack, 'test-cloudfront-s3', {
29
32
  existingBucketObj: mybucket,
33
+ cloudFrontLoggingBucketProps: {
34
+ removalPolicy: core_1.RemovalPolicy.DESTROY,
35
+ autoDeleteObjects: true
36
+ },
30
37
  });
31
38
  // Add Cache Policy
32
39
  const myCachePolicy = new cloudfront.CachePolicy(stack, 'myCachePolicy', {
@@ -39,6 +46,7 @@ const myCachePolicy = new cloudfront.CachePolicy(stack, 'myCachePolicy', {
39
46
  _construct.cloudFrontWebDistribution.addBehavior('/images/*.jpg', new origins.S3Origin(mybucket), {
40
47
  cachePolicy: myCachePolicy
41
48
  });
49
+ defaults.suppressAutoDeleteHandlerWarnings(stack);
42
50
  // Synth
43
51
  app.synth();
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZXhpc3RpbmctYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcuZXhpc3RpbmctYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQTBEO0FBRTFELDJEQUEyRDtBQUMzRCxnQ0FBd0M7QUFDeEMsMkRBQTJEO0FBQzNELHNEQUFzRDtBQUN0RCx3Q0FBeUM7QUFDekMseURBQXdFO0FBRXhFLFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxDQUFDLEdBQUcsRUFBRSw2QkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRWpFLElBQUksUUFBbUIsQ0FBQztBQUN4QixRQUFRLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxvQkFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFFdkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBYyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtJQUNqRSxpQkFBaUIsRUFBRSxRQUFRO0NBQzVCLENBQUMsQ0FBQztBQUVILG1CQUFtQjtBQUNuQixNQUFNLGFBQWEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRTtJQUN2RSxlQUFlLEVBQUUsVUFBVTtJQUMzQixVQUFVLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxFQUFFLGVBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztDQUM1QixDQUFDLENBQUM7QUFFSCxlQUFlO0FBQ2YsVUFBVSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQ2hHLFdBQVcsRUFBRSxhQUFhO0NBQzNCLENBQUMsQ0FBQztBQUVILFFBQVE7QUFDUixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IEFwcCwgU3RhY2ssIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiQGF3cy1jZGsvY29yZVwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcIkBhd3MtY2RrL2F3cy1zM1wiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIkBhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZVwiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRvUzMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgKiBhcyBvcmlnaW5zIGZyb20gJ0Bhd3MtY2RrL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdAYXdzLWNkay9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJAYXdzLWNkay9jb3JlXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcblxuLy8gU2V0dXBcbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbmNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZShfX2ZpbGVuYW1lKSk7XG5cbmxldCBteWJ1Y2tldDogczMuQnVja2V0O1xubXlidWNrZXQgPSBkZWZhdWx0cy5DcmVhdGVTY3JhcEJ1Y2tldChzdGFjaywgeyByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1kgfSk7XG5cbmNvbnN0IF9jb25zdHJ1Y3QgPSBuZXcgQ2xvdWRGcm9udFRvUzMoc3RhY2ssICd0ZXN0LWNsb3VkZnJvbnQtczMnLCB7XG4gIGV4aXN0aW5nQnVja2V0T2JqOiBteWJ1Y2tldCxcbn0pO1xuXG4vLyBBZGQgQ2FjaGUgUG9saWN5XG5jb25zdCBteUNhY2hlUG9saWN5ID0gbmV3IGNsb3VkZnJvbnQuQ2FjaGVQb2xpY3koc3RhY2ssICdteUNhY2hlUG9saWN5Jywge1xuICBjYWNoZVBvbGljeU5hbWU6ICdNeVBvbGljeScsXG4gIGRlZmF1bHRUdGw6IER1cmF0aW9uLm1pbnV0ZXMoMCksXG4gIG1pblR0bDogRHVyYXRpb24ubWludXRlcygwKSxcbiAgbWF4VHRsOiBEdXJhdGlvbi5taW51dGVzKDApLFxufSk7XG5cbi8vIEFkZCBiZWhhdmlvclxuX2NvbnN0cnVjdC5jbG91ZEZyb250V2ViRGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvaW1hZ2VzLyouanBnJywgbmV3IG9yaWdpbnMuUzNPcmlnaW4obXlidWNrZXQpLCB7XG4gIGNhY2hlUG9saWN5OiBteUNhY2hlUG9saWN5XG59KTtcblxuLy8gU3ludGhcbmFwcC5zeW50aCgpO1xuIl19
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZXhpc3RpbmctYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcuZXhpc3RpbmctYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQTBEO0FBRTFELDJEQUEyRDtBQUMzRCxnQ0FBd0M7QUFDeEMsMkRBQTJEO0FBQzNELHNEQUFzRDtBQUN0RCx3Q0FBeUM7QUFDekMseURBQXdFO0FBRXhFLFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxDQUFDLEdBQUcsRUFBRSw2QkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRWpFLElBQUksUUFBbUIsQ0FBQztBQUN4QixRQUFRLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBSTtJQUM3QyxhQUFhLEVBQUUsb0JBQWEsQ0FBQyxPQUFPO0lBQ3BDLGlCQUFpQixFQUFFLElBQUk7Q0FDeEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBYyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtJQUNqRSxpQkFBaUIsRUFBRSxRQUFRO0lBQzNCLDRCQUE0QixFQUFFO1FBQzVCLGFBQWEsRUFBRSxvQkFBYSxDQUFDLE9BQU87UUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QjtDQUNGLENBQUMsQ0FBQztBQUVILG1CQUFtQjtBQUNuQixNQUFNLGFBQWEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRTtJQUN2RSxlQUFlLEVBQUUsVUFBVTtJQUMzQixVQUFVLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxFQUFFLGVBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztDQUM1QixDQUFDLENBQUM7QUFFSCxlQUFlO0FBQ2YsVUFBVSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQ2hHLFdBQVcsRUFBRSxhQUFhO0NBQzNCLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRCxRQUFRO0FBQ1IsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IDIwMjIgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcIkBhd3MtY2RrL2NvcmVcIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJAYXdzLWNkay9hd3MtczNcIjtcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCJAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmVcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUb1MzIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0ICogYXMgb3JpZ2lucyBmcm9tICdAYXdzLWNkay9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnQGF3cy1jZGsvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiQGF3cy1jZGsvY29yZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSB9IGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5cbi8vIFNldHVwXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsIGdlbmVyYXRlSW50ZWdTdGFja05hbWUoX19maWxlbmFtZSkpO1xuXG5sZXQgbXlidWNrZXQ6IHMzLkJ1Y2tldDtcbm15YnVja2V0ID0gZGVmYXVsdHMuQ3JlYXRlU2NyYXBCdWNrZXQoc3RhY2ssICAge1xuICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlXG59KTtcblxuY29uc3QgX2NvbnN0cnVjdCA9IG5ldyBDbG91ZEZyb250VG9TMyhzdGFjaywgJ3Rlc3QtY2xvdWRmcm9udC1zMycsIHtcbiAgZXhpc3RpbmdCdWNrZXRPYmo6IG15YnVja2V0LFxuICBjbG91ZEZyb250TG9nZ2luZ0J1Y2tldFByb3BzOiB7XG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlXG4gIH0sXG59KTtcblxuLy8gQWRkIENhY2hlIFBvbGljeVxuY29uc3QgbXlDYWNoZVBvbGljeSA9IG5ldyBjbG91ZGZyb250LkNhY2hlUG9saWN5KHN0YWNrLCAnbXlDYWNoZVBvbGljeScsIHtcbiAgY2FjaGVQb2xpY3lOYW1lOiAnTXlQb2xpY3knLFxuICBkZWZhdWx0VHRsOiBEdXJhdGlvbi5taW51dGVzKDApLFxuICBtaW5UdGw6IER1cmF0aW9uLm1pbnV0ZXMoMCksXG4gIG1heFR0bDogRHVyYXRpb24ubWludXRlcygwKSxcbn0pO1xuXG4vLyBBZGQgYmVoYXZpb3Jcbl9jb25zdHJ1Y3QuY2xvdWRGcm9udFdlYkRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcignL2ltYWdlcy8qLmpwZycsIG5ldyBvcmlnaW5zLlMzT3JpZ2luKG15YnVja2V0KSwge1xuICBjYWNoZVBvbGljeTogbXlDYWNoZVBvbGljeVxufSk7XG5cbmRlZmF1bHRzLnN1cHByZXNzQXV0b0RlbGV0ZUhhbmRsZXJXYXJuaW5ncyhzdGFjayk7XG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=
@@ -32,6 +32,12 @@
32
32
  "IgnorePublicAcls": true,
33
33
  "RestrictPublicBuckets": true
34
34
  },
35
+ "Tags": [
36
+ {
37
+ "Key": "aws-cdk:auto-delete-objects",
38
+ "Value": "true"
39
+ }
40
+ ],
35
41
  "VersioningConfiguration": {
36
42
  "Status": "Enabled"
37
43
  }
@@ -91,6 +97,44 @@
91
97
  }
92
98
  ]
93
99
  },
100
+ {
101
+ "Action": [
102
+ "s3:GetBucket*",
103
+ "s3:List*",
104
+ "s3:DeleteObject*"
105
+ ],
106
+ "Effect": "Allow",
107
+ "Principal": {
108
+ "AWS": {
109
+ "Fn::GetAtt": [
110
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
111
+ "Arn"
112
+ ]
113
+ }
114
+ },
115
+ "Resource": [
116
+ {
117
+ "Fn::GetAtt": [
118
+ "testcloudfronts3S3BucketE0C5F76E",
119
+ "Arn"
120
+ ]
121
+ },
122
+ {
123
+ "Fn::Join": [
124
+ "",
125
+ [
126
+ {
127
+ "Fn::GetAtt": [
128
+ "testcloudfronts3S3BucketE0C5F76E",
129
+ "Arn"
130
+ ]
131
+ },
132
+ "/*"
133
+ ]
134
+ ]
135
+ }
136
+ ]
137
+ },
94
138
  {
95
139
  "Action": "s3:GetObject",
96
140
  "Effect": "Allow",
@@ -132,6 +176,25 @@
132
176
  }
133
177
  }
134
178
  },
179
+ "testcloudfronts3S3BucketAutoDeleteObjectsCustomResourceA13DD8F7": {
180
+ "Type": "Custom::S3AutoDeleteObjects",
181
+ "Properties": {
182
+ "ServiceToken": {
183
+ "Fn::GetAtt": [
184
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
185
+ "Arn"
186
+ ]
187
+ },
188
+ "BucketName": {
189
+ "Ref": "testcloudfronts3S3BucketE0C5F76E"
190
+ }
191
+ },
192
+ "DependsOn": [
193
+ "testcloudfronts3S3BucketPolicy250F1F61"
194
+ ],
195
+ "UpdateReplacePolicy": "Delete",
196
+ "DeletionPolicy": "Delete"
197
+ },
135
198
  "testcloudfronts3SetHttpSecurityHeaders6C5A1E69": {
136
199
  "Type": "AWS::CloudFront::Function",
137
200
  "Properties": {
@@ -163,12 +226,18 @@
163
226
  "IgnorePublicAcls": true,
164
227
  "RestrictPublicBuckets": true
165
228
  },
229
+ "Tags": [
230
+ {
231
+ "Key": "aws-cdk:auto-delete-objects",
232
+ "Value": "true"
233
+ }
234
+ ],
166
235
  "VersioningConfiguration": {
167
236
  "Status": "Enabled"
168
237
  }
169
238
  },
170
- "UpdateReplacePolicy": "Retain",
171
- "DeletionPolicy": "Retain",
239
+ "UpdateReplacePolicy": "Delete",
240
+ "DeletionPolicy": "Delete",
172
241
  "Metadata": {
173
242
  "cfn_nag": {
174
243
  "rules_to_suppress": [
@@ -221,12 +290,69 @@
221
290
  ]
222
291
  }
223
292
  ]
293
+ },
294
+ {
295
+ "Action": [
296
+ "s3:GetBucket*",
297
+ "s3:List*",
298
+ "s3:DeleteObject*"
299
+ ],
300
+ "Effect": "Allow",
301
+ "Principal": {
302
+ "AWS": {
303
+ "Fn::GetAtt": [
304
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
305
+ "Arn"
306
+ ]
307
+ }
308
+ },
309
+ "Resource": [
310
+ {
311
+ "Fn::GetAtt": [
312
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
313
+ "Arn"
314
+ ]
315
+ },
316
+ {
317
+ "Fn::Join": [
318
+ "",
319
+ [
320
+ {
321
+ "Fn::GetAtt": [
322
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
323
+ "Arn"
324
+ ]
325
+ },
326
+ "/*"
327
+ ]
328
+ ]
329
+ }
330
+ ]
224
331
  }
225
332
  ],
226
333
  "Version": "2012-10-17"
227
334
  }
228
335
  }
229
336
  },
337
+ "testcloudfronts3CloudfrontLoggingBucketAutoDeleteObjectsCustomResource19604D88": {
338
+ "Type": "Custom::S3AutoDeleteObjects",
339
+ "Properties": {
340
+ "ServiceToken": {
341
+ "Fn::GetAtt": [
342
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
343
+ "Arn"
344
+ ]
345
+ },
346
+ "BucketName": {
347
+ "Ref": "testcloudfronts3CloudfrontLoggingBucket985C0FE8"
348
+ }
349
+ },
350
+ "DependsOn": [
351
+ "testcloudfronts3CloudfrontLoggingBucketPolicyDF55851B"
352
+ ],
353
+ "UpdateReplacePolicy": "Delete",
354
+ "DeletionPolicy": "Delete"
355
+ },
230
356
  "testcloudfronts3CloudFrontDistributionOrigin1S3Origin4695F058": {
231
357
  "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity",
232
358
  "Properties": {
@@ -304,6 +430,82 @@
304
430
  ]
305
431
  }
306
432
  }
433
+ },
434
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
435
+ "Type": "AWS::IAM::Role",
436
+ "Properties": {
437
+ "AssumeRolePolicyDocument": {
438
+ "Version": "2012-10-17",
439
+ "Statement": [
440
+ {
441
+ "Action": "sts:AssumeRole",
442
+ "Effect": "Allow",
443
+ "Principal": {
444
+ "Service": "lambda.amazonaws.com"
445
+ }
446
+ }
447
+ ]
448
+ },
449
+ "ManagedPolicyArns": [
450
+ {
451
+ "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
452
+ }
453
+ ]
454
+ }
455
+ },
456
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
457
+ "Type": "AWS::Lambda::Function",
458
+ "Properties": {
459
+ "Code": {
460
+ "S3Bucket": {
461
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
462
+ },
463
+ "S3Key": "15684a15d07860e99d2a8079150ad33dd2cb743677fcd7016dd07345e1b69538.zip"
464
+ },
465
+ "Timeout": 900,
466
+ "MemorySize": 128,
467
+ "Handler": "__entrypoint__.handler",
468
+ "Role": {
469
+ "Fn::GetAtt": [
470
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
471
+ "Arn"
472
+ ]
473
+ },
474
+ "Runtime": "nodejs12.x",
475
+ "Description": {
476
+ "Fn::Join": [
477
+ "",
478
+ [
479
+ "Lambda function for auto-deleting objects in ",
480
+ {
481
+ "Ref": "testcloudfronts3S3BucketE0C5F76E"
482
+ },
483
+ " S3 bucket."
484
+ ]
485
+ ]
486
+ }
487
+ },
488
+ "DependsOn": [
489
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092"
490
+ ],
491
+ "Metadata": {
492
+ "cfn_nag": {
493
+ "rules_to_suppress": [
494
+ {
495
+ "id": "W58",
496
+ "reason": "CDK generated custom resource"
497
+ },
498
+ {
499
+ "id": "W89",
500
+ "reason": "CDK generated custom resource"
501
+ },
502
+ {
503
+ "id": "W92",
504
+ "reason": "CDK generated custom resource"
505
+ }
506
+ ]
507
+ }
508
+ }
307
509
  }
308
510
  },
309
511
  "Parameters": {
@@ -22,8 +22,13 @@ const app = new core_1.App();
22
22
  const stack = new core_1.Stack(app, core_2.generateIntegStackName(__filename));
23
23
  stack.templateOptions.description = 'Integration Test for aws-cloudfront-s3';
24
24
  const construct = new lib_1.CloudFrontToS3(stack, 'test-cloudfront-s3', {
25
+ cloudFrontLoggingBucketProps: {
26
+ removalPolicy: core_1.RemovalPolicy.DESTROY,
27
+ autoDeleteObjects: true
28
+ },
25
29
  bucketProps: {
26
30
  removalPolicy: core_1.RemovalPolicy.DESTROY,
31
+ autoDeleteObjects: true
27
32
  },
28
33
  logS3AccessLogs: false
29
34
  });
@@ -32,6 +37,7 @@ defaults.addCfnSuppressRules(s3Bucket, [
32
37
  { id: 'W35',
33
38
  reason: 'This S3 bucket is created for unit/ integration testing purposes only.' },
34
39
  ]);
40
+ defaults.suppressAutoDeleteHandlerWarnings(stack);
35
41
  // Synth
36
42
  app.synth();
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcubm8tYXJndW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcubm8tYXJndW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQTBEO0FBQzFELGdDQUF3QztBQUN4Qyx5REFBd0U7QUFFeEUsMkRBQTJEO0FBRTNELFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxDQUFDLEdBQUcsRUFBRSw2QkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLHdDQUF3QyxDQUFDO0FBRTdFLE1BQU0sU0FBUyxHQUFHLElBQUksb0JBQWMsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7SUFDaEUsV0FBVyxFQUFFO1FBQ1gsYUFBYSxFQUFFLG9CQUFhLENBQUMsT0FBTztLQUNyQztJQUNELGVBQWUsRUFBRSxLQUFLO0NBQ3ZCLENBQUMsQ0FBQztBQUVILE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFxQixDQUFDO0FBRWpELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7SUFDckMsRUFBRSxFQUFFLEVBQUUsS0FBSztRQUNULE1BQU0sRUFBRSx3RUFBd0UsRUFBRTtDQUNyRixDQUFDLENBQUM7QUFFSCxRQUFRO0FBQ1IsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IDIwMjIgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcIkBhd3MtY2RrL2NvcmVcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUb1MzIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSB9IGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiQGF3cy1jZGsvYXdzLXMzXCI7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG4vLyBTZXR1cFxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpKTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdJbnRlZ3JhdGlvbiBUZXN0IGZvciBhd3MtY2xvdWRmcm9udC1zMyc7XG5cbmNvbnN0IGNvbnN0cnVjdCA9IG5ldyBDbG91ZEZyb250VG9TMyhzdGFjaywgJ3Rlc3QtY2xvdWRmcm9udC1zMycsIHtcbiAgYnVja2V0UHJvcHM6IHtcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gIH0sXG4gIGxvZ1MzQWNjZXNzTG9nczogZmFsc2Vcbn0pO1xuXG5jb25zdCBzM0J1Y2tldCA9IGNvbnN0cnVjdC5zM0J1Y2tldCBhcyBzMy5CdWNrZXQ7XG5cbmRlZmF1bHRzLmFkZENmblN1cHByZXNzUnVsZXMoczNCdWNrZXQsIFtcbiAgeyBpZDogJ1czNScsXG4gICAgcmVhc29uOiAnVGhpcyBTMyBidWNrZXQgaXMgY3JlYXRlZCBmb3IgdW5pdC8gaW50ZWdyYXRpb24gdGVzdGluZyBwdXJwb3NlcyBvbmx5LicgfSxcbl0pO1xuXG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcubm8tYXJndW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcubm8tYXJndW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQTBEO0FBQzFELGdDQUF3QztBQUN4Qyx5REFBd0U7QUFFeEUsMkRBQTJEO0FBRTNELFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxDQUFDLEdBQUcsRUFBRSw2QkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLHdDQUF3QyxDQUFDO0FBRTdFLE1BQU0sU0FBUyxHQUFHLElBQUksb0JBQWMsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7SUFDaEUsNEJBQTRCLEVBQUU7UUFDNUIsYUFBYSxFQUFFLG9CQUFhLENBQUMsT0FBTztRQUNwQyxpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsYUFBYSxFQUFFLG9CQUFhLENBQUMsT0FBTztRQUNwQyxpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCO0lBQ0QsZUFBZSxFQUFFLEtBQUs7Q0FDdkIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQXFCLENBQUM7QUFFakQsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtJQUNyQyxFQUFFLEVBQUUsRUFBRSxLQUFLO1FBQ1QsTUFBTSxFQUFFLHdFQUF3RSxFQUFFO0NBQ3JGLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRCxRQUFRO0FBQ1IsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IDIwMjIgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcIkBhd3MtY2RrL2NvcmVcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUb1MzIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSB9IGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiQGF3cy1jZGsvYXdzLXMzXCI7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG4vLyBTZXR1cFxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpKTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdJbnRlZ3JhdGlvbiBUZXN0IGZvciBhd3MtY2xvdWRmcm9udC1zMyc7XG5cbmNvbnN0IGNvbnN0cnVjdCA9IG5ldyBDbG91ZEZyb250VG9TMyhzdGFjaywgJ3Rlc3QtY2xvdWRmcm9udC1zMycsIHtcbiAgY2xvdWRGcm9udExvZ2dpbmdCdWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZVxuICB9LFxuICBidWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZVxuICB9LFxuICBsb2dTM0FjY2Vzc0xvZ3M6IGZhbHNlXG59KTtcblxuY29uc3QgczNCdWNrZXQgPSBjb25zdHJ1Y3QuczNCdWNrZXQgYXMgczMuQnVja2V0O1xuXG5kZWZhdWx0cy5hZGRDZm5TdXBwcmVzc1J1bGVzKHMzQnVja2V0LCBbXG4gIHsgaWQ6ICdXMzUnLFxuICAgIHJlYXNvbjogJ1RoaXMgUzMgYnVja2V0IGlzIGNyZWF0ZWQgZm9yIHVuaXQvIGludGVncmF0aW9uIHRlc3RpbmcgcHVycG9zZXMgb25seS4nIH0sXG5dKTtcblxuZGVmYXVsdHMuc3VwcHJlc3NBdXRvRGVsZXRlSGFuZGxlcldhcm5pbmdzKHN0YWNrKTtcbi8vIFN5bnRoXG5hcHAuc3ludGgoKTtcbiJdfQ==