@aws-solutions-constructs/aws-cloudfront-s3 1.125.0 → 1.129.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.
@@ -0,0 +1,424 @@
1
+ {
2
+ "Description": "Integration Test for aws-cloudfront-s3 custom CloudFront Logging Bubkcet",
3
+ "Resources": {
4
+ "testcloudfronts3S3LoggingBucket90D239DD": {
5
+ "Type": "AWS::S3::Bucket",
6
+ "Properties": {
7
+ "AccessControl": "LogDeliveryWrite",
8
+ "BucketEncryption": {
9
+ "ServerSideEncryptionConfiguration": [
10
+ {
11
+ "ServerSideEncryptionByDefault": {
12
+ "SSEAlgorithm": "AES256"
13
+ }
14
+ }
15
+ ]
16
+ },
17
+ "PublicAccessBlockConfiguration": {
18
+ "BlockPublicAcls": true,
19
+ "BlockPublicPolicy": true,
20
+ "IgnorePublicAcls": true,
21
+ "RestrictPublicBuckets": true
22
+ },
23
+ "VersioningConfiguration": {
24
+ "Status": "Enabled"
25
+ }
26
+ },
27
+ "UpdateReplacePolicy": "Delete",
28
+ "DeletionPolicy": "Delete",
29
+ "Metadata": {
30
+ "cfn_nag": {
31
+ "rules_to_suppress": [
32
+ {
33
+ "id": "W35",
34
+ "reason": "This S3 bucket is used as the access logging bucket for another bucket"
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ },
40
+ "testcloudfronts3S3LoggingBucketPolicy529D4CFF": {
41
+ "Type": "AWS::S3::BucketPolicy",
42
+ "Properties": {
43
+ "Bucket": {
44
+ "Ref": "testcloudfronts3S3LoggingBucket90D239DD"
45
+ },
46
+ "PolicyDocument": {
47
+ "Statement": [
48
+ {
49
+ "Action": "*",
50
+ "Condition": {
51
+ "Bool": {
52
+ "aws:SecureTransport": "false"
53
+ }
54
+ },
55
+ "Effect": "Deny",
56
+ "Principal": {
57
+ "AWS": "*"
58
+ },
59
+ "Resource": [
60
+ {
61
+ "Fn::Join": [
62
+ "",
63
+ [
64
+ {
65
+ "Fn::GetAtt": [
66
+ "testcloudfronts3S3LoggingBucket90D239DD",
67
+ "Arn"
68
+ ]
69
+ },
70
+ "/*"
71
+ ]
72
+ ]
73
+ },
74
+ {
75
+ "Fn::GetAtt": [
76
+ "testcloudfronts3S3LoggingBucket90D239DD",
77
+ "Arn"
78
+ ]
79
+ }
80
+ ],
81
+ "Sid": "HttpsOnly"
82
+ }
83
+ ],
84
+ "Version": "2012-10-17"
85
+ }
86
+ }
87
+ },
88
+ "testcloudfronts3S3BucketE0C5F76E": {
89
+ "Type": "AWS::S3::Bucket",
90
+ "Properties": {
91
+ "BucketEncryption": {
92
+ "ServerSideEncryptionConfiguration": [
93
+ {
94
+ "ServerSideEncryptionByDefault": {
95
+ "SSEAlgorithm": "AES256"
96
+ }
97
+ }
98
+ ]
99
+ },
100
+ "LifecycleConfiguration": {
101
+ "Rules": [
102
+ {
103
+ "NoncurrentVersionTransitions": [
104
+ {
105
+ "StorageClass": "GLACIER",
106
+ "TransitionInDays": 90
107
+ }
108
+ ],
109
+ "Status": "Enabled"
110
+ }
111
+ ]
112
+ },
113
+ "LoggingConfiguration": {
114
+ "DestinationBucketName": {
115
+ "Ref": "testcloudfronts3S3LoggingBucket90D239DD"
116
+ }
117
+ },
118
+ "PublicAccessBlockConfiguration": {
119
+ "BlockPublicAcls": true,
120
+ "BlockPublicPolicy": true,
121
+ "IgnorePublicAcls": true,
122
+ "RestrictPublicBuckets": true
123
+ },
124
+ "VersioningConfiguration": {
125
+ "Status": "Enabled"
126
+ }
127
+ },
128
+ "UpdateReplacePolicy": "Delete",
129
+ "DeletionPolicy": "Delete"
130
+ },
131
+ "testcloudfronts3S3BucketPolicy250F1F61": {
132
+ "Type": "AWS::S3::BucketPolicy",
133
+ "Properties": {
134
+ "Bucket": {
135
+ "Ref": "testcloudfronts3S3BucketE0C5F76E"
136
+ },
137
+ "PolicyDocument": {
138
+ "Statement": [
139
+ {
140
+ "Action": "*",
141
+ "Condition": {
142
+ "Bool": {
143
+ "aws:SecureTransport": "false"
144
+ }
145
+ },
146
+ "Effect": "Deny",
147
+ "Principal": {
148
+ "AWS": "*"
149
+ },
150
+ "Resource": [
151
+ {
152
+ "Fn::Join": [
153
+ "",
154
+ [
155
+ {
156
+ "Fn::GetAtt": [
157
+ "testcloudfronts3S3BucketE0C5F76E",
158
+ "Arn"
159
+ ]
160
+ },
161
+ "/*"
162
+ ]
163
+ ]
164
+ },
165
+ {
166
+ "Fn::GetAtt": [
167
+ "testcloudfronts3S3BucketE0C5F76E",
168
+ "Arn"
169
+ ]
170
+ }
171
+ ],
172
+ "Sid": "HttpsOnly"
173
+ },
174
+ {
175
+ "Action": "s3:GetObject",
176
+ "Effect": "Allow",
177
+ "Principal": {
178
+ "CanonicalUser": {
179
+ "Fn::GetAtt": [
180
+ "testcloudfronts3CloudFrontDistributionOrigin1S3Origin4695F058",
181
+ "S3CanonicalUserId"
182
+ ]
183
+ }
184
+ },
185
+ "Resource": {
186
+ "Fn::Join": [
187
+ "",
188
+ [
189
+ {
190
+ "Fn::GetAtt": [
191
+ "testcloudfronts3S3BucketE0C5F76E",
192
+ "Arn"
193
+ ]
194
+ },
195
+ "/*"
196
+ ]
197
+ ]
198
+ }
199
+ }
200
+ ],
201
+ "Version": "2012-10-17"
202
+ }
203
+ },
204
+ "Metadata": {
205
+ "cfn_nag": {
206
+ "rules_to_suppress": [
207
+ {
208
+ "id": "F16",
209
+ "reason": "Public website bucket policy requires a wildcard principal"
210
+ }
211
+ ]
212
+ }
213
+ }
214
+ },
215
+ "testcloudfronts3SetHttpSecurityHeaders6C5A1E69": {
216
+ "Type": "AWS::CloudFront::Function",
217
+ "Properties": {
218
+ "Name": "SetHttpSecurityHeadersc88d4d30b2e66a3bd009aa7f11e35596ee70824ece",
219
+ "AutoPublish": true,
220
+ "FunctionCode": "function handler(event) { var response = event.response; var headers = response.headers; headers['strict-transport-security'] = { value: 'max-age=63072000; includeSubdomains; preload'}; headers['content-security-policy'] = { value: \"default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'\"}; headers['x-content-type-options'] = { value: 'nosniff'}; headers['x-frame-options'] = {value: 'DENY'}; headers['x-xss-protection'] = {value: '1; mode=block'}; return response; }",
221
+ "FunctionConfig": {
222
+ "Comment": "SetHttpSecurityHeadersc88d4d30b2e66a3bd009aa7f11e35596ee70824ece",
223
+ "Runtime": "cloudfront-js-1.0"
224
+ }
225
+ }
226
+ },
227
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8": {
228
+ "Type": "AWS::S3::Bucket",
229
+ "Properties": {
230
+ "AccessControl": "LogDeliveryWrite",
231
+ "BucketEncryption": {
232
+ "ServerSideEncryptionConfiguration": [
233
+ {
234
+ "ServerSideEncryptionByDefault": {
235
+ "SSEAlgorithm": "AES256"
236
+ }
237
+ }
238
+ ]
239
+ },
240
+ "PublicAccessBlockConfiguration": {
241
+ "BlockPublicAcls": true,
242
+ "BlockPublicPolicy": true,
243
+ "IgnorePublicAcls": true,
244
+ "RestrictPublicBuckets": true
245
+ },
246
+ "VersioningConfiguration": {
247
+ "Status": "Enabled"
248
+ }
249
+ },
250
+ "UpdateReplacePolicy": "Delete",
251
+ "DeletionPolicy": "Delete",
252
+ "Metadata": {
253
+ "cfn_nag": {
254
+ "rules_to_suppress": [
255
+ {
256
+ "id": "W35",
257
+ "reason": "This S3 bucket is used as the access logging bucket for CloudFront Distribution"
258
+ }
259
+ ]
260
+ }
261
+ }
262
+ },
263
+ "testcloudfronts3CloudfrontLoggingBucketPolicyDF55851B": {
264
+ "Type": "AWS::S3::BucketPolicy",
265
+ "Properties": {
266
+ "Bucket": {
267
+ "Ref": "testcloudfronts3CloudfrontLoggingBucket985C0FE8"
268
+ },
269
+ "PolicyDocument": {
270
+ "Statement": [
271
+ {
272
+ "Action": "*",
273
+ "Condition": {
274
+ "Bool": {
275
+ "aws:SecureTransport": "false"
276
+ }
277
+ },
278
+ "Effect": "Deny",
279
+ "Principal": {
280
+ "AWS": "*"
281
+ },
282
+ "Resource": [
283
+ {
284
+ "Fn::Join": [
285
+ "",
286
+ [
287
+ {
288
+ "Fn::GetAtt": [
289
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
290
+ "Arn"
291
+ ]
292
+ },
293
+ "/*"
294
+ ]
295
+ ]
296
+ },
297
+ {
298
+ "Fn::GetAtt": [
299
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
300
+ "Arn"
301
+ ]
302
+ }
303
+ ],
304
+ "Sid": "HttpsOnly"
305
+ }
306
+ ],
307
+ "Version": "2012-10-17"
308
+ }
309
+ }
310
+ },
311
+ "testcloudfronts3CloudFrontDistributionOrigin1S3Origin4695F058": {
312
+ "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity",
313
+ "Properties": {
314
+ "CloudFrontOriginAccessIdentityConfig": {
315
+ "Comment": "Identity for customCloudFrontLoggingBuckettestcloudfronts3CloudFrontDistributionOrigin115B4D0FD"
316
+ }
317
+ }
318
+ },
319
+ "testcloudfronts3CloudFrontDistribution0565DEE8": {
320
+ "Type": "AWS::CloudFront::Distribution",
321
+ "Properties": {
322
+ "DistributionConfig": {
323
+ "DefaultCacheBehavior": {
324
+ "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6",
325
+ "Compress": true,
326
+ "FunctionAssociations": [
327
+ {
328
+ "EventType": "viewer-response",
329
+ "FunctionARN": {
330
+ "Fn::GetAtt": [
331
+ "testcloudfronts3SetHttpSecurityHeaders6C5A1E69",
332
+ "FunctionARN"
333
+ ]
334
+ }
335
+ }
336
+ ],
337
+ "TargetOriginId": "customCloudFrontLoggingBuckettestcloudfronts3CloudFrontDistributionOrigin115B4D0FD",
338
+ "ViewerProtocolPolicy": "redirect-to-https"
339
+ },
340
+ "DefaultRootObject": "index.html",
341
+ "Enabled": true,
342
+ "HttpVersion": "http2",
343
+ "IPV6Enabled": true,
344
+ "Logging": {
345
+ "Bucket": {
346
+ "Fn::GetAtt": [
347
+ "testcloudfronts3CloudfrontLoggingBucket985C0FE8",
348
+ "RegionalDomainName"
349
+ ]
350
+ }
351
+ },
352
+ "Origins": [
353
+ {
354
+ "DomainName": {
355
+ "Fn::GetAtt": [
356
+ "testcloudfronts3S3BucketE0C5F76E",
357
+ "RegionalDomainName"
358
+ ]
359
+ },
360
+ "Id": "customCloudFrontLoggingBuckettestcloudfronts3CloudFrontDistributionOrigin115B4D0FD",
361
+ "S3OriginConfig": {
362
+ "OriginAccessIdentity": {
363
+ "Fn::Join": [
364
+ "",
365
+ [
366
+ "origin-access-identity/cloudfront/",
367
+ {
368
+ "Ref": "testcloudfronts3CloudFrontDistributionOrigin1S3Origin4695F058"
369
+ }
370
+ ]
371
+ ]
372
+ }
373
+ }
374
+ }
375
+ ]
376
+ }
377
+ },
378
+ "Metadata": {
379
+ "cfn_nag": {
380
+ "rules_to_suppress": [
381
+ {
382
+ "id": "W70",
383
+ "reason": "Since the distribution uses the CloudFront domain name, CloudFront automatically sets the security policy to TLSv1 regardless of the value of MinimumProtocolVersion"
384
+ }
385
+ ]
386
+ }
387
+ }
388
+ }
389
+ },
390
+ "Parameters": {
391
+ "BootstrapVersion": {
392
+ "Type": "AWS::SSM::Parameter::Value<String>",
393
+ "Default": "/cdk-bootstrap/hnb659fds/version",
394
+ "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store."
395
+ }
396
+ },
397
+ "Rules": {
398
+ "CheckBootstrapVersion": {
399
+ "Assertions": [
400
+ {
401
+ "Assert": {
402
+ "Fn::Not": [
403
+ {
404
+ "Fn::Contains": [
405
+ [
406
+ "1",
407
+ "2",
408
+ "3",
409
+ "4",
410
+ "5"
411
+ ],
412
+ {
413
+ "Ref": "BootstrapVersion"
414
+ }
415
+ ]
416
+ }
417
+ ]
418
+ },
419
+ "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
420
+ }
421
+ ]
422
+ }
423
+ }
424
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ // Imports
16
+ const core_1 = require("@aws-cdk/core");
17
+ const aws_s3_1 = require("@aws-cdk/aws-s3");
18
+ const lib_1 = require("../lib");
19
+ const core_2 = require("@aws-solutions-constructs/core");
20
+ // Setup
21
+ const app = new core_1.App();
22
+ const stack = new core_1.Stack(app, core_2.generateIntegStackName(__filename));
23
+ stack.templateOptions.description = 'Integration Test for aws-cloudfront-s3 custom CloudFront Logging Bubkcet';
24
+ new lib_1.CloudFrontToS3(stack, 'test-cloudfront-s3', {
25
+ bucketProps: {
26
+ removalPolicy: core_1.RemovalPolicy.DESTROY,
27
+ },
28
+ cloudFrontLoggingBucketProps: {
29
+ removalPolicy: core_1.RemovalPolicy.DESTROY,
30
+ encryption: aws_s3_1.BucketEncryption.S3_MANAGED,
31
+ versioned: true
32
+ }
33
+ });
34
+ // Synth
35
+ app.synth();
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuY3VzdG9tQ2xvdWRGcm9udExvZ2dpbmdCdWNrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy5jdXN0b21DbG91ZEZyb250TG9nZ2luZ0J1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsVUFBVTtBQUNWLHdDQUEwRDtBQUMxRCw0Q0FBbUQ7QUFDbkQsZ0NBQXdDO0FBQ3hDLHlEQUF3RTtBQUV4RSxRQUFRO0FBQ1IsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLFlBQUssQ0FBQyxHQUFHLEVBQUUsNkJBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNqRSxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRywwRUFBMEUsQ0FBQztBQUUvRyxJQUFJLG9CQUFjLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO0lBQzlDLFdBQVcsRUFBRTtRQUNYLGFBQWEsRUFBRSxvQkFBYSxDQUFDLE9BQU87S0FDckM7SUFDRCw0QkFBNEIsRUFBRTtRQUM1QixhQUFhLEVBQUUsb0JBQWEsQ0FBQyxPQUFPO1FBQ3BDLFVBQVUsRUFBRSx5QkFBZ0IsQ0FBQyxVQUFVO1FBQ3ZDLFNBQVMsRUFBRSxJQUFJO0tBQ2hCO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsUUFBUTtBQUNSLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCAyMDIxIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJAYXdzLWNkay9jb3JlXCI7XG5pbXBvcnQgeyBCdWNrZXRFbmNyeXB0aW9uIH0gZnJvbSBcIkBhd3MtY2RrL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRvUzMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcblxuLy8gU2V0dXBcbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbmNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZShfX2ZpbGVuYW1lKSk7XG5zdGFjay50ZW1wbGF0ZU9wdGlvbnMuZGVzY3JpcHRpb24gPSAnSW50ZWdyYXRpb24gVGVzdCBmb3IgYXdzLWNsb3VkZnJvbnQtczMgY3VzdG9tIENsb3VkRnJvbnQgTG9nZ2luZyBCdWJrY2V0JztcblxubmV3IENsb3VkRnJvbnRUb1MzKHN0YWNrLCAndGVzdC1jbG91ZGZyb250LXMzJywge1xuICBidWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgfSxcbiAgY2xvdWRGcm9udExvZ2dpbmdCdWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgdmVyc2lvbmVkOiB0cnVlXG4gIH1cbn0pO1xuXG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=
@@ -26,7 +26,7 @@ const stack = new core_1.Stack(app, core_3.generateIntegStackName(__filename));
26
26
  let mybucket;
27
27
  mybucket = defaults.CreateScrapBucket(stack, { removalPolicy: core_1.RemovalPolicy.DESTROY });
28
28
  const _construct = new lib_1.CloudFrontToS3(stack, 'test-cloudfront-s3', {
29
- existingBucketInterface: mybucket,
29
+ existingBucketObj: mybucket,
30
30
  });
31
31
  // Add Cache Policy
32
32
  const myCachePolicy = new cloudfront.CachePolicy(stack, 'myCachePolicy', {
@@ -41,4 +41,4 @@ _construct.cloudFrontWebDistribution.addBehavior('/images/*.jpg', new origins.S3
41
41
  });
42
42
  // Synth
43
43
  app.synth();
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZXhpc3RpbmctYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcuZXhpc3RpbmctYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQTBEO0FBRTFELDJEQUEyRDtBQUMzRCxnQ0FBd0M7QUFDeEMsMkRBQTJEO0FBQzNELHNEQUFzRDtBQUN0RCx3Q0FBeUM7QUFDekMseURBQXdFO0FBRXhFLFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxDQUFDLEdBQUcsRUFBRSw2QkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRWpFLElBQUksUUFBbUIsQ0FBQztBQUN4QixRQUFRLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxvQkFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFFdkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBYyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtJQUNqRSx1QkFBdUIsRUFBRSxRQUFRO0NBQ2xDLENBQUMsQ0FBQztBQUVILG1CQUFtQjtBQUNuQixNQUFNLGFBQWEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRTtJQUN2RSxlQUFlLEVBQUUsVUFBVTtJQUMzQixVQUFVLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxFQUFFLGVBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztDQUM1QixDQUFDLENBQUM7QUFFSCxlQUFlO0FBQ2YsVUFBVSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQ2hHLFdBQVcsRUFBRSxhQUFhO0NBQzNCLENBQUMsQ0FBQztBQUVILFFBQVE7QUFDUixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMSBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IEFwcCwgU3RhY2ssIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiQGF3cy1jZGsvY29yZVwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcIkBhd3MtY2RrL2F3cy1zM1wiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIkBhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZVwiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRvUzMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgKiBhcyBvcmlnaW5zIGZyb20gJ0Bhd3MtY2RrL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdAYXdzLWNkay9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJAYXdzLWNkay9jb3JlXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcblxuLy8gU2V0dXBcbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbmNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZShfX2ZpbGVuYW1lKSk7XG5cbmxldCBteWJ1Y2tldDogczMuQnVja2V0O1xubXlidWNrZXQgPSBkZWZhdWx0cy5DcmVhdGVTY3JhcEJ1Y2tldChzdGFjaywgeyByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1kgfSk7XG5cbmNvbnN0IF9jb25zdHJ1Y3QgPSBuZXcgQ2xvdWRGcm9udFRvUzMoc3RhY2ssICd0ZXN0LWNsb3VkZnJvbnQtczMnLCB7XG4gIGV4aXN0aW5nQnVja2V0SW50ZXJmYWNlOiBteWJ1Y2tldCxcbn0pO1xuXG4vLyBBZGQgQ2FjaGUgUG9saWN5XG5jb25zdCBteUNhY2hlUG9saWN5ID0gbmV3IGNsb3VkZnJvbnQuQ2FjaGVQb2xpY3koc3RhY2ssICdteUNhY2hlUG9saWN5Jywge1xuICBjYWNoZVBvbGljeU5hbWU6ICdNeVBvbGljeScsXG4gIGRlZmF1bHRUdGw6IER1cmF0aW9uLm1pbnV0ZXMoMCksXG4gIG1pblR0bDogRHVyYXRpb24ubWludXRlcygwKSxcbiAgbWF4VHRsOiBEdXJhdGlvbi5taW51dGVzKDApLFxufSk7XG5cbi8vIEFkZCBiZWhhdmlvclxuX2NvbnN0cnVjdC5jbG91ZEZyb250V2ViRGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvaW1hZ2VzLyouanBnJywgbmV3IG9yaWdpbnMuUzNPcmlnaW4obXlidWNrZXQpLCB7XG4gIGNhY2hlUG9saWN5OiBteUNhY2hlUG9saWN5XG59KTtcblxuLy8gU3ludGhcbmFwcC5zeW50aCgpO1xuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZXhpc3RpbmctYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcuZXhpc3RpbmctYnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQTBEO0FBRTFELDJEQUEyRDtBQUMzRCxnQ0FBd0M7QUFDeEMsMkRBQTJEO0FBQzNELHNEQUFzRDtBQUN0RCx3Q0FBeUM7QUFDekMseURBQXdFO0FBRXhFLFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxDQUFDLEdBQUcsRUFBRSw2QkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRWpFLElBQUksUUFBbUIsQ0FBQztBQUN4QixRQUFRLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxvQkFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFFdkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBYyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtJQUNqRSxpQkFBaUIsRUFBRSxRQUFRO0NBQzVCLENBQUMsQ0FBQztBQUVILG1CQUFtQjtBQUNuQixNQUFNLGFBQWEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRTtJQUN2RSxlQUFlLEVBQUUsVUFBVTtJQUMzQixVQUFVLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxFQUFFLGVBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztDQUM1QixDQUFDLENBQUM7QUFFSCxlQUFlO0FBQ2YsVUFBVSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQ2hHLFdBQVcsRUFBRSxhQUFhO0NBQzNCLENBQUMsQ0FBQztBQUVILFFBQVE7QUFDUixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMSBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IEFwcCwgU3RhY2ssIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiQGF3cy1jZGsvY29yZVwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcIkBhd3MtY2RrL2F3cy1zM1wiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIkBhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZVwiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRvUzMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgKiBhcyBvcmlnaW5zIGZyb20gJ0Bhd3MtY2RrL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdAYXdzLWNkay9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJAYXdzLWNkay9jb3JlXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcblxuLy8gU2V0dXBcbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbmNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZShfX2ZpbGVuYW1lKSk7XG5cbmxldCBteWJ1Y2tldDogczMuQnVja2V0O1xubXlidWNrZXQgPSBkZWZhdWx0cy5DcmVhdGVTY3JhcEJ1Y2tldChzdGFjaywgeyByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1kgfSk7XG5cbmNvbnN0IF9jb25zdHJ1Y3QgPSBuZXcgQ2xvdWRGcm9udFRvUzMoc3RhY2ssICd0ZXN0LWNsb3VkZnJvbnQtczMnLCB7XG4gIGV4aXN0aW5nQnVja2V0T2JqOiBteWJ1Y2tldCxcbn0pO1xuXG4vLyBBZGQgQ2FjaGUgUG9saWN5XG5jb25zdCBteUNhY2hlUG9saWN5ID0gbmV3IGNsb3VkZnJvbnQuQ2FjaGVQb2xpY3koc3RhY2ssICdteUNhY2hlUG9saWN5Jywge1xuICBjYWNoZVBvbGljeU5hbWU6ICdNeVBvbGljeScsXG4gIGRlZmF1bHRUdGw6IER1cmF0aW9uLm1pbnV0ZXMoMCksXG4gIG1pblR0bDogRHVyYXRpb24ubWludXRlcygwKSxcbiAgbWF4VHRsOiBEdXJhdGlvbi5taW51dGVzKDApLFxufSk7XG5cbi8vIEFkZCBiZWhhdmlvclxuX2NvbnN0cnVjdC5jbG91ZEZyb250V2ViRGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvaW1hZ2VzLyouanBnJywgbmV3IG9yaWdpbnMuUzNPcmlnaW4obXlidWNrZXQpLCB7XG4gIGNhY2hlUG9saWN5OiBteUNhY2hlUG9saWN5XG59KTtcblxuLy8gU3ludGhcbmFwcC5zeW50aCgpO1xuIl19
@@ -1,90 +1,6 @@
1
1
  {
2
2
  "Description": "Integration Test for aws-cloudfront-s3",
3
3
  "Resources": {
4
- "testcloudfronts3S3LoggingBucket90D239DD": {
5
- "Type": "AWS::S3::Bucket",
6
- "Properties": {
7
- "AccessControl": "LogDeliveryWrite",
8
- "BucketEncryption": {
9
- "ServerSideEncryptionConfiguration": [
10
- {
11
- "ServerSideEncryptionByDefault": {
12
- "SSEAlgorithm": "AES256"
13
- }
14
- }
15
- ]
16
- },
17
- "PublicAccessBlockConfiguration": {
18
- "BlockPublicAcls": true,
19
- "BlockPublicPolicy": true,
20
- "IgnorePublicAcls": true,
21
- "RestrictPublicBuckets": true
22
- },
23
- "VersioningConfiguration": {
24
- "Status": "Enabled"
25
- }
26
- },
27
- "UpdateReplacePolicy": "Delete",
28
- "DeletionPolicy": "Delete",
29
- "Metadata": {
30
- "cfn_nag": {
31
- "rules_to_suppress": [
32
- {
33
- "id": "W35",
34
- "reason": "This S3 bucket is used as the access logging bucket for another bucket"
35
- }
36
- ]
37
- }
38
- }
39
- },
40
- "testcloudfronts3S3LoggingBucketPolicy529D4CFF": {
41
- "Type": "AWS::S3::BucketPolicy",
42
- "Properties": {
43
- "Bucket": {
44
- "Ref": "testcloudfronts3S3LoggingBucket90D239DD"
45
- },
46
- "PolicyDocument": {
47
- "Statement": [
48
- {
49
- "Action": "*",
50
- "Condition": {
51
- "Bool": {
52
- "aws:SecureTransport": "false"
53
- }
54
- },
55
- "Effect": "Deny",
56
- "Principal": {
57
- "AWS": "*"
58
- },
59
- "Resource": [
60
- {
61
- "Fn::Join": [
62
- "",
63
- [
64
- {
65
- "Fn::GetAtt": [
66
- "testcloudfronts3S3LoggingBucket90D239DD",
67
- "Arn"
68
- ]
69
- },
70
- "/*"
71
- ]
72
- ]
73
- },
74
- {
75
- "Fn::GetAtt": [
76
- "testcloudfronts3S3LoggingBucket90D239DD",
77
- "Arn"
78
- ]
79
- }
80
- ],
81
- "Sid": "HttpsOnly"
82
- }
83
- ],
84
- "Version": "2012-10-17"
85
- }
86
- }
87
- },
88
4
  "testcloudfronts3S3BucketE0C5F76E": {
89
5
  "Type": "AWS::S3::Bucket",
90
6
  "Properties": {
@@ -110,11 +26,6 @@
110
26
  }
111
27
  ]
112
28
  },
113
- "LoggingConfiguration": {
114
- "DestinationBucketName": {
115
- "Ref": "testcloudfronts3S3LoggingBucket90D239DD"
116
- }
117
- },
118
29
  "PublicAccessBlockConfiguration": {
119
30
  "BlockPublicAcls": true,
120
31
  "BlockPublicPolicy": true,
@@ -126,7 +37,17 @@
126
37
  }
127
38
  },
128
39
  "UpdateReplacePolicy": "Delete",
129
- "DeletionPolicy": "Delete"
40
+ "DeletionPolicy": "Delete",
41
+ "Metadata": {
42
+ "cfn_nag": {
43
+ "rules_to_suppress": [
44
+ {
45
+ "id": "W35",
46
+ "reason": "This S3 bucket is created for unit/ integration testing purposes only."
47
+ }
48
+ ]
49
+ }
50
+ }
130
51
  },
131
52
  "testcloudfronts3S3BucketPolicy250F1F61": {
132
53
  "Type": "AWS::S3::BucketPolicy",
@@ -16,15 +16,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  const core_1 = require("@aws-cdk/core");
17
17
  const lib_1 = require("../lib");
18
18
  const core_2 = require("@aws-solutions-constructs/core");
19
+ const defaults = require("@aws-solutions-constructs/core");
19
20
  // Setup
20
21
  const app = new core_1.App();
21
22
  const stack = new core_1.Stack(app, core_2.generateIntegStackName(__filename));
22
23
  stack.templateOptions.description = 'Integration Test for aws-cloudfront-s3';
23
- new lib_1.CloudFrontToS3(stack, 'test-cloudfront-s3', {
24
+ const construct = new lib_1.CloudFrontToS3(stack, 'test-cloudfront-s3', {
24
25
  bucketProps: {
25
26
  removalPolicy: core_1.RemovalPolicy.DESTROY,
26
- }
27
+ },
28
+ logS3AccessLogs: false
27
29
  });
30
+ const s3Bucket = construct.s3Bucket;
31
+ defaults.addCfnSuppressRules(s3Bucket, [
32
+ { id: 'W35',
33
+ reason: 'This S3 bucket is created for unit/ integration testing purposes only.' },
34
+ ]);
28
35
  // Synth
29
36
  app.synth();
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcubm8tYXJndW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcubm8tYXJndW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQTBEO0FBQzFELGdDQUF3QztBQUN4Qyx5REFBd0U7QUFFeEUsUUFBUTtBQUNSLE1BQU0sR0FBRyxHQUFHLElBQUksVUFBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFLLENBQUMsR0FBRyxFQUFFLDZCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsd0NBQXdDLENBQUM7QUFFN0UsSUFBSSxvQkFBYyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtJQUM5QyxXQUFXLEVBQUU7UUFDWCxhQUFhLEVBQUUsb0JBQWEsQ0FBQyxPQUFPO0tBQ3JDO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsUUFBUTtBQUNSLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCAyMDIxIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJAYXdzLWNkay9jb3JlXCI7XG5pbXBvcnQgeyBDbG91ZEZyb250VG9TMyB9IGZyb20gXCIuLi9saWJcIjtcbmltcG9ydCB7IGdlbmVyYXRlSW50ZWdTdGFja05hbWUgfSBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG4vLyBTZXR1cFxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpKTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdJbnRlZ3JhdGlvbiBUZXN0IGZvciBhd3MtY2xvdWRmcm9udC1zMyc7XG5cbm5ldyBDbG91ZEZyb250VG9TMyhzdGFjaywgJ3Rlc3QtY2xvdWRmcm9udC1zMycsIHtcbiAgYnVja2V0UHJvcHM6IHtcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gIH1cbn0pO1xuXG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcubm8tYXJndW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcubm8tYXJndW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQTBEO0FBQzFELGdDQUF3QztBQUN4Qyx5REFBd0U7QUFFeEUsMkRBQTJEO0FBRTNELFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxDQUFDLEdBQUcsRUFBRSw2QkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLHdDQUF3QyxDQUFDO0FBRTdFLE1BQU0sU0FBUyxHQUFHLElBQUksb0JBQWMsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7SUFDaEUsV0FBVyxFQUFFO1FBQ1gsYUFBYSxFQUFFLG9CQUFhLENBQUMsT0FBTztLQUNyQztJQUNELGVBQWUsRUFBRSxLQUFLO0NBQ3ZCLENBQUMsQ0FBQztBQUVILE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFxQixDQUFDO0FBRWpELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7SUFDckMsRUFBRSxFQUFFLEVBQUUsS0FBSztRQUNULE1BQU0sRUFBRSx3RUFBd0UsRUFBRTtDQUNyRixDQUFDLENBQUM7QUFFSCxRQUFRO0FBQ1IsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IDIwMjEgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcIkBhd3MtY2RrL2NvcmVcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUb1MzIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSB9IGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiQGF3cy1jZGsvYXdzLXMzXCI7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuXG4vLyBTZXR1cFxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpKTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdJbnRlZ3JhdGlvbiBUZXN0IGZvciBhd3MtY2xvdWRmcm9udC1zMyc7XG5cbmNvbnN0IGNvbnN0cnVjdCA9IG5ldyBDbG91ZEZyb250VG9TMyhzdGFjaywgJ3Rlc3QtY2xvdWRmcm9udC1zMycsIHtcbiAgYnVja2V0UHJvcHM6IHtcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gIH0sXG4gIGxvZ1MzQWNjZXNzTG9nczogZmFsc2Vcbn0pO1xuXG5jb25zdCBzM0J1Y2tldCA9IGNvbnN0cnVjdC5zM0J1Y2tldCBhcyBzMy5CdWNrZXQ7XG5cbmRlZmF1bHRzLmFkZENmblN1cHByZXNzUnVsZXMoczNCdWNrZXQsIFtcbiAgeyBpZDogJ1czNScsXG4gICAgcmVhc29uOiAnVGhpcyBTMyBidWNrZXQgaXMgY3JlYXRlZCBmb3IgdW5pdC8gaW50ZWdyYXRpb24gdGVzdGluZyBwdXJwb3NlcyBvbmx5LicgfSxcbl0pO1xuXG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=