@fabasoad/sarif-to-slack 1.0.0 → 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/dist/index.cjs +15 -29
- package/dist/model/Color.d.ts +13 -3
- package/dist/model/Color.d.ts.map +1 -1
- package/dist/model/Color.js +16 -29
- package/dist/sarif-to-slack.d.ts +14 -4
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/etc/sarif-to-slack.api.md +2 -1
- package/package.json +1 -1
- package/src/model/Color.ts +29 -35
- package/src/types.ts +2 -2
- package/tests/integration/SendSarifToSlack.spec.ts +11 -11
package/dist/index.cjs
CHANGED
|
@@ -156,13 +156,7 @@ var Color = class {
|
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
};
|
|
159
|
-
function
|
|
160
|
-
return color != null && color instanceof Color;
|
|
161
|
-
}
|
|
162
|
-
function isColorOptions(color) {
|
|
163
|
-
return color != null;
|
|
164
|
-
}
|
|
165
|
-
function identifyColorCommon(findings, prop, none, unknown, color) {
|
|
159
|
+
function identifyColorCommon(findings, prop, none, unknown, color, defaultColor) {
|
|
166
160
|
if (color.none != null && findings.findByProperty(prop, none) != null) {
|
|
167
161
|
return color.none.value;
|
|
168
162
|
}
|
|
@@ -172,9 +166,9 @@ function identifyColorCommon(findings, prop, none, unknown, color) {
|
|
|
172
166
|
if (color.empty != null && findings.length === 0) {
|
|
173
167
|
return color.empty.value;
|
|
174
168
|
}
|
|
175
|
-
return
|
|
169
|
+
return defaultColor?.value;
|
|
176
170
|
}
|
|
177
|
-
function identifyColorBySeverity(findings, color) {
|
|
171
|
+
function identifyColorBySeverity(findings, color, defaultColor) {
|
|
178
172
|
if (color.critical != null && findings.findByProperty("severity", 5 /* Critical */) != null) {
|
|
179
173
|
return color.critical.value;
|
|
180
174
|
}
|
|
@@ -187,9 +181,9 @@ function identifyColorBySeverity(findings, color) {
|
|
|
187
181
|
if (color.low != null && findings.findByProperty("severity", 2 /* Low */) != null) {
|
|
188
182
|
return color.low.value;
|
|
189
183
|
}
|
|
190
|
-
return identifyColorCommon(findings, "severity", 1 /* None */, 0 /* Unknown */, color);
|
|
184
|
+
return identifyColorCommon(findings, "severity", 1 /* None */, 0 /* Unknown */, color, defaultColor);
|
|
191
185
|
}
|
|
192
|
-
function identifyColorByLevel(findings, color) {
|
|
186
|
+
function identifyColorByLevel(findings, color, defaultColor) {
|
|
193
187
|
if (color.error != null && findings.findByProperty("level", 4 /* Error */) != null) {
|
|
194
188
|
return color.error.value;
|
|
195
189
|
}
|
|
@@ -199,24 +193,16 @@ function identifyColorByLevel(findings, color) {
|
|
|
199
193
|
if (color.note != null && findings.findByProperty("level", 2 /* Note */) != null) {
|
|
200
194
|
return color.note.value;
|
|
201
195
|
}
|
|
202
|
-
return identifyColorCommon(findings, "level", 1 /* None */, 0 /* Unknown */, color);
|
|
196
|
+
return identifyColorCommon(findings, "level", 1 /* None */, 0 /* Unknown */, color, defaultColor);
|
|
203
197
|
}
|
|
204
|
-
function identifyColor(findings,
|
|
205
|
-
if (
|
|
206
|
-
return
|
|
198
|
+
function identifyColor(findings, colorOpts) {
|
|
199
|
+
if (colorOpts?.bySeverity != null) {
|
|
200
|
+
return identifyColorBySeverity(findings, colorOpts.bySeverity, colorOpts.default);
|
|
207
201
|
}
|
|
208
|
-
if (
|
|
209
|
-
return
|
|
210
|
-
}
|
|
211
|
-
if (isColorOptions(color)) {
|
|
212
|
-
if (color.bySeverity != null) {
|
|
213
|
-
return identifyColorBySeverity(findings, color.bySeverity);
|
|
214
|
-
}
|
|
215
|
-
if (color.byLevel != null) {
|
|
216
|
-
return identifyColorByLevel(findings, color.byLevel);
|
|
217
|
-
}
|
|
202
|
+
if (colorOpts?.byLevel != null) {
|
|
203
|
+
return identifyColorByLevel(findings, colorOpts.byLevel, colorOpts.default);
|
|
218
204
|
}
|
|
219
|
-
return
|
|
205
|
+
return colorOpts?.default?.value;
|
|
220
206
|
}
|
|
221
207
|
|
|
222
208
|
// src/SarifToSlackClient.ts
|
|
@@ -259,9 +245,9 @@ var Logger = class _Logger {
|
|
|
259
245
|
var import_webhook = require("@slack/webhook");
|
|
260
246
|
|
|
261
247
|
// src/metadata.json
|
|
262
|
-
var version = "1.
|
|
263
|
-
var sha = "
|
|
264
|
-
var buildAt = "2025-08-
|
|
248
|
+
var version = "1.1.0";
|
|
249
|
+
var sha = "cf8ff099965ca704d7e58bd11f6d4481f69e3125";
|
|
250
|
+
var buildAt = "2025-08-15T05:22:37Z";
|
|
265
251
|
|
|
266
252
|
// src/SlackMessageBuilder.ts
|
|
267
253
|
var SlackMessageBuilder = class {
|
package/dist/model/Color.d.ts
CHANGED
|
@@ -57,13 +57,23 @@ export type ColorGroupBySeverity = ColorGroupCommon & {
|
|
|
57
57
|
low?: Color;
|
|
58
58
|
};
|
|
59
59
|
/**
|
|
60
|
-
* Represents configuration of the color scheme. {@link ColorOptions.byLevel}
|
|
61
|
-
*
|
|
62
|
-
*
|
|
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
63
|
* @public
|
|
64
64
|
*/
|
|
65
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
|
+
*/
|
|
66
73
|
byLevel?: ColorGroupByLevel;
|
|
74
|
+
/**
|
|
75
|
+
* Color scheme for the findings where certain severity is presented.
|
|
76
|
+
*/
|
|
67
77
|
bySeverity?: ColorGroupBySeverity;
|
|
68
78
|
};
|
|
69
79
|
export {};
|
|
@@ -1 +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,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAA"}
|
|
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"}
|
package/dist/model/Color.js
CHANGED
|
@@ -47,13 +47,7 @@ export class Color {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
function
|
|
51
|
-
return color != null && color instanceof Color;
|
|
52
|
-
}
|
|
53
|
-
function isColorOptions(color) {
|
|
54
|
-
return color != null;
|
|
55
|
-
}
|
|
56
|
-
function identifyColorCommon(findings, prop, none, unknown, color) {
|
|
50
|
+
function identifyColorCommon(findings, prop, none, unknown, color, defaultColor) {
|
|
57
51
|
if (color.none != null && findings.findByProperty(prop, none) != null) {
|
|
58
52
|
return color.none.value;
|
|
59
53
|
}
|
|
@@ -63,9 +57,9 @@ function identifyColorCommon(findings, prop, none, unknown, color) {
|
|
|
63
57
|
if (color.empty != null && findings.length === 0) {
|
|
64
58
|
return color.empty.value;
|
|
65
59
|
}
|
|
66
|
-
return
|
|
60
|
+
return defaultColor?.value;
|
|
67
61
|
}
|
|
68
|
-
function identifyColorBySeverity(findings, color) {
|
|
62
|
+
function identifyColorBySeverity(findings, color, defaultColor) {
|
|
69
63
|
if (color.critical != null && findings.findByProperty('severity', SecuritySeverity.Critical) != null) {
|
|
70
64
|
return color.critical.value;
|
|
71
65
|
}
|
|
@@ -78,9 +72,9 @@ function identifyColorBySeverity(findings, color) {
|
|
|
78
72
|
if (color.low != null && findings.findByProperty('severity', SecuritySeverity.Low) != null) {
|
|
79
73
|
return color.low.value;
|
|
80
74
|
}
|
|
81
|
-
return identifyColorCommon(findings, 'severity', SecuritySeverity.None, SecuritySeverity.Unknown, color);
|
|
75
|
+
return identifyColorCommon(findings, 'severity', SecuritySeverity.None, SecuritySeverity.Unknown, color, defaultColor);
|
|
82
76
|
}
|
|
83
|
-
function identifyColorByLevel(findings, color) {
|
|
77
|
+
function identifyColorByLevel(findings, color, defaultColor) {
|
|
84
78
|
if (color.error != null && findings.findByProperty('level', SecurityLevel.Error) != null) {
|
|
85
79
|
return color.error.value;
|
|
86
80
|
}
|
|
@@ -90,30 +84,23 @@ function identifyColorByLevel(findings, color) {
|
|
|
90
84
|
if (color.note != null && findings.findByProperty('level', SecurityLevel.Note) != null) {
|
|
91
85
|
return color.note.value;
|
|
92
86
|
}
|
|
93
|
-
return identifyColorCommon(findings, 'level', SecurityLevel.None, SecurityLevel.Unknown, color);
|
|
87
|
+
return identifyColorCommon(findings, 'level', SecurityLevel.None, SecurityLevel.Unknown, color, defaultColor);
|
|
94
88
|
}
|
|
95
89
|
/**
|
|
96
90
|
* Makes an ultimate decision on what color should be Slack message. The decision
|
|
97
|
-
* is based on the provided {@param
|
|
91
|
+
* is based on the provided {@param colorOpts} parameter and {@param findings}
|
|
92
|
+
* list.
|
|
98
93
|
* @param findings An instance of {@link FindingsArray} object.
|
|
99
|
-
* @param
|
|
94
|
+
* @param colorOpts An instance of {@link ColorOptions} type.
|
|
100
95
|
* @internal
|
|
101
96
|
*/
|
|
102
|
-
export function identifyColor(findings,
|
|
103
|
-
if (
|
|
104
|
-
return
|
|
105
|
-
}
|
|
106
|
-
if (isColor(color)) {
|
|
107
|
-
return color.value;
|
|
97
|
+
export function identifyColor(findings, colorOpts) {
|
|
98
|
+
if (colorOpts?.bySeverity != null) {
|
|
99
|
+
return identifyColorBySeverity(findings, colorOpts.bySeverity, colorOpts.default);
|
|
108
100
|
}
|
|
109
|
-
if (
|
|
110
|
-
|
|
111
|
-
return identifyColorBySeverity(findings, color.bySeverity);
|
|
112
|
-
}
|
|
113
|
-
if (color.byLevel != null) {
|
|
114
|
-
return identifyColorByLevel(findings, color.byLevel);
|
|
115
|
-
}
|
|
101
|
+
if (colorOpts?.byLevel != null) {
|
|
102
|
+
return identifyColorByLevel(findings, colorOpts.byLevel, colorOpts.default);
|
|
116
103
|
}
|
|
117
|
-
return
|
|
104
|
+
return colorOpts?.default?.value;
|
|
118
105
|
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvQ29sb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUkxRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sS0FBSztJQUNDLE1BQU0sQ0FBUztJQUVoQzs7Ozs7Ozs7T0FRRztJQUNILFlBQW1CLEtBQWM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLGFBQWEsR0FBRyxvRUFBb0UsQ0FBQztZQUUzRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQWE7UUFDNUIsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sU0FBUyxDQUFBO1lBQ2xCLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQjtnQkFDRSxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7SUFD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
|
package/dist/sarif-to-slack.d.ts
CHANGED
|
@@ -131,13 +131,23 @@ declare type ColorGroupCommon = {
|
|
|
131
131
|
};
|
|
132
132
|
|
|
133
133
|
/**
|
|
134
|
-
* Represents configuration of the color scheme. {@link ColorOptions.byLevel}
|
|
135
|
-
*
|
|
136
|
-
*
|
|
134
|
+
* Represents configuration of the color scheme. If both {@link ColorOptions.byLevel}
|
|
135
|
+
* and {@link ColorOptions.bySeverity} are defined, then {@link ColorOptions.bySeverity}
|
|
136
|
+
* takes precedence.
|
|
137
137
|
* @public
|
|
138
138
|
*/
|
|
139
139
|
export declare type ColorOptions = {
|
|
140
|
+
/**
|
|
141
|
+
* Default color if specific color was not found. It is a fallback option.
|
|
142
|
+
*/
|
|
143
|
+
default?: Color;
|
|
144
|
+
/**
|
|
145
|
+
* Color scheme for the findings where certain level is presented.
|
|
146
|
+
*/
|
|
140
147
|
byLevel?: ColorGroupByLevel;
|
|
148
|
+
/**
|
|
149
|
+
* Color scheme for the findings where certain severity is presented.
|
|
150
|
+
*/
|
|
141
151
|
bySeverity?: ColorGroupBySeverity;
|
|
142
152
|
};
|
|
143
153
|
|
|
@@ -385,7 +395,7 @@ export declare type SarifToSlackClientOptions = {
|
|
|
385
395
|
sarif: SarifOptions;
|
|
386
396
|
username?: string;
|
|
387
397
|
iconUrl?: string;
|
|
388
|
-
color?:
|
|
398
|
+
color?: ColorOptions;
|
|
389
399
|
log?: LogOptions;
|
|
390
400
|
header?: IncludeAwareWithValueOptions;
|
|
391
401
|
footer?: FooterOptions;
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ColorOptions } from './model/Color';
|
|
2
2
|
/**
|
|
3
3
|
* Interface for a Slack message that can be sent.
|
|
4
4
|
* @public
|
|
@@ -332,7 +332,7 @@ export type SarifToSlackClientOptions = {
|
|
|
332
332
|
sarif: SarifOptions;
|
|
333
333
|
username?: string;
|
|
334
334
|
iconUrl?: string;
|
|
335
|
-
color?:
|
|
335
|
+
color?: ColorOptions;
|
|
336
336
|
log?: LogOptions;
|
|
337
337
|
header?: IncludeAwareWithValueOptions;
|
|
338
338
|
footer?: FooterOptions;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ export type ColorGroupBySeverity = ColorGroupCommon & {
|
|
|
29
29
|
|
|
30
30
|
// @public
|
|
31
31
|
export type ColorOptions = {
|
|
32
|
+
default?: Color;
|
|
32
33
|
byLevel?: ColorGroupByLevel;
|
|
33
34
|
bySeverity?: ColorGroupBySeverity;
|
|
34
35
|
};
|
|
@@ -107,7 +108,7 @@ export type SarifToSlackClientOptions = {
|
|
|
107
108
|
sarif: SarifOptions;
|
|
108
109
|
username?: string;
|
|
109
110
|
iconUrl?: string;
|
|
110
|
-
color?:
|
|
111
|
+
color?: ColorOptions;
|
|
111
112
|
log?: LogOptions;
|
|
112
113
|
header?: IncludeAwareWithValueOptions;
|
|
113
114
|
footer?: FooterOptions;
|
package/package.json
CHANGED
package/src/model/Color.ts
CHANGED
|
@@ -95,30 +95,33 @@ export type ColorGroupBySeverity = ColorGroupCommon & {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/**
|
|
98
|
-
* Represents configuration of the color scheme. {@link ColorOptions.byLevel}
|
|
99
|
-
*
|
|
100
|
-
*
|
|
98
|
+
* Represents configuration of the color scheme. If both {@link ColorOptions.byLevel}
|
|
99
|
+
* and {@link ColorOptions.bySeverity} are defined, then {@link ColorOptions.bySeverity}
|
|
100
|
+
* takes precedence.
|
|
101
101
|
* @public
|
|
102
102
|
*/
|
|
103
103
|
export type ColorOptions = {
|
|
104
|
+
/**
|
|
105
|
+
* Default color if specific color was not found. It is a fallback option.
|
|
106
|
+
*/
|
|
107
|
+
default?: Color,
|
|
108
|
+
/**
|
|
109
|
+
* Color scheme for the findings where certain level is presented.
|
|
110
|
+
*/
|
|
104
111
|
byLevel?: ColorGroupByLevel,
|
|
112
|
+
/**
|
|
113
|
+
* Color scheme for the findings where certain severity is presented.
|
|
114
|
+
*/
|
|
105
115
|
bySeverity?: ColorGroupBySeverity,
|
|
106
116
|
}
|
|
107
117
|
|
|
108
|
-
function isColor(color?: Color | ColorOptions): color is Color {
|
|
109
|
-
return color != null && color instanceof Color
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function isColorOptions(color?: Color | ColorOptions): color is ColorOptions {
|
|
113
|
-
return color != null
|
|
114
|
-
}
|
|
115
|
-
|
|
116
118
|
function identifyColorCommon<K extends keyof Finding>(
|
|
117
119
|
findings: FindingsArray,
|
|
118
120
|
prop: K,
|
|
119
121
|
none: Finding[K],
|
|
120
122
|
unknown: Finding[K],
|
|
121
|
-
color: ColorGroupCommon
|
|
123
|
+
color: ColorGroupCommon,
|
|
124
|
+
defaultColor?: Color
|
|
122
125
|
): string | undefined {
|
|
123
126
|
if (color.none != null && findings.findByProperty(prop, none) != null) {
|
|
124
127
|
return color.none.value
|
|
@@ -132,10 +135,10 @@ function identifyColorCommon<K extends keyof Finding>(
|
|
|
132
135
|
return color.empty.value
|
|
133
136
|
}
|
|
134
137
|
|
|
135
|
-
return
|
|
138
|
+
return defaultColor?.value
|
|
136
139
|
}
|
|
137
140
|
|
|
138
|
-
function identifyColorBySeverity(findings: FindingsArray, color: ColorGroupBySeverity): string | undefined {
|
|
141
|
+
function identifyColorBySeverity(findings: FindingsArray, color: ColorGroupBySeverity, defaultColor?: Color): string | undefined {
|
|
139
142
|
if (color.critical != null && findings.findByProperty('severity', SecuritySeverity.Critical) != null) {
|
|
140
143
|
return color.critical.value
|
|
141
144
|
}
|
|
@@ -152,10 +155,10 @@ function identifyColorBySeverity(findings: FindingsArray, color: ColorGroupBySev
|
|
|
152
155
|
return color.low.value
|
|
153
156
|
}
|
|
154
157
|
|
|
155
|
-
return identifyColorCommon(findings, 'severity', SecuritySeverity.None, SecuritySeverity.Unknown, color)
|
|
158
|
+
return identifyColorCommon(findings, 'severity', SecuritySeverity.None, SecuritySeverity.Unknown, color, defaultColor)
|
|
156
159
|
}
|
|
157
160
|
|
|
158
|
-
function identifyColorByLevel(findings: FindingsArray, color: ColorGroupByLevel): string | undefined {
|
|
161
|
+
function identifyColorByLevel(findings: FindingsArray, color: ColorGroupByLevel, defaultColor?: Color): string | undefined {
|
|
159
162
|
if (color.error != null && findings.findByProperty('level', SecurityLevel.Error) != null) {
|
|
160
163
|
return color.error.value
|
|
161
164
|
}
|
|
@@ -168,34 +171,25 @@ function identifyColorByLevel(findings: FindingsArray, color: ColorGroupByLevel)
|
|
|
168
171
|
return color.note.value
|
|
169
172
|
}
|
|
170
173
|
|
|
171
|
-
return identifyColorCommon(findings, 'level', SecurityLevel.None, SecurityLevel.Unknown, color)
|
|
174
|
+
return identifyColorCommon(findings, 'level', SecurityLevel.None, SecurityLevel.Unknown, color, defaultColor)
|
|
172
175
|
}
|
|
173
176
|
|
|
174
177
|
/**
|
|
175
178
|
* Makes an ultimate decision on what color should be Slack message. The decision
|
|
176
|
-
* is based on the provided {@param
|
|
179
|
+
* is based on the provided {@param colorOpts} parameter and {@param findings}
|
|
180
|
+
* list.
|
|
177
181
|
* @param findings An instance of {@link FindingsArray} object.
|
|
178
|
-
* @param
|
|
182
|
+
* @param colorOpts An instance of {@link ColorOptions} type.
|
|
179
183
|
* @internal
|
|
180
184
|
*/
|
|
181
|
-
export function identifyColor(findings: FindingsArray,
|
|
182
|
-
if (
|
|
183
|
-
return
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
if (isColor(color)) {
|
|
187
|
-
return color.value
|
|
185
|
+
export function identifyColor(findings: FindingsArray, colorOpts?: ColorOptions): string | undefined {
|
|
186
|
+
if (colorOpts?.bySeverity != null) {
|
|
187
|
+
return identifyColorBySeverity(findings, colorOpts.bySeverity, colorOpts.default)
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
if (
|
|
191
|
-
|
|
192
|
-
return identifyColorBySeverity(findings, color.bySeverity)
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
if (color.byLevel != null) {
|
|
196
|
-
return identifyColorByLevel(findings, color.byLevel)
|
|
197
|
-
}
|
|
190
|
+
if (colorOpts?.byLevel != null) {
|
|
191
|
+
return identifyColorByLevel(findings, colorOpts.byLevel, colorOpts.default)
|
|
198
192
|
}
|
|
199
193
|
|
|
200
|
-
return
|
|
194
|
+
return colorOpts?.default?.value
|
|
201
195
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Run } from 'sarif'
|
|
2
|
-
import {
|
|
2
|
+
import { ColorOptions } from './model/Color'
|
|
3
3
|
import FindingsArray from './model/FindingsArray'
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -346,7 +346,7 @@ export type SarifToSlackClientOptions = {
|
|
|
346
346
|
sarif: SarifOptions,
|
|
347
347
|
username?: string,
|
|
348
348
|
iconUrl?: string,
|
|
349
|
-
color?:
|
|
349
|
+
color?: ColorOptions,
|
|
350
350
|
log?: LogOptions,
|
|
351
351
|
header?: IncludeAwareWithValueOptions,
|
|
352
352
|
footer?: FooterOptions,
|
|
@@ -97,17 +97,16 @@ describe('(integration): SendSarifToSlack', (): void => {
|
|
|
97
97
|
webhookUrl: process.env.SARIF_TO_SLACK_WEBHOOK_URL as string,
|
|
98
98
|
username: process.env.SARIF_TO_SLACK_USERNAME,
|
|
99
99
|
iconUrl: process.env.SARIF_TO_SLACK_ICON_URL,
|
|
100
|
-
color:
|
|
101
|
-
|
|
102
|
-
: {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
// },
|
|
100
|
+
color: {
|
|
101
|
+
default: new Color(process.env.SARIF_TO_SLACK_COLOR),
|
|
102
|
+
byLevel: {
|
|
103
|
+
error: new Color(process.env.SARIF_TO_SLACK_COLOR_ERROR),
|
|
104
|
+
warning: new Color(process.env.SARIF_TO_SLACK_COLOR_WARNING),
|
|
105
|
+
note: new Color(process.env.SARIF_TO_SLACK_COLOR_NOTE),
|
|
106
|
+
none: new Color(process.env.SARIF_TO_SLACK_COLOR_NONE),
|
|
107
|
+
unknown: new Color(process.env.SARIF_TO_SLACK_COLOR_UNKNOWN),
|
|
108
|
+
empty: new Color(process.env.SARIF_TO_SLACK_COLOR_EMPTY),
|
|
109
|
+
},
|
|
111
110
|
bySeverity: {
|
|
112
111
|
critical: new Color(process.env.SARIF_TO_SLACK_COLOR_CRITICAL),
|
|
113
112
|
high: new Color(process.env.SARIF_TO_SLACK_COLOR_HIGH),
|
|
@@ -121,6 +120,7 @@ describe('(integration): SendSarifToSlack', (): void => {
|
|
|
121
120
|
sarif: {
|
|
122
121
|
path: process.env.SARIF_TO_SLACK_SARIF_PATH as string,
|
|
123
122
|
recursive: true,
|
|
123
|
+
extension: 'sarif',
|
|
124
124
|
},
|
|
125
125
|
log: {
|
|
126
126
|
level: processLogLevel(process.env.SARIF_TO_SLACK_LOG_LEVEL),
|