@aws-solutions-constructs/aws-cloudfront-s3 2.3.0 → 2.6.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.
@@ -20,6 +20,12 @@
20
20
  "IgnorePublicAcls": true,
21
21
  "RestrictPublicBuckets": true
22
22
  },
23
+ "Tags": [
24
+ {
25
+ "Key": "aws-cdk:auto-delete-objects",
26
+ "Value": "true"
27
+ }
28
+ ],
23
29
  "VersioningConfiguration": {
24
30
  "Status": "Enabled"
25
31
  }
@@ -78,12 +84,69 @@
78
84
  ]
79
85
  }
80
86
  ]
87
+ },
88
+ {
89
+ "Action": [
90
+ "s3:GetBucket*",
91
+ "s3:List*",
92
+ "s3:DeleteObject*"
93
+ ],
94
+ "Effect": "Allow",
95
+ "Principal": {
96
+ "AWS": {
97
+ "Fn::GetAtt": [
98
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
99
+ "Arn"
100
+ ]
101
+ }
102
+ },
103
+ "Resource": [
104
+ {
105
+ "Fn::GetAtt": [
106
+ "testcloudfronts3S3LoggingBucket90D239DD",
107
+ "Arn"
108
+ ]
109
+ },
110
+ {
111
+ "Fn::Join": [
112
+ "",
113
+ [
114
+ {
115
+ "Fn::GetAtt": [
116
+ "testcloudfronts3S3LoggingBucket90D239DD",
117
+ "Arn"
118
+ ]
119
+ },
120
+ "/*"
121
+ ]
122
+ ]
123
+ }
124
+ ]
81
125
  }
82
126
  ],
83
127
  "Version": "2012-10-17"
84
128
  }
85
129
  }
86
130
  },
131
+ "testcloudfronts3S3LoggingBucketAutoDeleteObjectsCustomResource6EE37727": {
132
+ "Type": "Custom::S3AutoDeleteObjects",
133
+ "Properties": {
134
+ "ServiceToken": {
135
+ "Fn::GetAtt": [
136
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
137
+ "Arn"
138
+ ]
139
+ },
140
+ "BucketName": {
141
+ "Ref": "testcloudfronts3S3LoggingBucket90D239DD"
142
+ }
143
+ },
144
+ "DependsOn": [
145
+ "testcloudfronts3S3LoggingBucketPolicy529D4CFF"
146
+ ],
147
+ "UpdateReplacePolicy": "Delete",
148
+ "DeletionPolicy": "Delete"
149
+ },
87
150
  "testcloudfronts3S3BucketE0C5F76E": {
88
151
  "Type": "AWS::S3::Bucket",
89
152
  "Properties": {
@@ -120,6 +183,12 @@
120
183
  "IgnorePublicAcls": true,
121
184
  "RestrictPublicBuckets": true
122
185
  },
186
+ "Tags": [
187
+ {
188
+ "Key": "aws-cdk:auto-delete-objects",
189
+ "Value": "true"
190
+ }
191
+ ],
123
192
  "VersioningConfiguration": {
124
193
  "Status": "Enabled"
125
194
  }
@@ -169,6 +238,44 @@
169
238
  }
170
239
  ]
171
240
  },
241
+ {
242
+ "Action": [
243
+ "s3:GetBucket*",
244
+ "s3:List*",
245
+ "s3:DeleteObject*"
246
+ ],
247
+ "Effect": "Allow",
248
+ "Principal": {
249
+ "AWS": {
250
+ "Fn::GetAtt": [
251
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
252
+ "Arn"
253
+ ]
254
+ }
255
+ },
256
+ "Resource": [
257
+ {
258
+ "Fn::GetAtt": [
259
+ "testcloudfronts3S3BucketE0C5F76E",
260
+ "Arn"
261
+ ]
262
+ },
263
+ {
264
+ "Fn::Join": [
265
+ "",
266
+ [
267
+ {
268
+ "Fn::GetAtt": [
269
+ "testcloudfronts3S3BucketE0C5F76E",
270
+ "Arn"
271
+ ]
272
+ },
273
+ "/*"
274
+ ]
275
+ ]
276
+ }
277
+ ]
278
+ },
172
279
  {
173
280
  "Action": "s3:GetObject",
174
281
  "Effect": "Allow",
@@ -210,6 +317,25 @@
210
317
  }
