@fabasoad/sarif-to-slack 0.2.4 → 1.0.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 +148 -76
- 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 +2 -0
- package/dist/System.d.ts.map +1 -0
- package/dist/System.js +15 -0
- package/dist/index.cjs +843 -467
- 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 +70 -0
- package/dist/model/Color.d.ts.map +1 -0
- package/dist/model/Color.js +119 -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 +337 -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 +19 -53
- package/etc/sarif-to-slack.api.md +161 -99
- package/jest.config.json +2 -2
- package/package.json +9 -9
- package/scripts/save-metadata.sh +15 -0
- package/src/Logger.ts +4 -0
- package/src/SarifToSlackClient.ts +202 -0
- package/src/SlackMessageBuilder.ts +35 -115
- package/src/System.ts +16 -0
- package/src/index.ts +47 -20
- package/src/model/Color.ts +201 -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 +19 -71
- 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 -102
- 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/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -11
- package/scripts/save-version.sh +0 -13
- package/src/Processors.ts +0 -68
- package/src/SarifToSlackService.ts +0 -115
- package/src/model/SarifModelPerRun.ts +0 -123
- package/src/model/SarifModelPerSarif.ts +0 -126
- package/src/model/types.ts +0 -50
- package/src/utils/SortUtils.ts +0 -33
- package/src/version.ts +0 -10
- package/tests/Processors.spec.ts +0 -76
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
GroupResultsBy,
|
|
2
|
+
Color,
|
|
4
3
|
LogLevel,
|
|
5
|
-
|
|
4
|
+
RepresentationType,
|
|
5
|
+
SarifToSlackClient,
|
|
6
|
+
SendIf
|
|
6
7
|
} from '../../src'
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
switch (groupBy) {
|
|
10
|
-
case 'Tool name': return GroupResultsBy.ToolName
|
|
11
|
-
case 'Run': return GroupResultsBy.Run
|
|
12
|
-
default: return GroupResultsBy.Total
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function calculateByMap(calculateBy?: string): CalculateResultsBy {
|
|
17
|
-
switch (calculateBy) {
|
|
18
|
-
case 'Level': return CalculateResultsBy.Level
|
|
19
|
-
default: return CalculateResultsBy.Severity
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
describe('(integration): SendSarifToSlack', () => {
|
|
9
|
+
describe('(integration): SendSarifToSlack', (): void => {
|
|
24
10
|
function processLogLevel(logLevel?: string): LogLevel | undefined {
|
|
25
11
|
if (!logLevel) {
|
|
26
12
|
return undefined
|
|
@@ -45,13 +31,97 @@ describe('(integration): SendSarifToSlack', () => {
|
|
|
45
31
|
}
|
|
46
32
|
}
|
|
47
33
|
|
|
34
|
+
function processRepresentationType(representation?: string): RepresentationType | undefined {
|
|
35
|
+
if (representation == null) {
|
|
36
|
+
return undefined
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
switch (representation.toLowerCase()) {
|
|
40
|
+
case 'compact-group-by-run-per-level':
|
|
41
|
+
return RepresentationType.CompactGroupByRunPerLevel
|
|
42
|
+
case 'compact-group-by-run-per-severity':
|
|
43
|
+
return RepresentationType.CompactGroupByRunPerSeverity
|
|
44
|
+
case 'compact-group-by-tool-name-per-level':
|
|
45
|
+
return RepresentationType.CompactGroupByToolNamePerLevel
|
|
46
|
+
case 'compact-group-by-tool-name-per-severity':
|
|
47
|
+
return RepresentationType.CompactGroupByToolNamePerSeverity
|
|
48
|
+
case 'compact-group-by-sarif-per-level':
|
|
49
|
+
return RepresentationType.CompactGroupBySarifPerLevel
|
|
50
|
+
case 'compact-group-by-sarif-per-severity':
|
|
51
|
+
return RepresentationType.CompactGroupBySarifPerSeverity
|
|
52
|
+
case 'compact-total-per-level':
|
|
53
|
+
return RepresentationType.CompactTotalPerLevel
|
|
54
|
+
case 'compact-total-per-severity':
|
|
55
|
+
return RepresentationType.CompactTotalPerSeverity
|
|
56
|
+
default:
|
|
57
|
+
return undefined
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function processSendIf(sendIf?: string): SendIf | undefined {
|
|
62
|
+
if (sendIf == null) {
|
|
63
|
+
return undefined
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
switch (sendIf.toLowerCase()) {
|
|
67
|
+
case 'severity-critical': return SendIf.SeverityCritical
|
|
68
|
+
case 'severity-high': return SendIf.SeverityHigh
|
|
69
|
+
case 'severity-high-or-higher': return SendIf.SeverityHighOrHigher
|
|
70
|
+
case 'severity-medium': return SendIf.SeverityMedium
|
|
71
|
+
case 'severity-medium-or-higher': return SendIf.SeverityMediumOrHigher
|
|
72
|
+
case 'severity-low': return SendIf.SeverityLow
|
|
73
|
+
case 'severity-low-or-higher': return SendIf.SeverityLowOrHigher
|
|
74
|
+
case 'severity-none': return SendIf.SeverityNone
|
|
75
|
+
case 'severity-none-or-higher': return SendIf.SeverityNoneOrHigher
|
|
76
|
+
case 'severity-unknown': return SendIf.SeverityUnknown
|
|
77
|
+
case 'severity-unknown-or-higher': return SendIf.SeverityUnknownOrHigher
|
|
78
|
+
case 'level-error': return SendIf.LevelError
|
|
79
|
+
case 'level-warning': return SendIf.LevelWarning
|
|
80
|
+
case 'level-warning-or-higher': return SendIf.LevelWarningOrHigher
|
|
81
|
+
case 'level-note': return SendIf.LevelNote
|
|
82
|
+
case 'level-note-or-higher': return SendIf.LevelNoteOrHigher
|
|
83
|
+
case 'level-none': return SendIf.LevelNone
|
|
84
|
+
case 'level-none-or-higher': return SendIf.LevelNoneOrHigher
|
|
85
|
+
case 'level-unknown': return SendIf.LevelUnknown
|
|
86
|
+
case 'level-unknown-or-higher': return SendIf.LevelUnknownOrHigher
|
|
87
|
+
case 'always': return SendIf.Always
|
|
88
|
+
case 'some': return SendIf.Some
|
|
89
|
+
case 'empty': return SendIf.Empty
|
|
90
|
+
case 'never': return SendIf.Never
|
|
91
|
+
default: return undefined
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
48
95
|
test('Should send Sarif to Slack', async () => {
|
|
49
|
-
const
|
|
96
|
+
const client: SarifToSlackClient = await SarifToSlackClient.create({
|
|
50
97
|
webhookUrl: process.env.SARIF_TO_SLACK_WEBHOOK_URL as string,
|
|
51
98
|
username: process.env.SARIF_TO_SLACK_USERNAME,
|
|
52
99
|
iconUrl: process.env.SARIF_TO_SLACK_ICON_URL,
|
|
53
|
-
color: process.env.SARIF_TO_SLACK_COLOR
|
|
54
|
-
|
|
100
|
+
color: process.env.SARIF_TO_SLACK_COLOR
|
|
101
|
+
? new Color(process.env.SARIF_TO_SLACK_COLOR)
|
|
102
|
+
: {
|
|
103
|
+
// byLevel: {
|
|
104
|
+
// error: new Color(process.env.SARIF_TO_SLACK_COLOR_ERROR),
|
|
105
|
+
// warning: new Color(process.env.SARIF_TO_SLACK_COLOR_WARNING),
|
|
106
|
+
// note: new Color(process.env.SARIF_TO_SLACK_COLOR_NOTE),
|
|
107
|
+
// none: new Color(process.env.SARIF_TO_SLACK_COLOR_NONE),
|
|
108
|
+
// unknown: new Color(process.env.SARIF_TO_SLACK_COLOR_UNKNOWN),
|
|
109
|
+
// empty: new Color(process.env.SARIF_TO_SLACK_COLOR_EMPTY),
|
|
110
|
+
// },
|
|
111
|
+
bySeverity: {
|
|
112
|
+
critical: new Color(process.env.SARIF_TO_SLACK_COLOR_CRITICAL),
|
|
113
|
+
high: new Color(process.env.SARIF_TO_SLACK_COLOR_HIGH),
|
|
114
|
+
medium: new Color(process.env.SARIF_TO_SLACK_COLOR_MEDIUM),
|
|
115
|
+
low: new Color(process.env.SARIF_TO_SLACK_COLOR_LOW),
|
|
116
|
+
none: new Color(process.env.SARIF_TO_SLACK_COLOR_NONE),
|
|
117
|
+
unknown: new Color(process.env.SARIF_TO_SLACK_COLOR_UNKNOWN),
|
|
118
|
+
empty: new Color(process.env.SARIF_TO_SLACK_COLOR_EMPTY),
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
sarif: {
|
|
122
|
+
path: process.env.SARIF_TO_SLACK_SARIF_PATH as string,
|
|
123
|
+
recursive: true,
|
|
124
|
+
},
|
|
55
125
|
log: {
|
|
56
126
|
level: processLogLevel(process.env.SARIF_TO_SLACK_LOG_LEVEL),
|
|
57
127
|
},
|
|
@@ -70,11 +140,9 @@ describe('(integration): SendSarifToSlack', () => {
|
|
|
70
140
|
run: {
|
|
71
141
|
include: Boolean(process.env.SARIF_TO_SLACK_INCLUDE_RUN),
|
|
72
142
|
},
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
calculateBy: calculateByMap(process.env.SARIF_TO_SLACK_CALCULATE_BY),
|
|
76
|
-
}
|
|
143
|
+
representation: processRepresentationType(process.env.SARIF_TO_SLACK_REPRESENTATION),
|
|
144
|
+
sendIf: processSendIf(process.env.SARIF_TO_SLACK_SEND_IF),
|
|
77
145
|
})
|
|
78
|
-
await
|
|
146
|
+
await client.send()
|
|
79
147
|
})
|
|
80
148
|
})
|
package/tsconfig.json
CHANGED
|
@@ -19,10 +19,12 @@
|
|
|
19
19
|
"newLine": "lf",
|
|
20
20
|
"noFallthroughCasesInSwitch": true,
|
|
21
21
|
"noImplicitAny": true,
|
|
22
|
+
"noImplicitOverride": true,
|
|
22
23
|
"noImplicitThis": true,
|
|
23
24
|
"noUnusedLocals": true,
|
|
24
25
|
"noUnusedParameters": true,
|
|
25
26
|
"outDir": "dist",
|
|
27
|
+
"resolveJsonModule": true,
|
|
26
28
|
"skipLibCheck": true,
|
|
27
29
|
"strict": true,
|
|
28
30
|
"stripInternal": true,
|
package/dist/Processors.d.ts
DELETED
package/dist/Processors.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Processors.d.ts","sourceRoot":"","sources":["../src/Processors.ts"],"names":[],"mappings":""}
|
package/dist/Processors.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import Logger from './Logger';
|
|
4
|
-
/**
|
|
5
|
-
* Processes a color string and converts it to a specific hex code if it matches
|
|
6
|
-
* a CI status identifier.
|
|
7
|
-
* @param color - The color string to process, which can be a CI status identifier
|
|
8
|
-
* or a custom color.
|
|
9
|
-
* @returns The processed color as a hex string or undefined if the input is not
|
|
10
|
-
* a recognized CI status identifier.
|
|
11
|
-
* @internal
|
|
12
|
-
*/
|
|
13
|
-
export function processColor(color) {
|
|
14
|
-
switch (color) {
|
|
15
|
-
case 'success':
|
|
16
|
-
Logger.info(`Converting "${color}" to #008000`);
|
|
17
|
-
return '#008000';
|
|
18
|
-
case 'failure':
|
|
19
|
-
Logger.info(`Converting "${color}" to #ff0000`);
|
|
20
|
-
return '#ff0000';
|
|
21
|
-
case 'cancelled':
|
|
22
|
-
Logger.info(`Converting "${color}" to #0047ab`);
|
|
23
|
-
return '#0047ab';
|
|
24
|
-
case 'skipped':
|
|
25
|
-
Logger.info(`Converting "${color}" to #808080`);
|
|
26
|
-
return '#808080';
|
|
27
|
-
default:
|
|
28
|
-
Logger.debug(`"${color}" color is not a CI status identifier. Returning as is.`);
|
|
29
|
-
return color;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Processes the SARIF path, which can be a file or a directory. If it's a
|
|
34
|
-
* directory, it returns an array of paths to all `.sarif` files, otherwise it
|
|
35
|
-
* returns an array with a single path to the file.
|
|
36
|
-
* @param sarifPath - The path to the SARIF file or directory.
|
|
37
|
-
* @returns An array of strings representing the paths to the SARIF files.
|
|
38
|
-
* @throws Error If the path does not exist, or if it is neither a file nor a
|
|
39
|
-
* directory.
|
|
40
|
-
* @internal
|
|
41
|
-
*/
|
|
42
|
-
export function processSarifPath(sarifPath) {
|
|
43
|
-
if (!fs.existsSync(sarifPath)) {
|
|
44
|
-
throw new Error(`"sarif-path" does not exist: ${sarifPath}`);
|
|
45
|
-
}
|
|
46
|
-
const sarifStats = fs.statSync(sarifPath);
|
|
47
|
-
if (sarifStats.isDirectory()) {
|
|
48
|
-
Logger.info(`"sarif-path" is a directory: ${sarifPath}`);
|
|
49
|
-
const files = fs.readdirSync(sarifPath);
|
|
50
|
-
const filteredFiles = files.filter((file) => path.extname(file).toLowerCase() === '.sarif');
|
|
51
|
-
Logger.info(`Found ${filteredFiles.length} SARIF files in ${sarifPath} directory`);
|
|
52
|
-
Logger.debug(`Filtered SARIF files: ${filteredFiles.join(', ')}`);
|
|
53
|
-
return filteredFiles.map((file) => path.join(sarifPath, file));
|
|
54
|
-
}
|
|
55
|
-
if (sarifStats.isFile()) {
|
|
56
|
-
Logger.info(`"sarif-path" is a file: ${sarifPath}`);
|
|
57
|
-
return [sarifPath];
|
|
58
|
-
}
|
|
59
|
-
throw new Error(`"sarif-path" is neither a file nor a directory: ${sarifPath}`);
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvY2Vzc29ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Qcm9jZXNzb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3hCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUU3Qjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYztJQUN6QyxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxTQUFTO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxDQUFDLENBQUE7WUFDL0MsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxTQUFTO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxDQUFDLENBQUE7WUFDL0MsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxXQUFXO1lBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxDQUFDLENBQUE7WUFDL0MsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxTQUFTO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxDQUFDLENBQUE7WUFDL0MsT0FBTyxTQUFTLENBQUE7UUFDbEI7WUFDRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyx5REFBeUQsQ0FBQyxDQUFBO1lBQ2hGLE9BQU8sS0FBSyxDQUFBO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFNBQWlCO0lBQ2hELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUVuRCxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDeEQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNqRCxNQUFNLGFBQWEsR0FBYSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQzlDLENBQUE7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsYUFBYSxDQUFDLE1BQU0sbUJBQW1CLFNBQVMsWUFBWSxDQUFDLENBQUE7UUFDbEYsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDakUsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDbkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxTQUFTLEVBQUUsQ0FBQyxDQUFBO0FBQ2pGLENBQUMifQ==
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { SarifToSlackServiceOptions, SlackMessage } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Service to convert SARIF files to Slack messages and send them.
|
|
4
|
-
* @public
|
|
5
|
-
*/
|
|
6
|
-
export declare class SarifToSlackService {
|
|
7
|
-
private readonly _slackMessages;
|
|
8
|
-
private constructor();
|
|
9
|
-
/**
|
|
10
|
-
* Gets the Slack messages prepared for each SARIF file.
|
|
11
|
-
* @returns A read-only map where keys are SARIF file paths and values are SlackMessage instances.
|
|
12
|
-
* @public
|
|
13
|
-
*/
|
|
14
|
-
get slackMessages(): ReadonlyMap<string, SlackMessage>;
|
|
15
|
-
/**
|
|
16
|
-
* Creates an instance of SarifToSlackService.
|
|
17
|
-
* @param opts - Options for the service, including webhook URL, SARIF path, and other configurations.
|
|
18
|
-
* @returns A promise that resolves to an instance of SarifToSlackService.
|
|
19
|
-
* @throws Error if no SARIF files are found at the provided path.
|
|
20
|
-
* @public
|
|
21
|
-
*/
|
|
22
|
-
static create(opts: SarifToSlackServiceOptions): Promise<SarifToSlackService>;
|
|
23
|
-
/**
|
|
24
|
-
* Sends all prepared Slack messages.
|
|
25
|
-
* @returns A promise that resolves when all messages have been sent.
|
|
26
|
-
* @throws Error if a Slack message was not prepared for a SARIF path.
|
|
27
|
-
* @public
|
|
28
|
-
*/
|
|
29
|
-
sendAll(): Promise<void>;
|
|
30
|
-
/**
|
|
31
|
-
* Sends a Slack message for a specific SARIF path.
|
|
32
|
-
* @param sarifPath - The path of the SARIF file for which the message should be sent.
|
|
33
|
-
* @returns A promise that resolves when the message has been sent.
|
|
34
|
-
* @throws Error if a Slack message was not prepared for the given SARIF path.
|
|
35
|
-
* @public
|
|
36
|
-
*/
|
|
37
|
-
send(sarifPath: string): Promise<void>;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=SarifToSlackService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SarifToSlackService.d.ts","sourceRoot":"","sources":["../src/SarifToSlackService.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,0BAA0B,EAC1B,YAAY,EACb,MAAM,SAAS,CAAA;AA4ChB;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAE3D,OAAO;IAIP;;;;OAIG;IACH,IAAW,aAAa,IAAI,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAE5D;IAED;;;;;;OAMG;WACiB,MAAM,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQ1F;;;;;OAKG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC;;;;;;OAMG;IACU,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQpD"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { promises as fs } from 'fs';
|
|
2
|
-
import Logger from './Logger';
|
|
3
|
-
import { processColor, processSarifPath } from './Processors';
|
|
4
|
-
import { SlackMessageBuilder } from './SlackMessageBuilder';
|
|
5
|
-
/**
|
|
6
|
-
* The main function to initialize a list of {@link SlackMessage} objects based
|
|
7
|
-
* on the given SARIF file(s).
|
|
8
|
-
* @param opts An instance of {@link SarifToSlackServiceOptions} object.
|
|
9
|
-
* @returns A map where key is the SARIF file and value is an instance of
|
|
10
|
-
* {@link SlackMessage} object
|
|
11
|
-
* @private
|
|
12
|
-
*/
|
|
13
|
-
async function initialize(opts) {
|
|
14
|
-
const slackMessages = new Map();
|
|
15
|
-
const sarifFiles = processSarifPath(opts.sarifPath);
|
|
16
|
-
if (sarifFiles.length === 0) {
|
|
17
|
-
throw new Error(`No SARIF files found at the provided path: ${opts.sarifPath}`);
|
|
18
|
-
}
|
|
19
|
-
for (const sarifFile of sarifFiles) {
|
|
20
|
-
const jsonString = await fs.readFile(sarifFile, 'utf8');
|
|
21
|
-
const messageBuilder = new SlackMessageBuilder(opts.webhookUrl, {
|
|
22
|
-
username: opts.username,
|
|
23
|
-
iconUrl: opts.iconUrl,
|
|
24
|
-
color: processColor(opts.color),
|
|
25
|
-
sarif: JSON.parse(jsonString),
|
|
26
|
-
output: opts.output,
|
|
27
|
-
});
|
|
28
|
-
if (opts.header?.include) {
|
|
29
|
-
messageBuilder.withHeader(opts.header?.value);
|
|
30
|
-
}
|
|
31
|
-
if (opts.footer?.include) {
|
|
32
|
-
messageBuilder.withFooter(opts.footer?.value, opts.footer?.type);
|
|
33
|
-
}
|
|
34
|
-
if (opts.actor?.include) {
|
|
35
|
-
messageBuilder.withActor(opts.actor?.value);
|
|
36
|
-
}
|
|
37
|
-
if (opts.run?.include) {
|
|
38
|
-
messageBuilder.withRun();
|
|
39
|
-
}
|
|
40
|
-
slackMessages.set(sarifFile, messageBuilder);
|
|
41
|
-
}
|
|
42
|
-
return slackMessages;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Service to convert SARIF files to Slack messages and send them.
|
|
46
|
-
* @public
|
|
47
|
-
*/
|
|
48
|
-
export class SarifToSlackService {
|
|
49
|
-
_slackMessages;
|
|
50
|
-
constructor() {
|
|
51
|
-
this._slackMessages = new Map();
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Gets the Slack messages prepared for each SARIF file.
|
|
55
|
-
* @returns A read-only map where keys are SARIF file paths and values are SlackMessage instances.
|
|
56
|
-
* @public
|
|
57
|
-
*/
|
|
58
|
-
get slackMessages() {
|
|
59
|
-
return this._slackMessages;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Creates an instance of SarifToSlackService.
|
|
63
|
-
* @param opts - Options for the service, including webhook URL, SARIF path, and other configurations.
|
|
64
|
-
* @returns A promise that resolves to an instance of SarifToSlackService.
|
|
65
|
-
* @throws Error if no SARIF files are found at the provided path.
|
|
66
|
-
* @public
|
|
67
|
-
*/
|
|
68
|
-
static async create(opts) {
|
|
69
|
-
Logger.initialize(opts.log);
|
|
70
|
-
const instance = new SarifToSlackService();
|
|
71
|
-
const map = await initialize(opts);
|
|
72
|
-
map.forEach((val, key) => instance._slackMessages.set(key, val));
|
|
73
|
-
return instance;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Sends all prepared Slack messages.
|
|
77
|
-
* @returns A promise that resolves when all messages have been sent.
|
|
78
|
-
* @throws Error if a Slack message was not prepared for a SARIF path.
|
|
79
|
-
* @public
|
|
80
|
-
*/
|
|
81
|
-
async sendAll() {
|
|
82
|
-
for (const sarifPath of this._slackMessages.keys()) {
|
|
83
|
-
await this.send(sarifPath);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Sends a Slack message for a specific SARIF path.
|
|
88
|
-
* @param sarifPath - The path of the SARIF file for which the message should be sent.
|
|
89
|
-
* @returns A promise that resolves when the message has been sent.
|
|
90
|
-
* @throws Error if a Slack message was not prepared for the given SARIF path.
|
|
91
|
-
* @public
|
|
92
|
-
*/
|
|
93
|
-
async send(sarifPath) {
|
|
94
|
-
const message = this._slackMessages.get(sarifPath);
|
|
95
|
-
if (!message) {
|
|
96
|
-
throw new Error(`Slack message was not prepared for SARIF path: ${sarifPath}.`);
|
|
97
|
-
}
|
|
98
|
-
const text = await message.send();
|
|
99
|
-
Logger.info(`Message sent for ${sarifPath} file. Status:`, text);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2FyaWZUb1NsYWNrU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TYXJpZlRvU2xhY2tTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBTzNEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQWdDO0lBQ3hELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFhLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM3RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDakYsQ0FBQztJQUVELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQVcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUUvRCxNQUFNLGNBQWMsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDOUQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFhO1lB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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SarifModelPerRun.d.ts","sourceRoot":"","sources":["../../src/model/SarifModelPerRun.ts"],"names":[],"mappings":""}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { findToolComponentByResult, tryGetRulePropertyByResult } from '../utils/SarifUtils';
|
|
2
|
-
import { SecurityLevel, SecuritySeverity } from './types';
|
|
3
|
-
import Logger from '../Logger';
|
|
4
|
-
import { Map as ImmutableMap } from 'immutable';
|
|
5
|
-
import { sortSecurityLevelMap, sortSecuritySeverityMap } from '../utils/SortUtils';
|
|
6
|
-
/**
|
|
7
|
-
* This class keeps information about results per run. It has 2 hash maps:
|
|
8
|
-
* - severity to number: the amount of results for each severity
|
|
9
|
-
* - level to number: the amount of results for each level
|
|
10
|
-
* @internal
|
|
11
|
-
*/
|
|
12
|
-
export class SarifModelPerRun {
|
|
13
|
-
toolName;
|
|
14
|
-
_securitySeverityMap;
|
|
15
|
-
_securityLevelMap;
|
|
16
|
-
constructor(run) {
|
|
17
|
-
this.toolName = findToolComponentByResult(run, run.results?.[0]).name;
|
|
18
|
-
this._securitySeverityMap = ImmutableMap().asMutable();
|
|
19
|
-
this._securityLevelMap = ImmutableMap().asMutable();
|
|
20
|
-
this.buildSecuritySeverityMap(run);
|
|
21
|
-
this.buildSecurityLevelMap(run);
|
|
22
|
-
}
|
|
23
|
-
identifySecuritySeverity(score) {
|
|
24
|
-
if (score === undefined) {
|
|
25
|
-
return SecuritySeverity.Unknown;
|
|
26
|
-
}
|
|
27
|
-
if (score >= 9 && score <= 10) {
|
|
28
|
-
return SecuritySeverity.Critical;
|
|
29
|
-
}
|
|
30
|
-
if (score >= 7) {
|
|
31
|
-
return SecuritySeverity.High;
|
|
32
|
-
}
|
|
33
|
-
if (score >= 4) {
|
|
34
|
-
return SecuritySeverity.Medium;
|
|
35
|
-
}
|
|
36
|
-
if (score >= 0.1) {
|
|
37
|
-
return SecuritySeverity.Low;
|
|
38
|
-
}
|
|
39
|
-
if (score == 0) {
|
|
40
|
-
return SecuritySeverity.None;
|
|
41
|
-
}
|
|
42
|
-
Logger.warn(`Unsupported "${score}" security severity. Saving as "Unknown".`);
|
|
43
|
-
return SecuritySeverity.Unknown;
|
|
44
|
-
}
|
|
45
|
-
identifySecurityLevel(level) {
|
|
46
|
-
if (level === undefined) {
|
|
47
|
-
return SecurityLevel.Unknown;
|
|
48
|
-
}
|
|
49
|
-
if (level.toLowerCase() === 'error') {
|
|
50
|
-
return SecurityLevel.Error;
|
|
51
|
-
}
|
|
52
|
-
if (level.toLowerCase() === 'warning') {
|
|
53
|
-
return SecurityLevel.Warning;
|
|
54
|
-
}
|
|
55
|
-
if (level.toLowerCase() === 'note') {
|
|
56
|
-
return SecurityLevel.Note;
|
|
57
|
-
}
|
|
58
|
-
Logger.warn(`Unsupported ${level} security level. Saving as "Unknown".`);
|
|
59
|
-
return SecurityLevel.Unknown;
|
|
60
|
-
}
|
|
61
|
-
buildSecuritySeverityMap(run) {
|
|
62
|
-
const results = run.results ?? [];
|
|
63
|
-
for (const result of results) {
|
|
64
|
-
const severity = this.identifySecuritySeverity(tryGetRulePropertyByResult(run, result, 'security-severity'));
|
|
65
|
-
const count = this._securitySeverityMap.get(severity) || 0;
|
|
66
|
-
this._securitySeverityMap.set(severity, count + 1);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
tryGetSecurityLevel(run, result) {
|
|
70
|
-
if (result.level) {
|
|
71
|
-
return result.level;
|
|
72
|
-
}
|
|
73
|
-
return tryGetRulePropertyByResult(run, result, 'problem.severity');
|
|
74
|
-
}
|
|
75
|
-
buildSecurityLevelMap(run) {
|
|
76
|
-
const results = run.results ?? [];
|
|
77
|
-
for (const result of results) {
|
|
78
|
-
const level = this.identifySecurityLevel(this.tryGetSecurityLevel(run, result));
|
|
79
|
-
const count = this._securityLevelMap.get(level) || 0;
|
|
80
|
-
this._securityLevelMap.set(level, count + 1);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
get securitySeverityMap() {
|
|
84
|
-
return sortSecuritySeverityMap(this._securitySeverityMap);
|
|
85
|
-
}
|
|
86
|
-
get securityLevelMap() {
|
|
87
|
-
return sortSecurityLevelMap(this._securityLevelMap);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2FyaWZNb2RlbFBlclJ1bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9TYXJpZk1vZGVsUGVyUnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzNCLE1BQU0scUJBQXFCLENBQUE7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN6RCxPQUFPLE1BQU0sTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDL0MsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1Qjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDWCxRQUFRLENBQVE7SUFFZixvQkFBb0IsQ0FBd0M7SUFDNUQsaUJBQWlCLENBQXFDO0lBRXZFLFlBQVksR0FBUTtRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFckUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksRUFBNEIsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxFQUF5QixDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRTFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVPLHdCQUF3QixDQUFDLEtBQWM7UUFDN0MsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUE7UUFD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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SarifModelPerSarif.d.ts","sourceRoot":"","sources":["../../src/model/SarifModelPerSarif.ts"],"names":[],"mappings":""}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { Map as ImmutableMap } from 'immutable';
|
|
2
|
-
import { SarifModelPerRun } from './SarifModelPerRun';
|
|
3
|
-
import { sortSecurityLevelMap, sortSecuritySeverityMap } from '../utils/SortUtils';
|
|
4
|
-
/**
|
|
5
|
-
* This class is used to group results by different fields, such as grouping by
|
|
6
|
-
* tool name, runs, etc.
|
|
7
|
-
* @internal
|
|
8
|
-
*/
|
|
9
|
-
export class SarifModelPerSarif {
|
|
10
|
-
sarifModelPerRunList;
|
|
11
|
-
constructor(sarif) {
|
|
12
|
-
this.sarifModelPerRunList = new Array();
|
|
13
|
-
this.buildRunsList(sarif);
|
|
14
|
-
}
|
|
15
|
-
buildRunsList(sarif) {
|
|
16
|
-
for (const run of sarif.runs) {
|
|
17
|
-
this.sarifModelPerRunList.push(new SarifModelPerRun(run));
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
groupByToolNameWithSecurityLevel() {
|
|
21
|
-
const result = new Map();
|
|
22
|
-
for (const sarifModelPerRun of this.sarifModelPerRunList) {
|
|
23
|
-
if (!result.has(sarifModelPerRun.toolName)) {
|
|
24
|
-
result.set(sarifModelPerRun.toolName, ImmutableMap().asMutable());
|
|
25
|
-
}
|
|
26
|
-
for (const [k, v] of sarifModelPerRun.securityLevelMap.entries()) {
|
|
27
|
-
const count = result.get(sarifModelPerRun.toolName)?.get(k) || 0;
|
|
28
|
-
result.get(sarifModelPerRun.toolName)?.set(k, count + v);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// Sort
|
|
32
|
-
for (const [k, v] of result) {
|
|
33
|
-
result.set(k, sortSecurityLevelMap(v));
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
groupByRunWithSecurityLevel() {
|
|
38
|
-
const result = new Array();
|
|
39
|
-
for (const sarifModelPerRun of this.sarifModelPerRunList) {
|
|
40
|
-
result.push({
|
|
41
|
-
toolName: sarifModelPerRun.toolName,
|
|
42
|
-
data: sarifModelPerRun.securityLevelMap,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
return result;
|
|
46
|
-
}
|
|
47
|
-
groupByTotalWithSecurityLevel() {
|
|
48
|
-
const result = ImmutableMap().asMutable();
|
|
49
|
-
for (const sarifModelPerRun of this.sarifModelPerRunList) {
|
|
50
|
-
for (const [k, v] of sarifModelPerRun.securityLevelMap.entries()) {
|
|
51
|
-
const count = result.get(k) || 0;
|
|
52
|
-
result.set(k, count + v);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return sortSecurityLevelMap(result);
|
|
56
|
-
}
|
|
57
|
-
groupByToolNameWithSecuritySeverity() {
|
|
58
|
-
const result = new Map();
|
|
59
|
-
for (const sarifModelPerRun of this.sarifModelPerRunList) {
|
|
60
|
-
if (!result.has(sarifModelPerRun.toolName)) {
|
|
61
|
-
result.set(sarifModelPerRun.toolName, ImmutableMap().asMutable());
|
|
62
|
-
}
|
|
63
|
-
for (const [k, v] of sarifModelPerRun.securitySeverityMap.entries()) {
|
|
64
|
-
const count = result.get(sarifModelPerRun.toolName)?.get(k) || 0;
|
|
65
|
-
result.get(sarifModelPerRun.toolName)?.set(k, count + v);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Sort
|
|
69
|
-
for (const [k, v] of result.entries()) {
|
|
70
|
-
result.set(k, sortSecuritySeverityMap(v));
|
|
71
|
-
}
|
|
72
|
-
return result;
|
|
73
|
-
}
|
|
74
|
-
groupByRunWithSecuritySeverity() {
|
|
75
|
-
const result = new Array();
|
|
76
|
-
for (const sarifModelPerRun of this.sarifModelPerRunList) {
|
|
77
|
-
result.push({
|
|
78
|
-
toolName: sarifModelPerRun.toolName,
|
|
79
|
-
data: sarifModelPerRun.securitySeverityMap,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
return result;
|
|
83
|
-
}
|
|
84
|
-
groupByTotalWithSecuritySeverity() {
|
|
85
|
-
const result = ImmutableMap().asMutable();
|
|
86
|
-
for (const sarifModelPerRun of this.sarifModelPerRunList) {
|
|
87
|
-
for (const [k, v] of sarifModelPerRun.securitySeverityMap.entries()) {
|
|
88
|
-
const count = result.get(k) || 0;
|
|
89
|
-
result.set(k, count + v);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return sortSecuritySeverityMap(result);
|
|
93
|
-
}
|
|
94
|
-
listToolNames() {
|
|
95
|
-
const toolNames = new Set();
|
|
96
|
-
for (const sarifModelPerRun of this.sarifModelPerRunList) {
|
|
97
|
-
toolNames.add(sarifModelPerRun.toolName);
|
|
98
|
-
}
|
|
99
|
-
return toolNames;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2FyaWZNb2RlbFBlclNhcmlmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL1NhcmlmTW9kZWxQZXJTYXJpZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxJQUFJLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVyRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHVCQUF1QixFQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBWTVCOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ1osb0JBQW9CLENBQTBCO0lBRS9ELFlBQVksS0FBZTtRQUN6QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUE7UUFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWU7UUFDbkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFTSxnQ0FBZ0M7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQStDLENBQUE7UUFDckUsS0FBSyxNQUFNLGdCQUFnQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBeUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1lBQzFGLENBQUM7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
|
package/dist/model/types.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":""}
|