image-scanner-with-trivy 1.0.0 → 1.0.2
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/.jsii +4 -4
- package/.projenrc.ts +8 -0
- package/API.md +5 -1
- package/README.md +5 -1
- package/assets/lambda/dist/index.js +7 -7
- package/assets/lambda/index.ts +39 -29
- package/lib/index.js +1 -1
- package/lib/integ.js +7 -3
- package/package.json +2 -1
package/.jsii
CHANGED
|
@@ -3489,7 +3489,7 @@
|
|
|
3489
3489
|
}
|
|
3490
3490
|
}
|
|
3491
3491
|
},
|
|
3492
|
-
"description": "
|
|
3492
|
+
"description": "Scan container images with Trivy in CDK deployment",
|
|
3493
3493
|
"docs": {
|
|
3494
3494
|
"stability": "stable"
|
|
3495
3495
|
},
|
|
@@ -3518,7 +3518,7 @@
|
|
|
3518
3518
|
},
|
|
3519
3519
|
"name": "image-scanner-with-trivy",
|
|
3520
3520
|
"readme": {
|
|
3521
|
-
"markdown": "# image-scanner-with-trivy\n\n## What is\n\nThis is an AWS CDK Construct that allows you to **scan
|
|
3521
|
+
"markdown": "# image-scanner-with-trivy\n\n## What is\n\nThis is an AWS CDK Construct that allows you to **scan container images with Trivy in CDK deployment layer**.\n\nIf it detects vulnerabilities, it can **prevent the image from being pushed to the ECR for the application**.\n\nSince it takes an `imageUri` for ECR as an argument, it can also be used to **simply scan an existing image in the repository**.\n\n## Trivy\n\n[Trivy](https://github.com/aquasecurity/trivy) is a comprehensive and versatile security scanner.\n\n## Usage\n\n- Install\n\n```sh\nnpm install image-scanner-with-trivy\n```\n\n- CDK Code\n\n```ts\nimport { ImageScannerWithTrivy } from 'image-scanner-with-trivy';\n\nconst repository = new Repository(this, 'ImageRepository', {\n removalPolicy: RemovalPolicy.DESTROY,\n autoDeleteImages: true,\n});\n\nconst image = new DockerImageAsset(this, 'DockerImage', {\n directory: resolve(__dirname, './'),\n});\n\n// Please grant the necessary options on a case-by-case basis.\nconst imageScanner = new ImageScannerWithTrivy(this, 'ImageScannerWithTrivy', {\n imageUri: image.imageUri,\n repository: image.repository,\n});\n\n// By adding `addDependency`, if the vulnerabilities are detected by `ImageScannerWithTrivy`, the following `ECRDeployment` will not be executed, deployment will fail.\nconst ecrDeployment = new ECRDeployment(this, 'DeployImage', {\n src: new DockerImageName(image.imageUri),\n dest: new DockerImageName(`${repository.repositoryUri}:latest`),\n});\necrDeployment.node.addDependency(imageScanner);\n```\n\n## API Reference\n\nAPI Reference is [here](./API.md#api-reference-).\n"
|
|
3522
3522
|
},
|
|
3523
3523
|
"repository": {
|
|
3524
3524
|
"type": "git",
|
|
@@ -3945,6 +3945,6 @@
|
|
|
3945
3945
|
"symbolId": "src/index:Severity"
|
|
3946
3946
|
}
|
|
3947
3947
|
},
|
|
3948
|
-
"version": "1.0.
|
|
3949
|
-
"fingerprint": "
|
|
3948
|
+
"version": "1.0.2",
|
|
3949
|
+
"fingerprint": "mbTIFBgcYh4wOS2dkAXmKqFjjCRN3dbMDghOQgjw1Rw="
|
|
3950
3950
|
}
|
package/.projenrc.ts
CHANGED
|
@@ -11,6 +11,7 @@ const project = new awscdk.AwsCdkConstructLibrary({
|
|
|
11
11
|
name: 'image-scanner-with-trivy',
|
|
12
12
|
projenrcTs: true,
|
|
13
13
|
repositoryUrl: 'https://github.com/go-to-k/image-scanner-with-trivy',
|
|
14
|
+
description: 'Scan container images with Trivy in CDK deployment',
|
|
14
15
|
prettier: true,
|
|
15
16
|
prettierOptions: {
|
|
16
17
|
settings: {
|
|
@@ -61,6 +62,13 @@ const project = new awscdk.AwsCdkConstructLibrary({
|
|
|
61
62
|
bin: {
|
|
62
63
|
0: './assets',
|
|
63
64
|
},
|
|
65
|
+
githubOptions: {
|
|
66
|
+
pullRequestLintOptions: {
|
|
67
|
+
semanticTitleOptions: {
|
|
68
|
+
types: ['feat', 'fix', 'chore', 'docs', 'test', 'refactor', 'ci'],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
64
72
|
// deps: [], /* Runtime dependencies of this module. */
|
|
65
73
|
// description: undefined, /* The description is just a string that helps people understand the purpose of the package. */
|
|
66
74
|
// devDeps: [], /* Build dependencies for this module. */
|
package/API.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## What is
|
|
4
4
|
|
|
5
|
-
This is an AWS CDK Construct that allows you to **scan
|
|
5
|
+
This is an AWS CDK Construct that allows you to **scan container images with Trivy in CDK deployment layer**.
|
|
6
6
|
|
|
7
7
|
If it detects vulnerabilities, it can **prevent the image from being pushed to the ECR for the application**.
|
|
8
8
|
|
|
@@ -48,6 +48,10 @@ const ecrDeployment = new ECRDeployment(this, 'DeployImage', {
|
|
|
48
48
|
ecrDeployment.node.addDependency(imageScanner);
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
+
## API Reference
|
|
52
|
+
|
|
53
|
+
API Reference is [here](./API.md#api-reference-).
|
|
54
|
+
|
|
51
55
|
# API Reference <a name="API Reference" id="api-reference"></a>
|
|
52
56
|
|
|
53
57
|
## Constructs <a name="Constructs" id="Constructs"></a>
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## What is
|
|
4
4
|
|
|
5
|
-
This is an AWS CDK Construct that allows you to **scan
|
|
5
|
+
This is an AWS CDK Construct that allows you to **scan container images with Trivy in CDK deployment layer**.
|
|
6
6
|
|
|
7
7
|
If it detects vulnerabilities, it can **prevent the image from being pushed to the ECR for the application**.
|
|
8
8
|
|
|
@@ -47,3 +47,7 @@ const ecrDeployment = new ECRDeployment(this, 'DeployImage', {
|
|
|
47
47
|
});
|
|
48
48
|
ecrDeployment.node.addDependency(imageScanner);
|
|
49
49
|
```
|
|
50
|
+
|
|
51
|
+
## API Reference
|
|
52
|
+
|
|
53
|
+
API Reference is [here](./API.md#api-reference-).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`+
|
|
3
|
-
`+
|
|
4
|
-
Signal: ${
|
|
5
|
-
Status: ${
|
|
6
|
-
Image Scanner returned fatal errors. You may have vulnerabilities. See logs.`)}return
|
|
7
|
-
`)}),
|
|
1
|
+
"use strict";var u=Object.create;var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var v=(e,n)=>{for(var r in n)s(e,r,{get:n[r],enumerable:!0})},g=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of f(n))!h.call(e,i)&&i!==r&&s(e,i,{get:()=>n[i],enumerable:!(t=d(n,i))||t.enumerable});return e};var C=(e,n,r)=>(r=e!=null?u(y(e)):{},g(n||!e||!e.__esModule?s(r,"default",{value:e,enumerable:!0}):r,e)),S=e=>g(s({},"__esModule",{value:!0}),e);var I={};v(I,{handler:()=>p});module.exports=S(I);var c=require("child_process"),l=require("fs"),m=C(require("path"),1),p=async function(e){let n=e.RequestType,r=e.ResourceProperties;if(!r.addr||!r.imageUri)throw new Error("addr and imageUri are required.");let t={PhysicalResourceId:r.addr,Data:{}};if(n==="Create"||n==="Update"){let i=x(r);r.trivyIgnore.length&&(console.log("trivyignore: "+JSON.stringify(r.trivyIgnore)),$(r.trivyIgnore));let a=`/opt/trivy image --no-progress ${i.join(" ")} ${r.imageUri}`;console.log("command: "+a),console.log("imageUri: "+r.imageUri);let o=(0,c.spawnSync)(a,{shell:!0});if(console.log(`stderr:
|
|
2
|
+
`+o.stderr?.toString()),console.log(`stdout:
|
|
3
|
+
`+o.stdout?.toString()),o.status!==0)throw new Error(`Error: ${o.error}
|
|
4
|
+
Signal: ${o.signal}
|
|
5
|
+
Status: ${o.status}
|
|
6
|
+
Image Scanner returned fatal errors. You may have vulnerabilities. See logs.`)}return t},x=e=>{let n=[];return e.ignoreUnfixed==="true"&&n.push("--ignore-unfixed"),e.severity.length&&n.push(`--severity ${e.severity.join(",")}`),e.scanners.length&&n.push(`--scanners ${e.scanners.join(",")}`),e.imageConfigScanners.length&&n.push(`--image-config-scanners ${e.imageConfigScanners.join(",")}`),e.exitCode&&n.push(`--exit-code ${e.exitCode}`),e.exitOnEol&&n.push(`--exit-on-eol ${e.exitOnEol}`),e.trivyIgnore.length&&n.push("--ignorefile /tmp/.trivyignore"),e.platform&&n.push(`--platform ${e.platform}`),n},$=e=>{let n=m.default.join("/tmp",".trivyignore"),r=(0,l.createWriteStream)(n);e.forEach(t=>{r.write(t+`
|
|
7
|
+
`)}),r.end()};0&&(module.exports={handler});
|
package/assets/lambda/index.ts
CHANGED
|
@@ -3,47 +3,41 @@ import { createWriteStream } from 'fs';
|
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { CdkCustomResourceHandler, CdkCustomResourceResponse } from 'aws-lambda';
|
|
5
5
|
|
|
6
|
+
interface ScannerProps {
|
|
7
|
+
addr: string;
|
|
8
|
+
imageUri: string;
|
|
9
|
+
ignoreUnfixed: string;
|
|
10
|
+
severity: string[];
|
|
11
|
+
scanners: string[];
|
|
12
|
+
imageConfigScanners: string[];
|
|
13
|
+
exitCode: number;
|
|
14
|
+
exitOnEol: number;
|
|
15
|
+
trivyIgnore: string[];
|
|
16
|
+
platform: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
6
19
|
export const handler: CdkCustomResourceHandler = async function (event) {
|
|
7
20
|
const requestType = event.RequestType;
|
|
21
|
+
const props = event.ResourceProperties as unknown as ScannerProps;
|
|
8
22
|
|
|
9
|
-
|
|
10
|
-
const imageUri = event.ResourceProperties.imageUri as string;
|
|
11
|
-
const ignoreUnfixed = event.ResourceProperties.ignoreUnfixed as string;
|
|
12
|
-
const severity = event.ResourceProperties.severity as string[];
|
|
13
|
-
const scanners = event.ResourceProperties.scanners as string[];
|
|
14
|
-
const imageConfigScanners = event.ResourceProperties.imageConfigScanners as string[];
|
|
15
|
-
const exitCode = event.ResourceProperties.exitCode as number;
|
|
16
|
-
const exitOnEol = event.ResourceProperties.exitOnEol as number;
|
|
17
|
-
const trivyIgnore = event.ResourceProperties.trivyIgnore as string[];
|
|
18
|
-
const platform = event.ResourceProperties.platform as string;
|
|
19
|
-
|
|
20
|
-
if (!addr || !imageUri) throw new Error('addr and imageUri are required.');
|
|
23
|
+
if (!props.addr || !props.imageUri) throw new Error('addr and imageUri are required.');
|
|
21
24
|
|
|
22
25
|
const funcResponse: CdkCustomResourceResponse = {
|
|
23
|
-
PhysicalResourceId: addr,
|
|
26
|
+
PhysicalResourceId: props.addr,
|
|
24
27
|
Data: {} as { [key: string]: string },
|
|
25
28
|
};
|
|
26
29
|
|
|
27
30
|
if (requestType === 'Create' || requestType === 'Update') {
|
|
28
|
-
const options
|
|
29
|
-
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
options.push(`--image-config-scanners ${imageConfigScanners.join(',')}`);
|
|
34
|
-
if (exitCode) options.push(`--exit-code ${exitCode}`);
|
|
35
|
-
if (exitOnEol) options.push(`--exit-on-eol ${exitOnEol}`);
|
|
36
|
-
if (trivyIgnore.length) options.push('--ignorefile /tmp/.trivyignore');
|
|
37
|
-
if (platform) options.push(`--platform ${platform}`);
|
|
38
|
-
|
|
39
|
-
if (trivyIgnore.length) {
|
|
40
|
-
console.log('trivyignore: ' + JSON.stringify(trivyIgnore));
|
|
41
|
-
makeTrivyIgnoreFile(trivyIgnore);
|
|
31
|
+
const options = makeOptions(props);
|
|
32
|
+
|
|
33
|
+
if (props.trivyIgnore.length) {
|
|
34
|
+
console.log('trivyignore: ' + JSON.stringify(props.trivyIgnore));
|
|
35
|
+
makeTrivyIgnoreFile(props.trivyIgnore);
|
|
42
36
|
}
|
|
43
37
|
|
|
44
|
-
const cmd = `/opt/trivy image --no-progress ${options.join(' ')} ${imageUri}`;
|
|
38
|
+
const cmd = `/opt/trivy image --no-progress ${options.join(' ')} ${props.imageUri}`;
|
|
45
39
|
console.log('command: ' + cmd);
|
|
46
|
-
console.log('imageUri: ' + imageUri);
|
|
40
|
+
console.log('imageUri: ' + props.imageUri);
|
|
47
41
|
|
|
48
42
|
const response = spawnSync(cmd, {
|
|
49
43
|
shell: true,
|
|
@@ -61,6 +55,22 @@ export const handler: CdkCustomResourceHandler = async function (event) {
|
|
|
61
55
|
return funcResponse;
|
|
62
56
|
};
|
|
63
57
|
|
|
58
|
+
const makeOptions = (props: ScannerProps): string[] => {
|
|
59
|
+
const options: string[] = [];
|
|
60
|
+
|
|
61
|
+
if (props.ignoreUnfixed === 'true') options.push('--ignore-unfixed');
|
|
62
|
+
if (props.severity.length) options.push(`--severity ${props.severity.join(',')}`);
|
|
63
|
+
if (props.scanners.length) options.push(`--scanners ${props.scanners.join(',')}`);
|
|
64
|
+
if (props.imageConfigScanners.length)
|
|
65
|
+
options.push(`--image-config-scanners ${props.imageConfigScanners.join(',')}`);
|
|
66
|
+
if (props.exitCode) options.push(`--exit-code ${props.exitCode}`);
|
|
67
|
+
if (props.exitOnEol) options.push(`--exit-on-eol ${props.exitOnEol}`);
|
|
68
|
+
if (props.trivyIgnore.length) options.push('--ignorefile /tmp/.trivyignore');
|
|
69
|
+
if (props.platform) options.push(`--platform ${props.platform}`);
|
|
70
|
+
|
|
71
|
+
return options;
|
|
72
|
+
};
|
|
73
|
+
|
|
64
74
|
const makeTrivyIgnoreFile = (trivyIgnore: string[]) => {
|
|
65
75
|
const trivyIgnoreFilePath = path.join('/tmp', '.trivyignore');
|
|
66
76
|
const trivyIgnoreFile = createWriteStream(trivyIgnoreFilePath);
|
package/lib/index.js
CHANGED
|
@@ -87,6 +87,6 @@ class ImageScannerWithTrivy extends constructs_1.Construct {
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
_a = JSII_RTTI_SYMBOL_1;
|
|
90
|
-
ImageScannerWithTrivy[_a] = { fqn: "image-scanner-with-trivy.ImageScannerWithTrivy", version: "1.0.
|
|
90
|
+
ImageScannerWithTrivy[_a] = { fqn: "image-scanner-with-trivy.ImageScannerWithTrivy", version: "1.0.2" };
|
|
91
91
|
exports.ImageScannerWithTrivy = ImageScannerWithTrivy;
|
|
92
92
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBNEI7QUFDNUIsNkNBQXVEO0FBRXZELHVEQU1nQztBQUNoQyxtRUFBd0Q7QUFDeEQsMkNBQXVDO0FBRXZDOzs7O0dBSUc7QUFDSCxJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIsK0JBQW1CLENBQUE7SUFDbkIsdUJBQVcsQ0FBQTtJQUNYLDZCQUFpQixDQUFBO0lBQ2pCLHlCQUFhLENBQUE7SUFDYixpQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTlcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFNbkI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxRQUtYO0FBTEQsV0FBWSxRQUFRO0lBQ2xCLHlCQUFhLENBQUE7SUFDYiw2QkFBaUIsQ0FBQTtJQUNqQiw2QkFBaUIsQ0FBQTtJQUNqQiwrQkFBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFLbkI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxtQkFHWDtBQUhELFdBQVksbUJBQW1CO0lBQzdCLHdDQUFpQixDQUFBO0lBQ2pCLHdDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxtQkFBbUIsR0FBbkIsMkJBQW1CLEtBQW5CLDJCQUFtQixRQUc5QjtBQWtLRCxrRkFBa0Y7QUFDbEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFakMsTUFBYSxxQkFBc0IsU0FBUSxzQkFBUztJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUU7Z0JBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQzthQUNqRjtTQUNGO1FBRUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLDhCQUFpQixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUMvRSxJQUFJLEVBQUUsc0NBQXNDO1lBQzVDLGFBQWEsRUFBRSxtREFBbUQ7WUFDbEUsT0FBTyxFQUFFLG9CQUFPLENBQUMsVUFBVTtZQUMzQixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxVQUFVO1lBQzNCLElBQUksRUFBRSxzQkFBUyxDQUFDLGNBQWMsQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNuRSxZQUFZLEVBQUUseUJBQVksQ0FBQyxNQUFNO1lBQ2pDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDOUIsYUFBYSxFQUFFLENBQUM7WUFDaEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksbUJBQW1CO1NBQ3BELENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFakQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLDJCQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUMxRCxjQUFjLEVBQUUsb0JBQW9CO1NBQ3JDLENBQUMsQ0FBQztRQUVILE1BQU0sc0JBQXNCLEdBQTRELEVBQUUsQ0FBQztRQUMzRixzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0Msc0JBQXNCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDakQsc0JBQXNCLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO1FBQ3BFLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hFLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUN2RCxzQkFBc0IsQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO1FBQzdFLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUN0RCxzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDeEQsc0JBQXNCLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQzdELHNCQUFzQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUV2RCxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNsQyxZQUFZLEVBQUUsK0JBQStCO1lBQzdDLFVBQVUsRUFBRSxzQkFBc0I7WUFDbEMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLFlBQVk7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7OztBQTVDVSxzREFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJUmVwb3NpdG9yeSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3InO1xuaW1wb3J0IHtcbiAgQXJjaGl0ZWN0dXJlLFxuICBBc3NldENvZGUsXG4gIEhhbmRsZXIsXG4gIFJ1bnRpbWUsXG4gIFNpbmdsZXRvbkZ1bmN0aW9uLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBFbnVtIGZvciBTZXZlcml0eSBTZWxlY3Rpb25cbiAqXG4gKiBAc2VlIGh0dHBzOi8vYXF1YXNlY3VyaXR5LmdpdGh1Yi5pby90cml2eS9sYXRlc3QvZG9jcy9zY2FubmVyL3Z1bG5lcmFiaWxpdHkvI3NldmVyaXR5LXNlbGVjdGlvblxuICovXG5leHBvcnQgZW51bSBTZXZlcml0eSB7XG4gIFVOS05PV04gPSAnVU5LTk9XTicsXG4gIExPVyA9ICdMT1cnLFxuICBNRURJVU0gPSAnTUVESVVNJyxcbiAgSElHSCA9ICdISUdIJyxcbiAgQ1JJVElDQUwgPSAnQ1JJVElDQUwnLFxufVxuXG4vKipcbiAqIEVudW0gZm9yIFNjYW5uZXJzXG4gKlxuICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvY29uZmlndXJhdGlvbi9vdGhlcnMvI2VuYWJsZWRpc2FibGUtc2Nhbm5lcnNcbiAqL1xuZXhwb3J0IGVudW0gU2Nhbm5lcnMge1xuICBWVUxOID0gJ3Z1bG4nLFxuICBDT05GSUcgPSAnY29uZmlnJyxcbiAgU0VDUkVUID0gJ3NlY3JldCcsXG4gIExJQ0VOU0UgPSAnbGljZW5zZScsXG59XG5cbi8qKlxuICogRW51bSBmb3IgSW1hZ2VDb25maWdTY2FubmVyc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL3RhcmdldC9jb250YWluZXJfaW1hZ2UvI2NvbnRhaW5lci1pbWFnZS1tZXRhZGF0YVxuICovXG5leHBvcnQgZW51bSBJbWFnZUNvbmZpZ1NjYW5uZXJzIHtcbiAgQ09ORklHID0gJ2NvbmZpZycsXG4gIFNFQ1JFVCA9ICdzZWNyZXQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlU2Nhbm5lcldpdGhUcml2eVByb3BzIHtcbiAgLyoqXG4gICAqIEltYWdlIFVSSSBmb3Igc2NhbiB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSBpbWFnZVVyaTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IGluY2x1ZGluZyB0aGUgaW1hZ2UgVVJJIGZvciBzY2FuIHRhcmdldC5cbiAgICpcbiAgICogQmVjYXVzZSBvZiBncmFudFB1bGwgdG8gQ3VzdG9tUmVzb3VyY2VMYW1iZGEuXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5OiBJUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogVGhlIHVuZml4ZWQvdW5maXhhYmxlIHZ1bG5lcmFiaWxpdGllcyBtZWFuIHRoYXQgdGhlIHBhdGNoIGhhcyBub3QgeWV0IGJlZW4gcHJvdmlkZWQgb24gdGhlaXIgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBUbyBoaWRlIHVuZml4ZWQvdW5maXhhYmxlIHZ1bG5lcmFiaWxpdGllcywgeW91IGNhbiB1c2UgdGhlIGAtLWlnbm9yZS11bmZpeGVkYCBmbGFnLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXF1YXNlY3VyaXR5LmdpdGh1Yi5pby90cml2eS9sYXRlc3QvZG9jcy9zY2FubmVyL3Z1bG5lcmFiaWxpdHkvI3VuZml4ZWQtdnVsbmVyYWJpbGl0aWVzXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVVbmZpeGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V2ZXJpdHkgU2VsZWN0aW9uXG4gICAqXG4gICAqIFRoZSBzZXZlcml0eSBpcyB0YWtlbiBmcm9tIHRoZSBzZWxlY3RlZCBkYXRhIHNvdXJjZSBzaW5jZSB0aGUgc2V2ZXJpdHkgZnJvbSB2ZW5kb3JzIGlzIG1vcmUgYWNjdXJhdGUuXG4gICAqIFVzaW5nIENWRS0yMDIzLTA0NjQgYXMgYW4gZXhhbXBsZSwgd2hpbGUgaXQgaXMgcmF0ZWQgYXMgXCJISUdIXCIgaW4gTlZELCBSZWQgSGF0IGhhcyBtYXJrZWQgaXRzICdJbXBhY3QnIGFzIFwiTG93XCIuIEFzIGEgcmVzdWx0LCBUcml2eSB3aWxsIGRpc3BsYXkgaXQgYXMgXCJMb3dcIi5cbiAgICpcbiAgICogVGhlIHNldmVyaXR5IGRlcGVuZHMgb24gdGhlIGNvbXBpbGUgb3B0aW9uLCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBldGMuIE5WRCBkb2Vzbid0IGtub3cgaG93IHRoZSB2ZW5kb3IgZGlzdHJpYnV0ZXMgdGhlIHNvZnR3YXJlLlxuICAgKiBSZWQgSGF0IGV2YWx1YXRlcyB0aGUgc2V2ZXJpdHkgbW9yZSBhY2N1cmF0ZWx5LiBUaGF0J3Mgd2h5IFRyaXZ5IHByZWZlcnMgdmVuZG9yIHNjb3JlcyBvdmVyIE5WRC5cbiAgICpcbiAgICogSXQgZGVmYXVsdHMgdG8gYENSSVRJQ0FMYCBJTiBUSElTIENPTlNUUlVDVCBmb3Igc2FmZXR5IGluIENJL0NELCBidXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBUcml2eSBpcyBcIkNSSVRJQ0FMLEhJR0gsTUVESVVNLExPVyxVTktOT1dOXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtTZXZlcml0eS5DUklUSUNBTF1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3Mvc2Nhbm5lci92dWxuZXJhYmlsaXR5LyNzZXZlcml0eS1zZWxlY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHNldmVyaXR5PzogU2V2ZXJpdHlbXTtcblxuICAvKipcbiAgICogRW5hYmxlL0Rpc2FibGUgU2Nhbm5lcnNcbiAgICpcbiAgICogWW91IGNhbiBlbmFibGUvZGlzYWJsZSBzY2FubmVycyB3aXRoIHRoZSBgc2Nhbm5lcnNgLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgY29udGFpbmVyIGltYWdlIHNjYW5uaW5nIGVuYWJsZXMgdnVsbmVyYWJpbGl0eSAoVlVMTikgYW5kIHNlY3JldCBzY2FubmVycyAoU0VDUkVUKSBieSBkZWZhdWx0LlxuICAgKiBJZiB5b3UgZG9uJ3QgbmVlZCBzZWNyZXQgc2Nhbm5pbmcsIGl0IGNhbiBiZSBkaXNhYmxlZCBieSBzcGVjaWZ5aW5nIFNjYW5uZXJzLlZVTE4gb25seS5cbiAgICpcbiAgICogQGRlZmF1bHQgW1NlY3VyaXR5LlZVTE4sU2Nhbm5lcnMuU0VDUkVUXVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXF1YXNlY3VyaXR5LmdpdGh1Yi5pby90cml2eS9sYXRlc3QvZG9jcy9jb25maWd1cmF0aW9uL290aGVycy8jZW5hYmxlZGlzYWJsZS1zY2FubmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgc2Nhbm5lcnM/OiBTY2FubmVyc1tdO1xuXG4gIC8qKlxuICAgKiBFbnVtIGZvciBJbWFnZUNvbmZpZ1NjYW5uZXJzXG4gICAqXG4gICAqIENvbnRhaW5lciBpbWFnZXMgaGF2ZSBjb25maWd1cmF0aW9uLiBkb2NrZXIgaW5zcGVjdCBhbmQgYGRvY2tlciBoaXN0b3J5YCBzaG93IHRoZSBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqIFRyaXZ5IHNjYW5zIHRoZSBjb25maWd1cmF0aW9uIG9mIGNvbnRhaW5lciBpbWFnZXMgZm9yXG4gICAqXG4gICAqIC0gTWlzY29uZmlndXJhdGlvbnNcbiAgICogLSBTZWNyZXRzXG4gICAqXG4gICAqIFRoZXkgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFlvdSBjYW4gZW5hYmxlIHRoZW0gd2l0aCBgaW1hZ2VDb25maWdTY2FubmVyc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL3RhcmdldC9jb250YWluZXJfaW1hZ2UvI2NvbnRhaW5lci1pbWFnZS1tZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VDb25maWdTY2FubmVycz86IEltYWdlQ29uZmlnU2Nhbm5lcnNbXTtcblxuICAvKipcbiAgICogRXhpdCBDb2RlXG4gICAqXG4gICAqIFVzZSB0aGUgYGV4aXRDb2RlYCBvcHRpb24gaWYgeW91IHdhbnQgdG8gZXhpdCB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlLlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgMCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gZXhpdCBldmVuIHdoZW4gdnVsbmVyYWJpbGl0aWVzIGFyZSBkZXRlY3RlZC5cbiAgICpcbiAgICogSXQgZGVmYXVsdHMgdG8gMSBJTiBUSElTIENPTlNUUlVDVCBmb3Igc2FmZXR5IGluIENJL0NELiBJbiB0aGUgb3JpZ2luYWwgdHJpdnksIGl0IGlzIDAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvY29uZmlndXJhdGlvbi9vdGhlcnMvI2V4aXQtY29kZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdENvZGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEV4aXQgb24gRU9MXG4gICAqXG4gICAqIFNvbWV0aW1lcyB5b3UgbWF5IHN1cnByaXNpbmdseSBnZXQgMCB2dWxuZXJhYmlsaXRpZXMgaW4gYW4gb2xkIGltYWdlOlxuICAgKiAgLSBFbmFibGluZyAtLWlnbm9yZS11bmZpeGVkIG9wdGlvbiB3aGlsZSBhbGwgcGFja2FnZXMgaGF2ZSBubyBmaXhlZCB2ZXJzaW9ucy5cbiAgICogIC0gU2Nhbm5pbmcgYSByYXRoZXIgb3V0ZGF0ZWQgT1MgKGUuZy4gVWJ1bnR1IDEwLjA0KS5cbiAgICpcbiAgICogQW4gT1MgYXQgdGhlIGVuZCBvZiBzZXJ2aWNlL2xpZmUgKEVPTCkgdXN1YWxseSBnZXRzIGludG8gdGhpcyBzaXR1YXRpb24sIHdoaWNoIGlzIGRlZmluaXRlbHkgZnVsbCBvZiB2dWxuZXJhYmlsaXRpZXMuXG4gICAqIGBleGl0T25Fb2xgIGNhbiBmYWlsIHNjYW5uaW5nIG9uIEVPTCBPUyB3aXRoIGEgbm9uLXplcm8gY29kZS5cbiAgICpcbiAgICogSXQgZGVmYXVsdHMgdG8gMSBJTiBUSElTIENPTlNUUlVDVCBmb3Igc2FmZXR5IGluIENJL0NELiBJbiB0aGUgb3JpZ2luYWwgdHJpdnksIGl0IGlzIDAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvY29uZmlndXJhdGlvbi9vdGhlcnMvI2V4aXQtb24tZW9sXG4gICAqL1xuICByZWFkb25seSBleGl0T25Fb2w/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEJ5IEZpbmRpbmcgSURzXG4gICAqXG4gICAqIFRoZSBpZ25vcmUgcnVsZXMgd3JpdHRlbiB0byB0aGUgLnRyaXZ5aWdub3JlIGluIHRyaXZ5LlxuICAgKiBQdXQgZWFjaCBsaW5lIHlvdSB3cml0ZSBpbiB0aGUgZmlsZSBpbnRvIG9uZSBlbGVtZW50IG9mIHRoZSBhcnJheS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogICAgICQgY2F0IC50cml2eWlnbm9yZVxuICAgKiAgICAgIyBBY2NlcHQgdGhlIHJpc2tcbiAgICogICAgIENWRS0yMDE4LTE0NjE4XG4gICAqXG4gICAqICAgICAjIEFjY2VwdCB0aGUgcmlzayB1bnRpbCAyMDIzLTAxLTAxXG4gICAqICAgICBDVkUtMjAxOS0xNDY5NyBleHA6MjAyMy0wMS0wMVxuICAgKlxuICAgKiAgICAgIyBObyBpbXBhY3QgaW4gb3VyIHNldHRpbmdzXG4gICAqICAgICBDVkUtMjAxOS0xNTQzXG4gICAqXG4gICAqICAgICAjIElnbm9yZSBtaXNjb25maWd1cmF0aW9uc1xuICAgKiAgICAgQVZELURTLTAwMDJcbiAgICpcbiAgICogICAgICMgSWdub3JlIHNlY3JldHNcbiAgICogICAgIGdlbmVyaWMtdW53YW50ZWQtcnVsZVxuICAgKiAgICAgYXdzLWFjY291bnQtaWRcbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvY29uZmlndXJhdGlvbi9maWx0ZXJpbmcvI3RyaXZ5aWdub3JlXG4gICAqL1xuICByZWFkb25seSB0cml2eUlnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNZW1vcnkgU2l6ZSAoTUIpIGZvciBTY2FubmVyIExhbWJkYVxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgYmV0d2VlbiBgMzAwOGAgYW5kIGAxMDI0MGAuXG4gICAqXG4gICAqIElmIHRoaXMgQ29uc3RydWN0IGV4ZWN1dGlvbiB0ZXJtaW5hdGVzIGFibm9ybWFsbHkgZHVlIHRvIFNJR0tJTEwsIHRyeSBhIGxhcmdlciBzaXplLlxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlIChgMzAwOGAgTUIpIGlzIE1heGltdW0gTGFtYmRhIG1lbW9yeSBzaXplIGZvciBkZWZhdWx0IEFXUyBhY2NvdW50IHdpdGhvdXQgcXVvdGEgbGltaXQgaW5jcmVhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IDMwMDhcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNjYW4gSW1hZ2Ugb24gYSBzcGVjaWZpYyBBcmNoaXRlY3R1cmUgYW5kIE9TXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIFRyaXZ5IGxvYWRzIGFuIGltYWdlIG9uIGEgYGxpbnV4L2FtZDY0YCBtYWNoaW5lLlxuICAgKlxuICAgKiBUbyBjdXN0b21pemUgdGhpcywgcGFzcyBhIGBwbGF0Zm9ybWAgYXJndW1lbnQgaW4gdGhlIGZvcm1hdCBPUy9BcmNoaXRlY3R1cmUgZm9yIHRoZSBpbWFnZSwgc3VjaCBhcyBgbGludXgvYXJtNjRgXG4gICAqXG4gICAqIEBkZWZhdWx0IC1cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xufVxuXG4vLyBNYXhpbXVtIExhbWJkYSBtZW1vcnkgc2l6ZSBmb3IgZGVmYXVsdCBBV1MgYWNjb3VudCB3aXRob3V0IHF1b3RhIGxpbWl0IGluY3JlYXNlXG5jb25zdCBERUZBVUxUX01FTU9SWV9TSVpFID0gMzAwODtcblxuZXhwb3J0IGNsYXNzIEltYWdlU2Nhbm5lcldpdGhUcml2eSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbWFnZVNjYW5uZXJXaXRoVHJpdnlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMubWVtb3J5U2l6ZSkge1xuICAgICAgaWYgKHByb3BzLm1lbW9yeVNpemUgPCAzMDA4IHx8IHByb3BzLm1lbW9yeVNpemUgPiAxMDI0MCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW4gc3BlY2lmeSBiZXR3ZWVuIGAzMDA4YCBhbmQgYDEwMjQwYCBmb3IgYG1lbW9yeVNpemVgLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbVJlc291cmNlTGFtYmRhID0gbmV3IFNpbmdsZXRvbkZ1bmN0aW9uKHRoaXMsICdDdXN0b21SZXNvdXJjZUxhbWJkYScsIHtcbiAgICAgIHV1aWQ6ICc0NzBiNjM0My1kMjY3LWY3NTMtMjI2Yy0xZTk5ZjA5ZjMxOWEnLFxuICAgICAgbGFtYmRhUHVycG9zZTogJ0N1c3RvbTo6SW1hZ2VTY2FubmVyV2l0aFRyaXZ5Q3VzdG9tUmVzb3VyY2VMYW1iZGEnLFxuICAgICAgcnVudGltZTogUnVudGltZS5GUk9NX0lNQUdFLFxuICAgICAgaGFuZGxlcjogSGFuZGxlci5GUk9NX0lNQUdFLFxuICAgICAgY29kZTogQXNzZXRDb2RlLmZyb21Bc3NldEltYWdlKGpvaW4oX19kaXJuYW1lLCAnLi4vYXNzZXRzL2xhbWJkYScpKSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoOTAwKSxcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IDAsXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplID8/IERFRkFVTFRfTUVNT1JZX1NJWkUsXG4gICAgfSk7XG4gICAgcHJvcHMucmVwb3NpdG9yeS5ncmFudFB1bGwoY3VzdG9tUmVzb3VyY2VMYW1iZGEpO1xuXG4gICAgY29uc3QgaW1hZ2VTY2FubmVyUHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgJ1Byb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IGN1c3RvbVJlc291cmNlTGFtYmRhLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW1hZ2VTY2FubmVyUHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfSA9IHt9O1xuICAgIGltYWdlU2Nhbm5lclByb3BlcnRpZXMuYWRkciA9IHRoaXMubm9kZS5hZGRyO1xuICAgIGltYWdlU2Nhbm5lclByb3BlcnRpZXMuaW1hZ2VVcmkgPSBwcm9wcy5pbWFnZVVyaTtcbiAgICBpbWFnZVNjYW5uZXJQcm9wZXJ0aWVzLmlnbm9yZVVuZml4ZWQgPSBwcm9wcy5pZ25vcmVVbmZpeGVkID8/IGZhbHNlO1xuICAgIGltYWdlU2Nhbm5lclByb3BlcnRpZXMuc2V2ZXJpdHkgPSBwcm9wcy5zZXZlcml0eSA/PyBbU2V2ZXJpdHkuQ1JJVElDQUxdO1xuICAgIGltYWdlU2Nhbm5lclByb3BlcnRpZXMuc2Nhbm5lcnMgPSBwcm9wcy5zY2FubmVycyA/PyBbXTtcbiAgICBpbWFnZVNjYW5uZXJQcm9wZXJ0aWVzLmltYWdlQ29uZmlnU2Nhbm5lcnMgPSBwcm9wcy5pbWFnZUNvbmZpZ1NjYW5uZXJzID8/IFtdO1xuICAgIGltYWdlU2Nhbm5lclByb3BlcnRpZXMuZXhpdENvZGUgPSBwcm9wcy5leGl0Q29kZSA/PyAxO1xuICAgIGltYWdlU2Nhbm5lclByb3BlcnRpZXMuZXhpdE9uRW9sID0gcHJvcHMuZXhpdE9uRW9sID8/IDE7XG4gICAgaW1hZ2VTY2FubmVyUHJvcGVydGllcy50cml2eUlnbm9yZSA9IHByb3BzLnRyaXZ5SWdub3JlID8/IFtdO1xuICAgIGltYWdlU2Nhbm5lclByb3BlcnRpZXMucGxhdGZvcm0gPSBwcm9wcy5wbGF0Zm9ybSA/PyAnJztcblxuICAgIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnRGVmYXVsdCcsIHtcbiAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6SW1hZ2VTY2FubmVyV2l0aFRyaXZ5JyxcbiAgICAgIHByb3BlcnRpZXM6IGltYWdlU2Nhbm5lclByb3BlcnRpZXMsXG4gICAgICBzZXJ2aWNlVG9rZW46IGltYWdlU2Nhbm5lclByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICB9KTtcbiAgfVxufVxuIl19
|
package/lib/integ.js
CHANGED
|
@@ -10,7 +10,11 @@ const image = new aws_ecr_assets_1.DockerImageAsset(stack, 'DockerImage', {
|
|
|
10
10
|
directory: (0, path_1.resolve)(__dirname, '../assets/lambda'),
|
|
11
11
|
platform: aws_ecr_assets_1.Platform.LINUX_ARM64,
|
|
12
12
|
});
|
|
13
|
-
new _1.ImageScannerWithTrivy(stack, '
|
|
13
|
+
new _1.ImageScannerWithTrivy(stack, 'ImageScannerWithTrivy1', {
|
|
14
|
+
imageUri: image.imageUri,
|
|
15
|
+
repository: image.repository,
|
|
16
|
+
});
|
|
17
|
+
new _1.ImageScannerWithTrivy(stack, 'ImageScannerWithTrivy2', {
|
|
14
18
|
imageUri: image.imageUri,
|
|
15
19
|
repository: image.repository,
|
|
16
20
|
ignoreUnfixed: false,
|
|
@@ -18,8 +22,8 @@ new _1.ImageScannerWithTrivy(stack, 'ImageScannerWithTrivy4', {
|
|
|
18
22
|
scanners: [_1.Scanners.VULN, _1.Scanners.SECRET],
|
|
19
23
|
exitCode: 1,
|
|
20
24
|
exitOnEol: 1,
|
|
21
|
-
trivyIgnore: ['CVE-2023-37920', 'CVE-2019-14697 exp:2023-01-01'],
|
|
25
|
+
trivyIgnore: ['CVE-2023-37920', 'CVE-2019-14697 exp:2023-01-01', 'generic-unwanted-rule'],
|
|
22
26
|
memorySize: 3008,
|
|
23
27
|
platform: 'linux/arm64',
|
|
24
28
|
});
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBK0I7QUFDL0IsNkNBQXlDO0FBQ3pDLCtEQUF3RTtBQUN4RSx3QkFBOEQ7QUFFOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0FBRTNELE1BQU0sS0FBSyxHQUFHLElBQUksaUNBQWdCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtJQUN2RCxTQUFTLEVBQUUsSUFBQSxjQUFPLEVBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDO0lBQ2pELFFBQVEsRUFBRSx5QkFBUSxDQUFDLFdBQVc7Q0FDL0IsQ0FBQyxDQUFDO0FBRUgsSUFBSSx3QkFBcUIsQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLEVBQUU7SUFDekQsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO0lBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtDQUM3QixDQUFDLENBQUM7QUFFSCxJQUFJLHdCQUFxQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRTtJQUN6RCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7SUFDeEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO0lBQzVCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLFFBQVEsRUFBRSxDQUFDLFdBQVEsQ0FBQyxRQUFRLENBQUM7SUFDN0IsUUFBUSxFQUFFLENBQUMsV0FBUSxDQUFDLElBQUksRUFBRSxXQUFRLENBQUMsTUFBTSxDQUFDO0lBQzFDLFFBQVEsRUFBRSxDQUFDO0lBQ1gsU0FBUyxFQUFFLENBQUM7SUFDWixXQUFXLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSwrQkFBK0IsRUFBRSx1QkFBdUIsQ0FBQztJQUN6RixVQUFVLEVBQUUsSUFBSTtJQUNoQixRQUFRLEVBQUUsYUFBYTtDQUN4QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBBcHAsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2VBc3NldCwgUGxhdGZvcm0gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyLWFzc2V0cyc7XG5pbXBvcnQgeyBJbWFnZVNjYW5uZXJXaXRoVHJpdnksIFNjYW5uZXJzLCBTZXZlcml0eSB9IGZyb20gJy4nO1xuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdJbWFnZVNjYW5uZXJXaXRoVHJpdnlTdGFjaycpO1xuXG5jb25zdCBpbWFnZSA9IG5ldyBEb2NrZXJJbWFnZUFzc2V0KHN0YWNrLCAnRG9ja2VySW1hZ2UnLCB7XG4gIGRpcmVjdG9yeTogcmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9hc3NldHMvbGFtYmRhJyksXG4gIHBsYXRmb3JtOiBQbGF0Zm9ybS5MSU5VWF9BUk02NCxcbn0pO1xuXG5uZXcgSW1hZ2VTY2FubmVyV2l0aFRyaXZ5KHN0YWNrLCAnSW1hZ2VTY2FubmVyV2l0aFRyaXZ5MScsIHtcbiAgaW1hZ2VVcmk6IGltYWdlLmltYWdlVXJpLFxuICByZXBvc2l0b3J5OiBpbWFnZS5yZXBvc2l0b3J5LFxufSk7XG5cbm5ldyBJbWFnZVNjYW5uZXJXaXRoVHJpdnkoc3RhY2ssICdJbWFnZVNjYW5uZXJXaXRoVHJpdnkyJywge1xuICBpbWFnZVVyaTogaW1hZ2UuaW1hZ2VVcmksXG4gIHJlcG9zaXRvcnk6IGltYWdlLnJlcG9zaXRvcnksXG4gIGlnbm9yZVVuZml4ZWQ6IGZhbHNlLFxuICBzZXZlcml0eTogW1NldmVyaXR5LkNSSVRJQ0FMXSxcbiAgc2Nhbm5lcnM6IFtTY2FubmVycy5WVUxOLCBTY2FubmVycy5TRUNSRVRdLFxuICBleGl0Q29kZTogMSxcbiAgZXhpdE9uRW9sOiAxLFxuICB0cml2eUlnbm9yZTogWydDVkUtMjAyMy0zNzkyMCcsICdDVkUtMjAxOS0xNDY5NyBleHA6MjAyMy0wMS0wMScsICdnZW5lcmljLXVud2FudGVkLXJ1bGUnXSxcbiAgbWVtb3J5U2l6ZTogMzAwOCxcbiAgcGxhdGZvcm06ICdsaW51eC9hcm02NCcsXG59KTtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "image-scanner-with-trivy",
|
|
3
|
+
"description": "Scan container images with Trivy in CDK deployment",
|
|
3
4
|
"repository": {
|
|
4
5
|
"type": "git",
|
|
5
6
|
"url": "https://github.com/go-to-k/image-scanner-with-trivy"
|
|
@@ -88,7 +89,7 @@
|
|
|
88
89
|
},
|
|
89
90
|
"main": "lib/index.js",
|
|
90
91
|
"license": "Apache-2.0",
|
|
91
|
-
"version": "1.0.
|
|
92
|
+
"version": "1.0.2",
|
|
92
93
|
"types": "lib/index.d.ts",
|
|
93
94
|
"stability": "stable",
|
|
94
95
|
"jsii": {
|