211
318
  }
212
319
  },
320
+ "testcloudfronts3S3BucketAutoDeleteObjectsCustomResourceA13DD8F7": {
321
+ "Type": "Custom::S3AutoDeleteObjects",
322
+ "Properties": {
323
+ "ServiceToken": {
324
+ "Fn::GetAtt": [
325
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
326
+ "Arn"
327
+ ]
328
+ },
329
+ "BucketName": {
330
+ "Ref": "testcloudfronts3S3BucketE0C5F76E"
331
+ }
332
+ },
333
+ "DependsOn": [
334
+ "testcloudfronts3S3BucketPolicy250F1F61"
335
+ ],
336
+ "UpdateReplacePolicy": "Delete",
337
+ "DeletionPolicy": "Delete"
338
+ },
213
339
  "testcloudfronts3SetHttpSecurityHeaders6C5A1E69": {
214
340
  "Type": "AWS::CloudFront::Function",
215
341
  "Properties": {
@@ -241,12 +367,18 @@
241
367
  "IgnorePublicAcls": true,
242
368
  "RestrictPublicBuckets": true
243
369
  },
370
+ "Tags": [
371
+ {
372
+ "Key": "aws-cdk:auto-delete-objects",
373
+ "Value": "true"
374
+ }
375
+ ],
244
376
  "VersioningConfiguration": {
245
377
  "Status": "Enabled"
246
378
  }
247
379
  },
248
- "UpdateReplacePolicy": "Retain",
249
- "DeletionPolicy": "Retain",
380
+ "UpdateReplacePolicy": "Delete",
381
+ "DeletionPolicy": "Delete",
250
382
  "Metadata": {
251
383
  "cfn_nag": {
252
384
  "rules_to_suppress": [
@@ -299,12 +431,69 @@
299
431
  ]
300
432
  }
301
433
  ]
434
+ },
435
+ {
436
+ "Action": [
437
+ "s3:GetBucket*",
438
+ "s3:List*",
439
+ "s3:DeleteObject*"
440
+ ],
441
+ "Effect": "Allow",
442
+ "Principal": {
443
+ "AWS": {
444
+ "Fn::GetAtt": [
445
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
446
+ "Arn"
447
+ ]
448
+ }
449
+ },
450
+ "Resource": [
451
+ {
452
+ "Fn::GetAtt": [
453
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
454
+ "Arn"
455
+ ]
456
+ },
457
+ {
458
+ "Fn::Join": [
459
+ "",
460
+ [
461
+ {
462
+ "Fn::GetAtt": [
463
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
464
+ "Arn"
465
+ ]
466
+ },
467
+ "/*"
468
+ ]
469
+ ]
470
+ }
471
+ ]
302
472
  }
303
473
  ],
304
474
  "Version": "2012-10-17"
305
475
  }
306
476
  }
307
477
  },
478
+ "testcloudfronts3CloudfrontLoggingBucketAutoDeleteObjectsCustomResource19604D88": {
479
+ "Type": "Custom::S3AutoDeleteObjects",
480
+ "Properties": {
481
+ "ServiceToken": {
482
+ "Fn::GetAtt": [
483
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
484
+ "Arn"
485
+ ]
486
+ },
487
+ "BucketName": {
488
+ "Ref": "testcloudfronts3CloudfrontLoggingBucket985C0FE8"
489
+ }
490
+ },
491
+ "DependsOn": [
492
+ "testcloudfronts3CloudfrontLoggingBucketPolicyDF55851B"
493
+ ],
494
+ "UpdateReplacePolicy": "Delete",
495
+ "DeletionPolicy": "Delete"
496
+ },
308
497
  "testcloudfronts3CloudFrontDistributionOrigin1S3Origin4695F058": {
309
498
  "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity",
310
499
  "Properties": {
@@ -382,6 +571,82 @@
382
571
  ]
383
572
  }
