@fabasoad/sarif-to-slack 0.2.5 → 1.1.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.
- package/.github/workflows/release.yml +1 -1
- package/.github/workflows/security.yml +0 -1
- package/.github/workflows/send-sarif-to-slack.yml +145 -73
- package/.gitleaksignore +8 -0
- package/.pre-commit-config.yaml +3 -3
- package/.tool-versions +1 -1
- package/dist/Logger.js +4 -1
- package/dist/SarifToSlackClient.d.ts +33 -0
- package/dist/SarifToSlackClient.d.ts.map +1 -0
- package/dist/SarifToSlackClient.js +178 -0
- package/dist/SlackMessageBuilder.js +34 -82
- package/dist/System.d.ts +1 -3
- package/dist/System.d.ts.map +1 -1
- package/dist/System.js +10 -3
- package/dist/index.cjs +826 -472
- package/dist/index.d.ts +35 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -12
- package/dist/model/Color.d.ts +80 -0
- package/dist/model/Color.d.ts.map +1 -0
- package/dist/model/Color.js +106 -0
- package/dist/model/Finding.d.ts +2 -0
- package/dist/model/Finding.d.ts.map +1 -0
- package/dist/model/Finding.js +93 -0
- package/dist/model/FindingsArray.d.ts +2 -0
- package/dist/model/FindingsArray.d.ts.map +1 -0
- package/dist/model/FindingsArray.js +24 -0
- package/dist/processors/CodeQLProcessor.d.ts +2 -0
- package/dist/processors/CodeQLProcessor.d.ts.map +1 -0
- package/dist/processors/CodeQLProcessor.js +17 -0
- package/dist/processors/CommonProcessor.d.ts +2 -0
- package/dist/processors/CommonProcessor.d.ts.map +1 -0
- package/dist/processors/CommonProcessor.js +84 -0
- package/dist/processors/ProcessorFactory.d.ts +2 -0
- package/dist/processors/ProcessorFactory.d.ts.map +1 -0
- package/dist/processors/ProcessorFactory.js +22 -0
- package/dist/processors/SnykProcessor.d.ts +2 -0
- package/dist/processors/SnykProcessor.d.ts.map +1 -0
- package/dist/processors/SnykProcessor.js +18 -0
- package/dist/representations/CompactGroupByRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByRepresentation.js +58 -0
- package/dist/representations/CompactGroupByRunPerLevelRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByRunPerLevelRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByRunPerLevelRepresentation.js +13 -0
- package/dist/representations/CompactGroupByRunPerSeverityRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByRunPerSeverityRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByRunPerSeverityRepresentation.js +13 -0
- package/dist/representations/CompactGroupByRunRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByRunRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByRunRepresentation.js +39 -0
- package/dist/representations/CompactGroupBySarifPerLevelRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupBySarifPerLevelRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupBySarifPerLevelRepresentation.js +13 -0
- package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.js +13 -0
- package/dist/representations/CompactGroupBySarifRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupBySarifRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupBySarifRepresentation.js +40 -0
- package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.js +13 -0
- package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.js +13 -0
- package/dist/representations/CompactGroupByToolNameRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByToolNameRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByToolNameRepresentation.js +39 -0
- package/dist/representations/CompactTotalPerLevelRepresentation.d.ts +2 -0
- package/dist/representations/CompactTotalPerLevelRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactTotalPerLevelRepresentation.js +13 -0
- package/dist/representations/CompactTotalPerSeverityRepresentation.d.ts +2 -0
- package/dist/representations/CompactTotalPerSeverityRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactTotalPerSeverityRepresentation.js +13 -0
- package/dist/representations/CompactTotalRepresentation.d.ts +2 -0
- package/dist/representations/CompactTotalRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactTotalRepresentation.js +25 -0
- package/dist/representations/Representation.d.ts +2 -0
- package/dist/representations/Representation.d.ts.map +1 -0
- package/dist/representations/Representation.js +28 -0
- package/dist/representations/RepresentationFactory.d.ts +2 -0
- package/dist/representations/RepresentationFactory.d.ts.map +1 -0
- package/dist/representations/RepresentationFactory.js +37 -0
- package/dist/sarif-to-slack.d.ts +347 -85
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/types.d.ts +215 -51
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +225 -33
- package/dist/utils/Comparators.d.ts +2 -0
- package/dist/utils/Comparators.d.ts.map +1 -0
- package/dist/utils/Comparators.js +18 -0
- package/dist/utils/ExtendedArray.d.ts +2 -0
- package/dist/utils/ExtendedArray.d.ts.map +1 -0
- package/dist/utils/ExtendedArray.js +11 -0
- package/dist/utils/FileUtils.d.ts +2 -0
- package/dist/utils/FileUtils.d.ts.map +1 -0
- package/dist/utils/FileUtils.js +51 -0
- package/dist/utils/SarifUtils.js +20 -54
- package/etc/sarif-to-slack.api.md +162 -99
- package/jest.config.json +2 -2
- package/package.json +7 -7
- package/scripts/save-metadata.sh +12 -10
- package/src/Logger.ts +4 -0
- package/src/SarifToSlackClient.ts +202 -0
- package/src/SlackMessageBuilder.ts +35 -115
- package/src/System.ts +9 -2
- package/src/index.ts +47 -20
- package/src/model/Color.ts +195 -0
- package/src/model/Finding.ts +137 -0
- package/src/model/FindingsArray.ts +27 -0
- package/src/processors/CodeQLProcessor.ts +19 -0
- package/src/processors/CommonProcessor.ts +103 -0
- package/src/processors/ProcessorFactory.ts +23 -0
- package/src/processors/SnykProcessor.ts +19 -0
- package/src/representations/CompactGroupByRepresentation.ts +67 -0
- package/src/representations/CompactGroupByRunPerLevelRepresentation.ts +14 -0
- package/src/representations/CompactGroupByRunPerSeverityRepresentation.ts +14 -0
- package/src/representations/CompactGroupByRunRepresentation.ts +44 -0
- package/src/representations/CompactGroupBySarifPerLevelRepresentation.ts +15 -0
- package/src/representations/CompactGroupBySarifPerSeverityRepresentation.ts +15 -0
- package/src/representations/CompactGroupBySarifRepresentation.ts +45 -0
- package/src/representations/CompactGroupByToolNamePerLevelRepresentation.ts +15 -0
- package/src/representations/CompactGroupByToolNamePerSeverityRepresentation.ts +15 -0
- package/src/representations/CompactGroupByToolNameRepresentation.ts +44 -0
- package/src/representations/CompactTotalPerLevelRepresentation.ts +14 -0
- package/src/representations/CompactTotalPerSeverityRepresentation.ts +14 -0
- package/src/representations/CompactTotalRepresentation.ts +27 -0
- package/src/representations/Representation.ts +35 -0
- package/src/representations/RepresentationFactory.ts +49 -0
- package/src/types.ts +270 -53
- package/src/utils/Comparators.ts +19 -0
- package/src/utils/ExtendedArray.ts +11 -0
- package/src/utils/FileUtils.ts +60 -0
- package/src/utils/SarifUtils.ts +20 -72
- package/test-data/sarif/codeql-python.sarif +1448 -1
- package/test-data/sarif/codeql-typescript.sarif +3474 -1
- package/test-data/sarif/grype-github-actions.sarif +65 -0
- package/test-data/sarif/osv-scanner-composer.sarif +972 -0
- package/test-data/sarif/osv-scanner-container.sarif +2278 -0
- package/test-data/sarif/osv-scanner-gomodules.sarif +813 -0
- package/test-data/sarif/osv-scanner-hex.sarif +147 -0
- package/test-data/sarif/osv-scanner-maven.sarif +171 -0
- package/test-data/sarif/osv-scanner-npm.sarif +627 -0
- package/test-data/sarif/osv-scanner-pip.sarif +206 -0
- package/test-data/sarif/osv-scanner-pipenv.sarif +243 -0
- package/test-data/sarif/osv-scanner-pnpm.sarif +174 -0
- package/test-data/sarif/osv-scanner-poetry.sarif +1893 -0
- package/test-data/sarif/osv-scanner-rubygems.sarif +402 -0
- package/test-data/sarif/osv-scanner-uv.sarif +206 -0
- package/test-data/sarif/osv-scanner-yarn.sarif +5207 -0
- package/test-data/sarif/runs-0.sarif +5 -0
- package/test-data/sarif/runs-2-tools-2-results-0.sarif +1 -1
- package/test-data/sarif/runs-2-tools-2.sarif +1 -1
- package/test-data/sarif/runs-3-tools-2-results-0.sarif +1 -1
- package/test-data/sarif/runs-3-tools-2.sarif +1 -1
- package/test-data/sarif/tmp/codeql-csharp.sarif +1 -0
- package/test-data/sarif/tmp/grype-container.sarif +1774 -0
- package/test-data/sarif/tmp/runs-1-tools-1-results-0.sarif +18 -0
- package/test-data/sarif/tmp/runs-2-tools-2.sarif +686 -0
- package/test-data/sarif/trivy-iac.sarif +1 -1
- package/tests/integration/SendSarifToSlack.spec.ts +95 -27
- package/tsconfig.json +2 -0
- package/dist/Processors.d.ts +0 -2
- package/dist/Processors.d.ts.map +0 -1
- package/dist/Processors.js +0 -61
- package/dist/SarifToSlackService.d.ts +0 -39
- package/dist/SarifToSlackService.d.ts.map +0 -1
- package/dist/SarifToSlackService.js +0 -104
- package/dist/metadata.d.ts +0 -2
- package/dist/metadata.d.ts.map +0 -1
- package/dist/metadata.js +0 -11
- package/dist/model/SarifModelPerRun.d.ts +0 -2
- package/dist/model/SarifModelPerRun.d.ts.map +0 -1
- package/dist/model/SarifModelPerRun.js +0 -90
- package/dist/model/SarifModelPerSarif.d.ts +0 -2
- package/dist/model/SarifModelPerSarif.d.ts.map +0 -1
- package/dist/model/SarifModelPerSarif.js +0 -102
- package/dist/model/types.d.ts +0 -2
- package/dist/model/types.d.ts.map +0 -1
- package/dist/model/types.js +0 -49
- package/dist/utils/SortUtils.d.ts +0 -2
- package/dist/utils/SortUtils.d.ts.map +0 -1
- package/dist/utils/SortUtils.js +0 -20
- package/src/Processors.ts +0 -68
- package/src/SarifToSlackService.ts +0 -117
- package/src/metadata.ts +0 -10
- package/src/model/SarifModelPerRun.ts +0 -120
- package/src/model/SarifModelPerSarif.ts +0 -126
- package/src/model/types.ts +0 -50
- package/src/utils/SortUtils.ts +0 -33
- package/tests/Processors.spec.ts +0 -76
package/dist/index.d.ts
CHANGED
|
@@ -2,24 +2,45 @@
|
|
|
2
2
|
* Sarif to Slack message converter library.
|
|
3
3
|
*
|
|
4
4
|
* @remarks
|
|
5
|
-
* This library provides a
|
|
5
|
+
* This library provides a client to send a Slack messages based on the provided
|
|
6
6
|
* SARIF (Static Analysis Results Interchange Format) files.
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```typescript
|
|
10
|
-
* import {
|
|
10
|
+
* import {
|
|
11
|
+
* Color,
|
|
12
|
+
* FooterType,
|
|
13
|
+
* LogLevel,
|
|
14
|
+
* RepresentationType,
|
|
15
|
+
* SarifToSlackClient,
|
|
16
|
+
* SendIf
|
|
17
|
+
* } from '@fabasoad/sarif-to-slack';
|
|
11
18
|
*
|
|
12
|
-
* const
|
|
19
|
+
* const client: SarifToSlackClient = await SarifToSlackClient.create({
|
|
13
20
|
* webhookUrl: 'https://hooks.slack.com/services/your/webhook/url',
|
|
14
|
-
*
|
|
21
|
+
* username: 'SARIF to Slack Bot',
|
|
22
|
+
* iconUrl: 'https://example.com/icon.png',
|
|
23
|
+
* color: {
|
|
24
|
+
* bySeverity: {
|
|
25
|
+
* critical: new Color('#ff0000'),
|
|
26
|
+
* high: new Color('#ff4500'),
|
|
27
|
+
* medium: new Color('#ffa500'),
|
|
28
|
+
* low: new Color('#ffff00'),
|
|
29
|
+
* none: new Color('#808080'),
|
|
30
|
+
* unknown: new Color('#800080'),
|
|
31
|
+
* empty: new Color('#d3d3d3'),
|
|
32
|
+
* },
|
|
33
|
+
* },
|
|
34
|
+
* sarif: {
|
|
35
|
+
* path: 'path/to/your/sarif-files',
|
|
36
|
+
* recursive: true,
|
|
37
|
+
* extension: 'sarif',
|
|
38
|
+
* },
|
|
15
39
|
* log: {
|
|
16
40
|
* level: LogLevel.Info,
|
|
17
41
|
* template: '[{{logLevelName}}] [{{name}}] {{dateIsoStr}} ',
|
|
18
42
|
* colored: false,
|
|
19
43
|
* },
|
|
20
|
-
* username: 'SARIF Bot',
|
|
21
|
-
* iconUrl: 'https://example.com/icon.png',
|
|
22
|
-
* color: '#36a64f',
|
|
23
44
|
* header: {
|
|
24
45
|
* include: true,
|
|
25
46
|
* value: 'SARIF Analysis Results'
|
|
@@ -36,15 +57,17 @@
|
|
|
36
57
|
* run: {
|
|
37
58
|
* include: true
|
|
38
59
|
* },
|
|
60
|
+
* representation: RepresentationType.CompactGroupByToolNamePerSeverity,
|
|
61
|
+
* sendIf: SendIf.MediumOrHigher,
|
|
39
62
|
* });
|
|
40
|
-
* await
|
|
63
|
+
* await client.send();
|
|
41
64
|
* ```
|
|
42
65
|
*
|
|
43
|
-
* @see {@link
|
|
66
|
+
* @see {@link SarifToSlackClient}
|
|
44
67
|
*
|
|
45
68
|
* @packageDocumentation
|
|
46
69
|
*/
|
|
47
|
-
export {
|
|
48
|
-
export {
|
|
49
|
-
export
|
|
70
|
+
export { Color, ColorOptions, ColorGroupByLevel, ColorGroupBySeverity } from './model/Color';
|
|
71
|
+
export { SarifToSlackClient } from './SarifToSlackClient';
|
|
72
|
+
export { FooterOptions, FooterType, IncludeAwareOptions, IncludeAwareWithValueOptions, LogLevel, LogOptions, RepresentationType, SarifFileExtension, SarifOptions, SarifToSlackClientOptions, SendIf, SlackMessage, } from './types';
|
|
50
73
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,OAAO,EACL,KAAK,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EACL,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,EACzB,MAAM,EACN,YAAY,GACb,MAAM,SAAS,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -3,24 +3,45 @@
|
|
|
3
3
|
* Sarif to Slack message converter library.
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
|
-
* This library provides a
|
|
6
|
+
* This library provides a client to send a Slack messages based on the provided
|
|
7
7
|
* SARIF (Static Analysis Results Interchange Format) files.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```typescript
|
|
11
|
-
* import {
|
|
11
|
+
* import {
|
|
12
|
+
* Color,
|
|
13
|
+
* FooterType,
|
|
14
|
+
* LogLevel,
|
|
15
|
+
* RepresentationType,
|
|
16
|
+
* SarifToSlackClient,
|
|
17
|
+
* SendIf
|
|
18
|
+
* } from '@fabasoad/sarif-to-slack';
|
|
12
19
|
*
|
|
13
|
-
* const
|
|
20
|
+
* const client: SarifToSlackClient = await SarifToSlackClient.create({
|
|
14
21
|
* webhookUrl: 'https://hooks.slack.com/services/your/webhook/url',
|
|
15
|
-
*
|
|
22
|
+
* username: 'SARIF to Slack Bot',
|
|
23
|
+
* iconUrl: 'https://example.com/icon.png',
|
|
24
|
+
* color: {
|
|
25
|
+
* bySeverity: {
|
|
26
|
+
* critical: new Color('#ff0000'),
|
|
27
|
+
* high: new Color('#ff4500'),
|
|
28
|
+
* medium: new Color('#ffa500'),
|
|
29
|
+
* low: new Color('#ffff00'),
|
|
30
|
+
* none: new Color('#808080'),
|
|
31
|
+
* unknown: new Color('#800080'),
|
|
32
|
+
* empty: new Color('#d3d3d3'),
|
|
33
|
+
* },
|
|
34
|
+
* },
|
|
35
|
+
* sarif: {
|
|
36
|
+
* path: 'path/to/your/sarif-files',
|
|
37
|
+
* recursive: true,
|
|
38
|
+
* extension: 'sarif',
|
|
39
|
+
* },
|
|
16
40
|
* log: {
|
|
17
41
|
* level: LogLevel.Info,
|
|
18
42
|
* template: '[{{logLevelName}}] [{{name}}] {{dateIsoStr}} ',
|
|
19
43
|
* colored: false,
|
|
20
44
|
* },
|
|
21
|
-
* username: 'SARIF Bot',
|
|
22
|
-
* iconUrl: 'https://example.com/icon.png',
|
|
23
|
-
* color: '#36a64f',
|
|
24
45
|
* header: {
|
|
25
46
|
* include: true,
|
|
26
47
|
* value: 'SARIF Analysis Results'
|
|
@@ -37,14 +58,17 @@
|
|
|
37
58
|
* run: {
|
|
38
59
|
* include: true
|
|
39
60
|
* },
|
|
61
|
+
* representation: RepresentationType.CompactGroupByToolNamePerSeverity,
|
|
62
|
+
* sendIf: SendIf.MediumOrHigher,
|
|
40
63
|
* });
|
|
41
|
-
* await
|
|
64
|
+
* await client.send();
|
|
42
65
|
* ```
|
|
43
66
|
*
|
|
44
|
-
* @see {@link
|
|
67
|
+
* @see {@link SarifToSlackClient}
|
|
45
68
|
*
|
|
46
69
|
* @packageDocumentation
|
|
47
70
|
*/
|
|
48
|
-
export {
|
|
49
|
-
export {
|
|
50
|
-
|
|
71
|
+
export { Color } from './model/Color';
|
|
72
|
+
export { SarifToSlackClient } from './SarifToSlackClient';
|
|
73
|
+
export { FooterType, LogLevel, RepresentationType, SendIf, } from './types';
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEZBQTBGO0FBRTFGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9FRztBQUNILE9BQU8sRUFDTCxLQUFLLEVBSU4sTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDekQsT0FBTyxFQUVMLFVBQVUsRUFHVixRQUFRLEVBRVIsa0JBQWtCLEVBSWxCLE1BQU0sR0FFUCxNQUFNLFNBQVMsQ0FBQSJ9
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class represents a color in hex format.
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
5
|
+
export declare class Color {
|
|
6
|
+
private readonly _color?;
|
|
7
|
+
/**
|
|
8
|
+
* Creates an instance of {@link Color} class. Before creating an instance of
|
|
9
|
+
* {@link Color} class, it (if applicable) maps CI status into the hex color,
|
|
10
|
+
* and also validates {@param color} to be a valid string that represents a
|
|
11
|
+
* color in hex format.
|
|
12
|
+
* @param color Can be either undefined, valid color in hex format or GitHub
|
|
13
|
+
* CI status (one of: success, failure, cancelled, skipped)
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
constructor(color?: string);
|
|
17
|
+
/**
|
|
18
|
+
* Returns a valid string that represents a color in hex format, or undefined.
|
|
19
|
+
*/
|
|
20
|
+
get value(): string | undefined;
|
|
21
|
+
private validateHexColor;
|
|
22
|
+
private mapColor;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Base type that has common fields for both {@link ColorGroupByLevel} and
|
|
26
|
+
* {@link ColorGroupBySeverity}.
|
|
27
|
+
* @private
|
|
28
|
+
*/
|
|
29
|
+
type ColorGroupCommon = {
|
|
30
|
+
none?: Color;
|
|
31
|
+
unknown?: Color;
|
|
32
|
+
empty?: Color;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Color schema for the findings with the certain level. Color is used by the
|
|
36
|
+
* level importance, i.e. if at least 1 error finding exists then
|
|
37
|
+
* {@link ColorGroupByLevel.error} color is used, then if at least 1 warning
|
|
38
|
+
* finding exists then {@link ColorGroupByLevel.warning} color is used, etc.
|
|
39
|
+
* @public
|
|
40
|
+
*/
|
|
41
|
+
export type ColorGroupByLevel = ColorGroupCommon & {
|
|
42
|
+
error?: Color;
|
|
43
|
+
warning?: Color;
|
|
44
|
+
note?: Color;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Color schema for the findings with the certain severity. Color is used by the
|
|
48
|
+
* severity importance, i.e. if at least 1 critical finding exists then
|
|
49
|
+
* {@link ColorGroupBySeverity.critical} color is used, then if at least 1 high
|
|
50
|
+
* finding exists then {@link ColorGroupBySeverity.high} color is used, etc.
|
|
51
|
+
* @public
|
|
52
|
+
*/
|
|
53
|
+
export type ColorGroupBySeverity = ColorGroupCommon & {
|
|
54
|
+
critical?: Color;
|
|
55
|
+
high?: Color;
|
|
56
|
+
medium?: Color;
|
|
57
|
+
low?: Color;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Represents configuration of the color scheme. If both {@link ColorOptions.byLevel}
|
|
61
|
+
* and {@link ColorOptions.bySeverity} are defined, then {@link ColorOptions.bySeverity}
|
|
62
|
+
* takes precedence.
|
|
63
|
+
* @public
|
|
64
|
+
*/
|
|
65
|
+
export type ColorOptions = {
|
|
66
|
+
/**
|
|
67
|
+
* Default color if specific color was not found. It is a fallback option.
|
|
68
|
+
*/
|
|
69
|
+
default?: Color;
|
|
70
|
+
/**
|
|
71
|
+
* Color scheme for the findings where certain level is presented.
|
|
72
|
+
*/
|
|
73
|
+
byLevel?: ColorGroupByLevel;
|
|
74
|
+
/**
|
|
75
|
+
* Color scheme for the findings where certain severity is presented.
|
|
76
|
+
*/
|
|
77
|
+
bySeverity?: ColorGroupBySeverity;
|
|
78
|
+
};
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=Color.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../../src/model/Color.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAQ;IAEhC;;;;;;;;OAQG;gBACgB,KAAK,CAAC,EAAE,MAAM;IAKjC;;OAEG;IACH,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,QAAQ;CAcjB;AAED;;;;GAIG;AACH,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,CAAC;CACb,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAA"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { SecurityLevel, SecuritySeverity } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* This class represents a color in hex format.
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export class Color {
|
|
7
|
+
_color;
|
|
8
|
+
/**
|
|
9
|
+
* Creates an instance of {@link Color} class. Before creating an instance of
|
|
10
|
+
* {@link Color} class, it (if applicable) maps CI status into the hex color,
|
|
11
|
+
* and also validates {@param color} to be a valid string that represents a
|
|
12
|
+
* color in hex format.
|
|
13
|
+
* @param color Can be either undefined, valid color in hex format or GitHub
|
|
14
|
+
* CI status (one of: success, failure, cancelled, skipped)
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
constructor(color) {
|
|
18
|
+
this._color = this.mapColor(color);
|
|
19
|
+
this.validateHexColor();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns a valid string that represents a color in hex format, or undefined.
|
|
23
|
+
*/
|
|
24
|
+
get value() {
|
|
25
|
+
return this._color;
|
|
26
|
+
}
|
|
27
|
+
validateHexColor() {
|
|
28
|
+
if (this._color != null) {
|
|
29
|
+
const hexColorRegex = /^#(?:[0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;
|
|
30
|
+
if (!hexColorRegex.test(this._color)) {
|
|
31
|
+
throw new Error(`Invalid hex color: "${this._color}"`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
mapColor(from) {
|
|
36
|
+
switch (from) {
|
|
37
|
+
case 'success':
|
|
38
|
+
return '#008000';
|
|
39
|
+
case 'failure':
|
|
40
|
+
return '#ff0000';
|
|
41
|
+
case 'cancelled':
|
|
42
|
+
return '#0047ab';
|
|
43
|
+
case 'skipped':
|
|
44
|
+
return '#808080';
|
|
45
|
+
default:
|
|
46
|
+
return from;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function identifyColorCommon(findings, prop, none, unknown, color, defaultColor) {
|
|
51
|
+
if (color.none != null && findings.findByProperty(prop, none) != null) {
|
|
52
|
+
return color.none.value;
|
|
53
|
+
}
|
|
54
|
+
if (color.unknown != null && findings.findByProperty(prop, unknown) != null) {
|
|
55
|
+
return color.unknown.value;
|
|
56
|
+
}
|
|
57
|
+
if (color.empty != null && findings.length === 0) {
|
|
58
|
+
return color.empty.value;
|
|
59
|
+
}
|
|
60
|
+
return defaultColor?.value;
|
|
61
|
+
}
|
|
62
|
+
function identifyColorBySeverity(findings, color, defaultColor) {
|
|
63
|
+
if (color.critical != null && findings.findByProperty('severity', SecuritySeverity.Critical) != null) {
|
|
64
|
+
return color.critical.value;
|
|
65
|
+
}
|
|
66
|
+
if (color.high != null && findings.findByProperty('severity', SecuritySeverity.High) != null) {
|
|
67
|
+
return color.high.value;
|
|
68
|
+
}
|
|
69
|
+
if (color.medium != null && findings.findByProperty('severity', SecuritySeverity.Medium) != null) {
|
|
70
|
+
return color.medium.value;
|
|
71
|
+
}
|
|
72
|
+
if (color.low != null && findings.findByProperty('severity', SecuritySeverity.Low) != null) {
|
|
73
|
+
return color.low.value;
|
|
74
|
+
}
|
|
75
|
+
return identifyColorCommon(findings, 'severity', SecuritySeverity.None, SecuritySeverity.Unknown, color, defaultColor);
|
|
76
|
+
}
|
|
77
|
+
function identifyColorByLevel(findings, color, defaultColor) {
|
|
78
|
+
if (color.error != null && findings.findByProperty('level', SecurityLevel.Error) != null) {
|
|
79
|
+
return color.error.value;
|
|
80
|
+
}
|
|
81
|
+
if (color.warning != null && findings.findByProperty('level', SecurityLevel.Warning) != null) {
|
|
82
|
+
return color.warning.value;
|
|
83
|
+
}
|
|
84
|
+
if (color.note != null && findings.findByProperty('level', SecurityLevel.Note) != null) {
|
|
85
|
+
return color.note.value;
|
|
86
|
+
}
|
|
87
|
+
return identifyColorCommon(findings, 'level', SecurityLevel.None, SecurityLevel.Unknown, color, defaultColor);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Makes an ultimate decision on what color should be Slack message. The decision
|
|
91
|
+
* is based on the provided {@param colorOpts} parameter and {@param findings}
|
|
92
|
+
* list.
|
|
93
|
+
* @param findings An instance of {@link FindingsArray} object.
|
|
94
|
+
* @param colorOpts An instance of {@link ColorOptions} type.
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
export function identifyColor(findings, colorOpts) {
|
|
98
|
+
if (colorOpts?.bySeverity != null) {
|
|
99
|
+
return identifyColorBySeverity(findings, colorOpts.bySeverity, colorOpts.default);
|
|
100
|
+
}
|
|
101
|
+
if (colorOpts?.byLevel != null) {
|
|
102
|
+
return identifyColorByLevel(findings, colorOpts.byLevel, colorOpts.default);
|
|
103
|
+
}
|
|
104
|
+
return colorOpts?.default?.value;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvQ29sb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUkxRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sS0FBSztJQUNDLE1BQU0sQ0FBUztJQUVoQzs7Ozs7Ozs7T0FRRztJQUNILFlBQW1CLEtBQWM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLGFBQWEsR0FBRyxvRUFBb0UsQ0FBQztZQUUzRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQWE7UUFDNUIsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sU0FBUyxDQUFBO1lBQ2xCLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQjtnQkFDRSxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7SUFD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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Finding.d.ts","sourceRoot":"","sources":["../../src/model/Finding.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { SecurityLevel, SecuritySeverity } from '../types';
|
|
2
|
+
import Logger from '../Logger';
|
|
3
|
+
import { createProcessor } from '../processors/ProcessorFactory';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a new instance of {@link Finding} class.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export function createFinding(opts) {
|
|
9
|
+
return new SarifFinding(opts);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The only implementation of {@link Finding} interface. This class is private
|
|
13
|
+
* and is not supposed to be exposed. {@link createFinding} should be used to
|
|
14
|
+
* create a new {@link Finding}.
|
|
15
|
+
* @private
|
|
16
|
+
*/
|
|
17
|
+
class SarifFinding {
|
|
18
|
+
_runMetadata;
|
|
19
|
+
_result;
|
|
20
|
+
_sarifPath;
|
|
21
|
+
_rule;
|
|
22
|
+
_processor;
|
|
23
|
+
_cvssScoreCacheProcessed = false;
|
|
24
|
+
_cvssScoreCache = undefined;
|
|
25
|
+
_levelCacheProcessed = false;
|
|
26
|
+
_levelCache = undefined;
|
|
27
|
+
constructor(opts) {
|
|
28
|
+
this._processor = createProcessor(opts.runMetadata.run, opts.result);
|
|
29
|
+
this._sarifPath = opts.sarifPath;
|
|
30
|
+
this._runMetadata = opts.runMetadata;
|
|
31
|
+
this._result = opts.result;
|
|
32
|
+
this._rule = this._processor.tryFindRule();
|
|
33
|
+
}
|
|
34
|
+
clone() {
|
|
35
|
+
return createFinding({
|
|
36
|
+
sarifPath: this._sarifPath,
|
|
37
|
+
runMetadata: this._runMetadata,
|
|
38
|
+
result: this._result
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
get sarifPath() {
|
|
42
|
+
return this._sarifPath;
|
|
43
|
+
}
|
|
44
|
+
get runId() {
|
|
45
|
+
return this._runMetadata.id;
|
|
46
|
+
}
|
|
47
|
+
get toolName() {
|
|
48
|
+
return this._processor.findToolComponent().name;
|
|
49
|
+
}
|
|
50
|
+
get cvssScore() {
|
|
51
|
+
if (!this._cvssScoreCacheProcessed) {
|
|
52
|
+
this._cvssScoreCacheProcessed = true;
|
|
53
|
+
this._cvssScoreCache = this._processor.tryFindCvssScore();
|
|
54
|
+
}
|
|
55
|
+
return this._cvssScoreCache;
|
|
56
|
+
}
|
|
57
|
+
get level() {
|
|
58
|
+
if (!this._levelCacheProcessed) {
|
|
59
|
+
this._levelCacheProcessed = true;
|
|
60
|
+
this._levelCache = this._processor.tryFindLevel();
|
|
61
|
+
}
|
|
62
|
+
if (this._levelCache === undefined) {
|
|
63
|
+
Logger.debug(`Unknown level of ${this._rule?.id} rule`);
|
|
64
|
+
return SecurityLevel.Unknown;
|
|
65
|
+
}
|
|
66
|
+
switch (this._levelCache) {
|
|
67
|
+
case 'error': return SecurityLevel.Error;
|
|
68
|
+
case 'warning': return SecurityLevel.Warning;
|
|
69
|
+
case 'note': return SecurityLevel.Note;
|
|
70
|
+
default: return SecurityLevel.None;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
get severity() {
|
|
74
|
+
if (this.cvssScore == null || this.cvssScore < 0 || this.cvssScore > 10) {
|
|
75
|
+
Logger.debug(`Unsupported CVSS score ${this.cvssScore} in ${this._rule?.id} rule`);
|
|
76
|
+
return SecuritySeverity.Unknown;
|
|
77
|
+
}
|
|
78
|
+
if (this.cvssScore >= 9) {
|
|
79
|
+
return SecuritySeverity.Critical;
|
|
80
|
+
}
|
|
81
|
+
if (this.cvssScore >= 7) {
|
|
82
|
+
return SecuritySeverity.High;
|
|
83
|
+
}
|
|
84
|
+
if (this.cvssScore >= 4) {
|
|
85
|
+
return SecuritySeverity.Medium;
|
|
86
|
+
}
|
|
87
|
+
if (this.cvssScore >= 0.1) {
|
|
88
|
+
return SecuritySeverity.Low;
|
|
89
|
+
}
|
|
90
|
+
return SecuritySeverity.None;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmluZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9GaW5kaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBVyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDbkUsT0FBTyxNQUFNLE1BQU0sV0FBVyxDQUFBO0FBRTlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQTBCaEU7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFvQjtJQUNoRCxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQy9CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sWUFBWTtJQUNDLFlBQVksQ0FBUztJQUNyQixPQUFPLENBQVE7SUFDZixVQUFVLENBQVE7SUFDbEIsS0FBSyxDQUFzQjtJQUMzQixVQUFVLENBQWlCO0lBRXBDLHdCQUF3QixHQUFZLEtBQUssQ0FBQTtJQUN6QyxlQUFlLEdBQXVCLFNBQVMsQ0FBQTtJQUUvQyxvQkFBb0IsR0FBWSxLQUFLLENBQUE7SUFDckMsV0FBVyxHQUE2QixTQUFTLENBQUE7SUFFekQsWUFBWSxJQUFvQjtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxhQUFhLENB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindingsArray.d.ts","sourceRoot":"","sources":["../../src/model/FindingsArray.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import ExtendedArray from '../utils/ExtendedArray';
|
|
2
|
+
import { SecurityLevel, SecuritySeverity } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* This class represents an array of {@link Finding} objects and adds additional
|
|
5
|
+
* useful methods to it.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export default class FindingsArray extends ExtendedArray {
|
|
9
|
+
hasSeverityOrHigher(severity) {
|
|
10
|
+
return Object
|
|
11
|
+
.values(SecuritySeverity)
|
|
12
|
+
.filter((v) => typeof v === 'number')
|
|
13
|
+
.filter((v) => v >= severity)
|
|
14
|
+
.some((v) => this.findByProperty('severity', v) != null);
|
|
15
|
+
}
|
|
16
|
+
hasLevelOrHigher(level) {
|
|
17
|
+
return Object
|
|
18
|
+
.values(SecurityLevel)
|
|
19
|
+
.filter((v) => typeof v === 'number')
|
|
20
|
+
.filter((v) => v >= level)
|
|
21
|
+
.some((v) => this.findByProperty('level', v) != null);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmluZGluZ3NBcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9GaW5kaW5nc0FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFMUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sYUFBYyxTQUFRLGFBQXNCO0lBRXhELG1CQUFtQixDQUFDLFFBQTBCO1FBQ25ELE9BQU8sTUFBTTthQUNWLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN4QixNQUFNLENBQUMsQ0FBQyxDQUE0QixFQUF5QixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO2FBQ3RGLE1BQU0sQ0FBQyxDQUFDLENBQW1CLEVBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUM7YUFDdkQsSUFBSSxDQUFDLENBQUMsQ0FBbUIsRUFBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7SUFDdkYsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQW9CO1FBQzFDLE9BQU8sTUFBTTthQUNWLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBeUIsRUFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQzthQUNoRixNQUFNLENBQUMsQ0FBQyxDQUFnQixFQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO2FBQ2pELElBQUksQ0FBQyxDQUFDLENBQWdCLEVBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO0lBQ2pGLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeQLProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/CodeQLProcessor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CommonProcessor } from './CommonProcessor';
|
|
2
|
+
/**
|
|
3
|
+
* This class has extra logic for processing SARIF files produced by CodeQL tool.
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export class CodeQLProcessor extends CommonProcessor {
|
|
7
|
+
/**
|
|
8
|
+
* Rules in SARIF files produced by CodeQL has additional "problem.severity"
|
|
9
|
+
* property where level is also defined. This method tries to get level in a
|
|
10
|
+
* common way but if it fails to do so, then it tries to get level from
|
|
11
|
+
* "problem.severity" property.
|
|
12
|
+
*/
|
|
13
|
+
tryFindLevel() {
|
|
14
|
+
return super.tryFindLevel() ?? this.tryFindRuleProperty('problem.severity');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZVFMUHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2Nlc3NvcnMvQ29kZVFMUHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUduRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxlQUFlO0lBRWxEOzs7OztPQUtHO0lBQ2EsWUFBWTtRQUMxQixPQUFPLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommonProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/CommonProcessor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as sarifUtils from '../utils/SarifUtils';
|
|
2
|
+
/**
|
|
3
|
+
* This class has logic of the SARIF file processing, such as finding rule,
|
|
4
|
+
* finding tool component, etc. It is used by default for all SARIF files.
|
|
5
|
+
* Derived classes from this class can implement extra logic for the specific
|
|
6
|
+
* use cases, such as SARIF files produced by specific tools. For example,
|
|
7
|
+
* {@link CodeQLProcessor} handles additional logic for processing SARIF files
|
|
8
|
+
* produced by CodeQL.
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export class CommonProcessor {
|
|
12
|
+
_run;
|
|
13
|
+
_result;
|
|
14
|
+
/**
|
|
15
|
+
* Creates an instance of {@link CommonProcessor} class.
|
|
16
|
+
* @param run An instance of {@link Run} object.
|
|
17
|
+
* @param result An instance of {@link Result} object.
|
|
18
|
+
*/
|
|
19
|
+
constructor(run, result) {
|
|
20
|
+
this._run = run;
|
|
21
|
+
this._result = result;
|
|
22
|
+
}
|
|
23
|
+
tryFindCvssScore() {
|
|
24
|
+
return this.tryFindRuleProperty('security-severity');
|
|
25
|
+
}
|
|
26
|
+
tryFindLevel() {
|
|
27
|
+
return this._result.level ?? this.tryFindRule()?.defaultConfiguration?.level;
|
|
28
|
+
}
|
|
29
|
+
findToolComponentDriver() {
|
|
30
|
+
return sarifUtils.findToolComponentDriver(this._run);
|
|
31
|
+
}
|
|
32
|
+
tryFindToolComponentExtension() {
|
|
33
|
+
return sarifUtils.tryFindToolComponentExtension(this._run, this._result);
|
|
34
|
+
}
|
|
35
|
+
findToolComponent() {
|
|
36
|
+
return sarifUtils.findToolComponent(this._run, this._result);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* This function tries to find the respective rule for the given result.
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
tryFindRule() {
|
|
43
|
+
const ruleData = {};
|
|
44
|
+
if (this._result.rule) {
|
|
45
|
+
if (this._result.rule?.index != null) {
|
|
46
|
+
ruleData.index = this._result.rule.index;
|
|
47
|
+
}
|
|
48
|
+
if (this._result.rule?.id) {
|
|
49
|
+
ruleData.id = this._result.rule.id;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (ruleData.index == null && this._result.ruleIndex != null) {
|
|
53
|
+
ruleData.index = this._result.ruleIndex;
|
|
54
|
+
}
|
|
55
|
+
if (!ruleData.id && this._result.ruleId) {
|
|
56
|
+
ruleData.id = this._result.ruleId;
|
|
57
|
+
}
|
|
58
|
+
const tool = this.findToolComponent();
|
|
59
|
+
if (ruleData.index != null
|
|
60
|
+
&& tool?.rules
|
|
61
|
+
&& ruleData.index < tool.rules.length) {
|
|
62
|
+
return tool.rules[ruleData.index];
|
|
63
|
+
}
|
|
64
|
+
// If failed to find rule by index then try to find by ruleId
|
|
65
|
+
if (ruleData.id && tool?.rules) {
|
|
66
|
+
return tool.rules.find((r) => r.id === ruleData.id);
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* This function searches respective rule for the given result, and then gets
|
|
72
|
+
* the property of interest from it.
|
|
73
|
+
* @param propertyName The property name that you want to get the value from.
|
|
74
|
+
* @protected
|
|
75
|
+
*/
|
|
76
|
+
tryFindRuleProperty(propertyName) {
|
|
77
|
+
const rule = this.tryFindRule();
|
|
78
|
+
if (rule?.properties && propertyName in rule.properties) {
|
|
79
|
+
return rule.properties[propertyName];
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbW9uUHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2Nlc3NvcnMvQ29tbW9uUHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUE7QUFFakQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUNQLElBQUksQ0FBSztJQUNULE9BQU8sQ0FBUTtJQUVsQzs7OztPQUlHO0lBQ0gsWUFBbUIsR0FBUSxFQUFFLE1BQWM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtJQUN2QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFBO0lBQzlFLENBQUM7SUFFTSx1QkFBdUI7UUFDNUIsT0FBTyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFFTSw2QkFBNkI7UUFDbEMsT0FBTyxVQUFVLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVztRQUNoQixNQUFNLFFBQVEsR0FBb0MsRUFBRSxDQUFBO1FBRXBELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDckMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUE7WUFDMUMsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFBO1lBQ3BDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM3RCxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO1FBQ3pDLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7UUFDbkMsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFrQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUVwRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSTtlQUNyQixJQUFJLEVBQUUsS0FBSztlQUNYLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25DLENBQUM7UUFFRCw2REFBNkQ7UUFDN0QsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNwQixDQUFDLENBQXNCLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FDMUQsQ0FBQTtRQUNILENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxtQkFBbUIsQ0FBSSxZQUFvQjtRQUNuRCxNQUFNLElBQUksR0FBb0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ2hFLElBQUksSUFBSSxFQUFFLFVBQVUsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQU0sQ0FBQTtRQUMzQyxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessorFactory.d.ts","sourceRoot":"","sources":["../../src/processors/ProcessorFactory.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CommonProcessor } from './CommonProcessor';
|
|
2
|
+
import { findToolComponent } from '../utils/SarifUtils';
|
|
3
|
+
import { SnykProcessor } from './SnykProcessor';
|
|
4
|
+
import { CodeQLProcessor } from './CodeQLProcessor';
|
|
5
|
+
/**
|
|
6
|
+
* Creates a new instance of {@link CommonProcessor} class. It tries to find specific
|
|
7
|
+
* processor based on the tool component for the given {@param run} and
|
|
8
|
+
* {@param result} and if no specific processors exist, then it returns an
|
|
9
|
+
* instance of {@link CommonProcessor} class.
|
|
10
|
+
* @param run An instance of {@link Run} class.
|
|
11
|
+
* @param result An instance of {@link Result} class.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export function createProcessor(run, result) {
|
|
15
|
+
const toolComponent = findToolComponent(run, result);
|
|
16
|
+
switch (toolComponent.name) {
|
|
17
|
+
case 'CodeQL': return new CodeQLProcessor(run, result);
|
|
18
|
+
case 'Snyk Open Source': return new SnykProcessor(run, result);
|
|
19
|
+
default: return new CommonProcessor(run, result);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvY2Vzc29yRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzb3JzL1Byb2Nlc3NvckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbkQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVEsRUFBRSxNQUFjO0lBQ3RELE1BQU0sYUFBYSxHQUFrQixpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbkUsUUFBUSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN0RCxLQUFLLGtCQUFrQixDQUFDLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDOUQsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbEQsQ0FBQztBQUNILENBQUMifQ==
|