384
573
  }
574
+ },
575
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
576
+ "Type": "AWS::IAM::Role",
577
+ "Properties": {
578
+ "AssumeRolePolicyDocument": {
579
+ "Version": "2012-10-17",
580
+ "Statement": [
581
+ {
582
+ "Action": "sts:AssumeRole",
583
+ "Effect": "Allow",
584
+ "Principal": {
585
+ "Service": "lambda.amazonaws.com"
586
+ }
587
+ }
588
+ ]
589
+ },
590
+ "ManagedPolicyArns": [
591
+ {
592
+ "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
593
+ }
594
+ ]
595
+ }
596
+ },
597
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
598
+ "Type": "AWS::Lambda::Function",
599
+ "Properties": {
600
+ "Code": {
601
+ "S3Bucket": {
602
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
603
+ },
604
+ "S3Key": "15684a15d07860e99d2a8079150ad33dd2cb743677fcd7016dd07345e1b69538.zip"
605
+ },
606
+ "Timeout": 900,
607
+ "MemorySize": 128,
608
+ "Handler": "__entrypoint__.handler",
609
+ "Role": {
610
+ "Fn::GetAtt": [
611
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
612
+ "Arn"
613
+ ]
614
+ },
615
+ "Runtime": "nodejs12.x",
616
+ "Description": {
617
+ "Fn::Join": [
618
+ "",
619
+ [
620
+ "Lambda function for auto-deleting objects in ",
621
+ {
622
+ "Ref": "testcloudfronts3S3LoggingBucket90D239DD"
623
+ },
624
+ " S3 bucket."
625
+ ]
626
+ ]
627
+ }
628
+ },
629
+ "DependsOn": [
630
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092"
631
+ ],
632
+ "Metadata": {
633
+ "cfn_nag": {
634
+ "rules_to_suppress": [
635
+ {
636
+ "id": "W58",
637
+ "reason": "CDK generated custom resource"
638
+ },
639
+ {
640
+ "id": "W89",
641
+ "reason": "CDK generated custom resource"
642
+ },
643
+ {
644
+ "id": "W92",
645
+ "reason": "CDK generated custom resource"
646
+ }
647
+ ]
648
+ }
649
+ }
385
650
  }
386
651
  },
387
652
  "Parameters": {
@@ -23,13 +23,20 @@ const stack = new aws_cdk_lib_1.Stack(app, core_1.generateIntegStackName(__filen
23
23
  new lib_1.CloudFrontToS3(stack, 'test-cloudfront-s3', {
24
24
  bucketProps: {
25
25
  removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
26
+ autoDeleteObjects: true
26
27
  },
27
28
  loggingBucketProps: {
28
29
  removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
30
+ autoDeleteObjects: true,
29
31
  bucketName: 'custom-logging-bucket',
30
32
  encryption: aws_s3_1.BucketEncryption.S3_MANAGED,
31
33
  versioned: true
34
+ },
35
+ cloudFrontLoggingBucketProps: {
36
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
37
+ autoDeleteObjects: true,
32
38
  }
33
39
  });
40
+ core_1.suppressAutoDeleteHandlerWarnings(stack);
34
41
  app.synth();
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuY3VzdG9tTG9nZ2luZ0J1Y2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVnLmN1c3RvbUxvZ2dpbmdCdWNrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILGdCQUFnQjtBQUNoQiw2Q0FBd0Q7QUFDeEQsK0NBQXNEO0FBQ3RELGdDQUF3QztBQUN4Qyx5REFBd0U7QUFFeEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBRyxFQUFFLENBQUM7QUFFdEIsa0JBQWtCO0FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsNkJBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUVqRSxJQUFJLG9CQUFjLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO0lBQzlDLFdBQVcsRUFBRTtRQUNYLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87S0FDckM7SUFDRCxrQkFBa0IsRUFBRTtRQUNsQixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLFVBQVUsRUFBRSx1QkFBdUI7UUFDbkMsVUFBVSxFQUFFLHlCQUFnQixDQUFDLFVBQVU7UUFDdkMsU0FBUyxFQUFFLElBQUk7S0FDaEI7Q0FDRixDQUFDLENBQUM7QUFDSCxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vLyAhY2RrLWludGVnICpcbmltcG9ydCB7IEFwcCwgU3RhY2ssIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEJ1Y2tldEVuY3J5cHRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDbG91ZEZyb250VG9TMyB9IGZyb20gXCIuLi9saWJcIjtcbmltcG9ydCB7IGdlbmVyYXRlSW50ZWdTdGFja05hbWUgfSBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5cbi8vIEVtcHR5IGFyZ3VtZW50c1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpKTtcblxubmV3IENsb3VkRnJvbnRUb1MzKHN0YWNrLCAndGVzdC1jbG91ZGZyb250LXMzJywge1xuICBidWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgfSxcbiAgbG9nZ2luZ0J1Y2tldFByb3BzOiB7XG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIGJ1Y2tldE5hbWU6ICdjdXN0b20tbG9nZ2luZy1idWNrZXQnLFxuICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICB2ZXJzaW9uZWQ6IHRydWVcbiAgfVxufSk7XG5hcHAuc3ludGgoKTsiXX0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuY3VzdG9tTG9nZ2luZ0J1Y2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVnLmN1c3RvbUxvZ2dpbmdCdWNrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILGdCQUFnQjtBQUNoQiw2Q0FBd0Q7QUFDeEQsK0NBQXNEO0FBQ3RELGdDQUF3QztBQUN4Qyx5REFBMkc7QUFFM0csTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBRyxFQUFFLENBQUM7QUFFdEIsa0JBQWtCO0FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsNkJBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUVqRSxJQUFJLG9CQUFjLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO0lBQzlDLFdBQVcsRUFBRTtRQUNYLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87UUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QjtJQUNELGtCQUFrQixFQUFFO1FBQ2xCLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87UUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtRQUN2QixVQUFVLEVBQUUsdUJBQXVCO1FBQ25DLFVBQVUsRUFBRSx5QkFBZ0IsQ0FBQyxVQUFVO1FBQ3ZDLFNBQVMsRUFBRSxJQUFJO0tBQ2hCO0lBQ0QsNEJBQTRCLEVBQUU7UUFDNUIsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztRQUNwQyxpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCO0NBQ0YsQ0FBQyxDQUFDO0FBQ0gsd0NBQWlDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IDIwMjIgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLy8gIWNkay1pbnRlZyAqXG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBCdWNrZXRFbmNyeXB0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRvUzMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lLCBzdXBwcmVzc0F1dG9EZWxldGVIYW5kbGVyV2FybmluZ3MgfSBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5cbi8vIEVtcHR5IGFyZ3VtZW50c1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpKTtcblxubmV3IENsb3VkRnJvbnRUb1MzKHN0YWNrLCAndGVzdC1jbG91ZGZyb250LXMzJywge1xuICBidWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZVxuICB9LFxuICBsb2dnaW5nQnVja2V0UHJvcHM6IHtcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgYnVja2V0TmFtZTogJ2N1c3RvbS1sb2dnaW5nLWJ1Y2tldCcsXG4gICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIHZlcnNpb25lZDogdHJ1ZVxuICB9LFxuICBjbG91ZEZyb250TG9nZ2luZ0J1Y2tldFByb3BzOiB7XG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICB9XG59KTtcbnN1cHByZXNzQXV0b0RlbGV0ZUhhbmRsZXJXYXJuaW5ncyhzdGFjayk7XG5hcHAuc3ludGgoKTsiXX0=
@@ -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_1 = require("@aws-solutions-constructs/core");
24
24
  const app = new aws_cdk_lib_1.App();
25
25
  const stack = new aws_cdk_lib_1.Stack(app, core_1.generateIntegStackName(__filename));
26
26
  let mybucket;
27
- mybucket = defaults.CreateScrapBucket(stack, { removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY });
27
+ mybucket = defaults.CreateScrapBucket(stack, {
28
+ removalPolicy: aws_cdk_lib_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: aws_cdk_lib_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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZXhpc3RpbmctYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcuZXhpc3RpbmctYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1YsNkNBQXdEO0FBRXhELDJEQUEyRDtBQUMzRCxnQ0FBd0M7QUFDeEMsOERBQThEO0FBQzlELHlEQUF5RDtBQUN6RCw2Q0FBdUM7QUFDdkMseURBQXdFO0FBRXhFLFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLDZCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFFakUsSUFBSSxRQUFtQixDQUFDO0FBQ3hCLFFBQVEsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUV2RixNQUFNLFVBQVUsR0FBRyxJQUFJLG9CQUFjLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO0lBQ2pFLGlCQUFpQixFQUFFLFFBQVE7Q0FDNUIsQ0FBQyxDQUFDO0FBRUgsbUJBQW1CO0FBQ25CLE1BQU0sYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO0lBQ3ZFLGVBQWUsRUFBRSxVQUFVO0lBQzNCLFVBQVUsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0NBQzVCLENBQUMsQ0FBQztBQUVILGVBQWU7QUFDZixVQUFVLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDaEcsV0FBVyxFQUFFLGFBQWE7Q0FDM0IsQ0FBQyxDQUFDO0FBRUgsUUFBUTtBQUNSLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCAyMDIyIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIkBhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZVwiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRvUzMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgKiBhcyBvcmlnaW5zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSB9IGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5cbi8vIFNldHVwXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsIGdlbmVyYXRlSW50ZWdTdGFja05hbWUoX19maWxlbmFtZSkpO1xuXG5sZXQgbXlidWNrZXQ6IHMzLkJ1Y2tldDtcbm15YnVja2V0ID0gZGVmYXVsdHMuQ3JlYXRlU2NyYXBCdWNrZXQoc3RhY2ssIHsgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIH0pO1xuXG5jb25zdCBfY29uc3RydWN0ID0gbmV3IENsb3VkRnJvbnRUb1MzKHN0YWNrLCAndGVzdC1jbG91ZGZyb250LXMzJywge1xuICBleGlzdGluZ0J1Y2tldE9iajogbXlidWNrZXQsXG59KTtcblxuLy8gQWRkIENhY2hlIFBvbGljeVxuY29uc3QgbXlDYWNoZVBvbGljeSA9IG5ldyBjbG91ZGZyb250LkNhY2hlUG9saWN5KHN0YWNrLCAnbXlDYWNoZVBvbGljeScsIHtcbiAgY2FjaGVQb2xpY3lOYW1lOiAnTXlQb2xpY3knLFxuICBkZWZhdWx0VHRsOiBEdXJhdGlvbi5taW51dGVzKDApLFxuICBtaW5UdGw6IER1cmF0aW9uLm1pbnV0ZXMoMCksXG4gIG1heFR0bDogRHVyYXRpb24ubWludXRlcygwKSxcbn0pO1xuXG4vLyBBZGQgYmVoYXZpb3Jcbl9jb25zdHJ1Y3QuY2xvdWRGcm9udFdlYkRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcignL2ltYWdlcy8qLmpwZycsIG5ldyBvcmlnaW5zLlMzT3JpZ2luKG15YnVja2V0KSwge1xuICBjYWNoZVBvbGljeTogbXlDYWNoZVBvbGljeVxufSk7XG5cbi8vIFN5bnRoXG5hcHAuc3ludGgoKTtcbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZXhpc3RpbmctYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcuZXhpc3RpbmctYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1YsNkNBQXdEO0FBRXhELDJEQUEyRDtBQUMzRCxnQ0FBd0M7QUFDeEMsOERBQThEO0FBQzlELHlEQUF5RDtBQUN6RCw2Q0FBdUM7QUFDdkMseURBQXdFO0FBRXhFLFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLDZCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFFakUsSUFBSSxRQUFtQixDQUFDO0FBQ3hCLFFBQVEsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFJO0lBQzdDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87SUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtDQUN4QixDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLG9CQUFjLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO0lBQ2pFLGlCQUFpQixFQUFFLFFBQVE7SUFDM0IsNEJBQTRCLEVBQUU7UUFDNUIsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztRQUNwQyxpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsbUJBQW1CO0FBQ25CLE1BQU0sYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO0lBQ3ZFLGVBQWUsRUFBRSxVQUFVO0lBQzNCLFVBQVUsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0NBQzVCLENBQUMsQ0FBQztBQUVILGVBQWU7QUFDZixVQUFVLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDaEcsV0FBVyxFQUFFLGFBQWE7Q0FDM0IsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xELFFBQVE7QUFDUixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IEFwcCwgU3RhY2ssIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCJAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmVcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUb1MzIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0ICogYXMgb3JpZ2lucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IGdlbmVyYXRlSW50ZWdTdGFja05hbWUgfSBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG4vLyBTZXR1cFxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpKTtcblxubGV0IG15YnVja2V0OiBzMy5CdWNrZXQ7XG5teWJ1Y2tldCA9IGRlZmF1bHRzLkNyZWF0ZVNjcmFwQnVja2V0KHN0YWNrLCAgIHtcbiAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZVxufSk7XG5cbmNvbnN0IF9jb25zdHJ1Y3QgPSBuZXcgQ2xvdWRGcm9udFRvUzMoc3RhY2ssICd0ZXN0LWNsb3VkZnJvbnQtczMnLCB7XG4gIGV4aXN0aW5nQnVja2V0T2JqOiBteWJ1Y2tldCxcbiAgY2xvdWRGcm9udExvZ2dpbmdCdWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZVxuICB9LFxufSk7XG5cbi8vIEFkZCBDYWNoZSBQb2xpY3lcbmNvbnN0IG15Q2FjaGVQb2xpY3kgPSBuZXcgY2xvdWRmcm9udC5DYWNoZVBvbGljeShzdGFjaywgJ215Q2FjaGVQb2xpY3knLCB7XG4gIGNhY2hlUG9saWN5TmFtZTogJ015UG9saWN5JyxcbiAgZGVmYXVsdFR0bDogRHVyYXRpb24ubWludXRlcygwKSxcbiAgbWluVHRsOiBEdXJhdGlvbi5taW51dGVzKDApLFxuICBtYXhUdGw6IER1cmF0aW9uLm1pbnV0ZXMoMCksXG59KTtcblxuLy8gQWRkIGJlaGF2aW9yXG5fY29uc3RydWN0LmNsb3VkRnJvbnRXZWJEaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoJy9pbWFnZXMvKi5qcGcnLCBuZXcgb3JpZ2lucy5TM09yaWdpbihteWJ1Y2tldCksIHtcbiAgY2FjaGVQb2xpY3k6IG15Q2FjaGVQb2xpY3lcbn0pO1xuXG5kZWZhdWx0cy5zdXBwcmVzc0F1dG9EZWxldGVIYW5kbGVyV2FybmluZ3Moc3RhY2spO1xuLy8gU3ludGhcbmFwcC5zeW50aCgpO1xuIl19