@mitre/hdf-converters 2.6.2 → 2.6.8
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/README.md +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/package.json +5 -4
- package/lib/src/asff-mapper.d.ts +2 -2
- package/lib/src/asff-mapper.js +85 -33
- package/lib/src/asff-mapper.js.map +1 -1
- package/lib/src/aws-config-mapper.d.ts +28 -0
- package/lib/src/aws-config-mapper.js +369 -0
- package/lib/src/aws-config-mapper.js.map +1 -0
- package/lib/src/base-converter.d.ts +4 -3
- package/lib/src/base-converter.js +100 -63
- package/lib/src/base-converter.js.map +1 -1
- package/lib/src/burpsuite-mapper.js +1 -10
- package/lib/src/burpsuite-mapper.js.map +1 -1
- package/lib/src/converters-from-hdf/reverse-base-converter.js +12 -5
- package/lib/src/converters-from-hdf/reverse-base-converter.js.map +1 -1
- package/lib/src/dbprotect-mapper.js +1 -10
- package/lib/src/dbprotect-mapper.js.map +1 -1
- package/lib/src/fortify-mapper.js +1 -10
- package/lib/src/fortify-mapper.js.map +1 -1
- package/lib/src/nessus-mapper.js +1 -10
- package/lib/src/nessus-mapper.js.map +1 -1
- package/lib/src/netsparker-mapper.js +1 -10
- package/lib/src/netsparker-mapper.js.map +1 -1
- package/lib/src/xccdf-results-mapper.js +292 -89
- package/lib/src/xccdf-results-mapper.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AwsConfigMapper = void 0;
|
|
7
|
+
const aws_sdk_1 = __importDefault(require("aws-sdk"));
|
|
8
|
+
const https_1 = __importDefault(require("https"));
|
|
9
|
+
const inspecjs_1 = require("inspecjs");
|
|
10
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
11
|
+
const package_json_1 = require("../package.json");
|
|
12
|
+
const AwsConfigMapping_1 = require("./mappings/AwsConfigMapping");
|
|
13
|
+
const NOT_APPLICABLE_MSG = 'No AWS resources found to evaluate compliance for this rule';
|
|
14
|
+
const INSUFFICIENT_DATA_MSG = 'Not enough data has been collected to determine compliance yet.';
|
|
15
|
+
const NAME = 'AWS Config';
|
|
16
|
+
const AWS_CONFIG_MAPPING = new AwsConfigMapping_1.AwsConfigMapping();
|
|
17
|
+
class AwsConfigMapper {
|
|
18
|
+
constructor(options, verifySSLCertificates = true) {
|
|
19
|
+
aws_sdk_1.default.config.update({
|
|
20
|
+
httpOptions: {
|
|
21
|
+
agent: new https_1.default.Agent({
|
|
22
|
+
rejectUnauthorized: verifySSLCertificates
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
this.configService = new aws_sdk_1.default.ConfigService(options);
|
|
27
|
+
this.results = [];
|
|
28
|
+
this.issues = this.getAllConfigRules();
|
|
29
|
+
}
|
|
30
|
+
delay(ms) {
|
|
31
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
32
|
+
}
|
|
33
|
+
async getAllConfigRules() {
|
|
34
|
+
let params = {
|
|
35
|
+
ConfigRuleNames: [],
|
|
36
|
+
NextToken: ''
|
|
37
|
+
};
|
|
38
|
+
const configRules = [];
|
|
39
|
+
let response = await this.getConfigRulePage(params);
|
|
40
|
+
if (response.ConfigRules === undefined) {
|
|
41
|
+
throw new Error('No data was returned');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
while (response !== undefined && response.ConfigRules !== undefined) {
|
|
45
|
+
response.ConfigRules.forEach((rule) => {
|
|
46
|
+
configRules.push(rule);
|
|
47
|
+
});
|
|
48
|
+
if (response.NextToken) {
|
|
49
|
+
params = lodash_1.default.set(params, 'NextToken', response.NextToken);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
response = await this.getConfigRulePage(params);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
this.results = await this.getResults(configRules);
|
|
58
|
+
return configRules;
|
|
59
|
+
}
|
|
60
|
+
chunkArray(sourceArray, chunkSize) {
|
|
61
|
+
const result = [];
|
|
62
|
+
for (let i = 0; i < sourceArray.length; i += chunkSize) {
|
|
63
|
+
result.push(sourceArray.slice(i, i + chunkSize));
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
async getConfigRulePage(params) {
|
|
68
|
+
await this.delay(150);
|
|
69
|
+
return this.configService.describeConfigRules(params).promise();
|
|
70
|
+
}
|
|
71
|
+
async getResults(configRules) {
|
|
72
|
+
const complianceResults = await this.fetchAllComplianceInfo(configRules);
|
|
73
|
+
const ruleData = [];
|
|
74
|
+
const allRulesResolved = [];
|
|
75
|
+
for (const configRule of configRules) {
|
|
76
|
+
const result = [];
|
|
77
|
+
let params = {
|
|
78
|
+
ConfigRuleName: configRule.ConfigRuleName || '',
|
|
79
|
+
Limit: 100
|
|
80
|
+
};
|
|
81
|
+
await this.delay(150);
|
|
82
|
+
let response = await this.configService
|
|
83
|
+
.getComplianceDetailsByConfigRule(params)
|
|
84
|
+
.promise();
|
|
85
|
+
let ruleResults = response.EvaluationResults || [];
|
|
86
|
+
allRulesResolved.push(...ruleResults);
|
|
87
|
+
while (response.NextToken !== undefined) {
|
|
88
|
+
params = lodash_1.default.set(params, 'NextToken', response.NextToken);
|
|
89
|
+
await this.delay(150);
|
|
90
|
+
response = await this.configService
|
|
91
|
+
.getComplianceDetailsByConfigRule(params)
|
|
92
|
+
.promise();
|
|
93
|
+
ruleResults = ruleResults === null || ruleResults === void 0 ? void 0 : ruleResults.concat(response.EvaluationResults || []);
|
|
94
|
+
allRulesResolved.push(...ruleResults);
|
|
95
|
+
}
|
|
96
|
+
ruleResults.forEach((evaluation) => {
|
|
97
|
+
var _a, _b, _c;
|
|
98
|
+
const hdfResult = {
|
|
99
|
+
code_desc: this.getCodeDesc(evaluation),
|
|
100
|
+
start_time: ((_a = evaluation.ConfigRuleInvokedTime) === null || _a === void 0 ? void 0 : _a.toISOString()) || '',
|
|
101
|
+
run_time: this.getRunTime(evaluation),
|
|
102
|
+
status: this.getStatus(evaluation),
|
|
103
|
+
message: this.getMessage(evaluation, this.getCodeDesc(evaluation), this.getStatus(evaluation))
|
|
104
|
+
};
|
|
105
|
+
result.push(hdfResult);
|
|
106
|
+
const currentDate = new Date().toISOString();
|
|
107
|
+
if (result.length === 0) {
|
|
108
|
+
switch ((_c = (_b = complianceResults.find((complianceResult) => complianceResult.ConfigRuleName === configRule.ConfigRuleName)) === null || _b === void 0 ? void 0 : _b.Compliance) === null || _c === void 0 ? void 0 : _c.ComplianceType) {
|
|
109
|
+
case 'NOT_APPLICABLE':
|
|
110
|
+
return [
|
|
111
|
+
{
|
|
112
|
+
run_time: 0,
|
|
113
|
+
code_desc: NOT_APPLICABLE_MSG,
|
|
114
|
+
skip_message: NOT_APPLICABLE_MSG,
|
|
115
|
+
start_time: currentDate,
|
|
116
|
+
status: inspecjs_1.ExecJSON.ControlResultStatus.Skipped
|
|
117
|
+
}
|
|
118
|
+
];
|
|
119
|
+
case 'INSUFFICIENT_DATA':
|
|
120
|
+
return [
|
|
121
|
+
{
|
|
122
|
+
run_time: 0,
|
|
123
|
+
code_desc: INSUFFICIENT_DATA_MSG,
|
|
124
|
+
skip_message: INSUFFICIENT_DATA_MSG,
|
|
125
|
+
start_time: currentDate,
|
|
126
|
+
status: inspecjs_1.ExecJSON.ControlResultStatus.Skipped
|
|
127
|
+
}
|
|
128
|
+
];
|
|
129
|
+
default:
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return ruleData.push(result);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return this.appendResourceNamesToResults(await Promise.all(ruleData), await this.extractResourceNamesFromIds(allRulesResolved));
|
|
139
|
+
}
|
|
140
|
+
async appendResourceNamesToResults(completedControlResults, extractedResourceNames) {
|
|
141
|
+
return completedControlResults.map((completedControlResult) => completedControlResult.map((completedControl) => {
|
|
142
|
+
for (const extractedResourceName in extractedResourceNames) {
|
|
143
|
+
if (completedControl.code_desc.indexOf(JSON.stringify(extractedResourceName)
|
|
144
|
+
.replace(/\"/gi, '')
|
|
145
|
+
.replace(/{/gi, '')
|
|
146
|
+
.replace(/}/gi, '')) !== -1) {
|
|
147
|
+
return {
|
|
148
|
+
...completedControl,
|
|
149
|
+
code_desc: `${completedControl.code_desc}, resource_name: ${extractedResourceNames[extractedResourceName]}`
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return completedControl;
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
async extractResourceNamesFromIds(evaluationResults) {
|
|
157
|
+
var _a;
|
|
158
|
+
const resourceMap = {};
|
|
159
|
+
const resolvedResourcesMap = {};
|
|
160
|
+
evaluationResults.forEach((result) => {
|
|
161
|
+
const resourceType = lodash_1.default.get(result, 'EvaluationResultIdentifier.EvaluationResultQualifier.ResourceType');
|
|
162
|
+
const resourceId = lodash_1.default.get(result, 'EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId');
|
|
163
|
+
if (!(resourceType in resourceMap)) {
|
|
164
|
+
resourceMap[resourceType] = [resourceId];
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
if (!resourceMap[resourceType].includes(resourceId) &&
|
|
168
|
+
typeof resourceId === 'string') {
|
|
169
|
+
resourceMap[resourceType].push(resourceId);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
for (const resourceType in resourceMap) {
|
|
174
|
+
const resourceIDSlices = this.chunkArray(resourceMap[resourceType], 20);
|
|
175
|
+
for (const slice of resourceIDSlices) {
|
|
176
|
+
await this.delay(150);
|
|
177
|
+
const resources = await this.configService
|
|
178
|
+
.listDiscoveredResources({
|
|
179
|
+
resourceType: resourceType,
|
|
180
|
+
resourceIds: slice
|
|
181
|
+
})
|
|
182
|
+
.promise();
|
|
183
|
+
(_a = resources.resourceIdentifiers) === null || _a === void 0 ? void 0 : _a.forEach((resource) => {
|
|
184
|
+
if (resource.resourceId && resource.resourceName) {
|
|
185
|
+
resolvedResourcesMap[resource.resourceId] = resource.resourceName;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return resolvedResourcesMap;
|
|
191
|
+
}
|
|
192
|
+
getCodeDesc(result) {
|
|
193
|
+
let output = '';
|
|
194
|
+
if (result.EvaluationResultIdentifier !== undefined &&
|
|
195
|
+
result.EvaluationResultIdentifier.EvaluationResultQualifier !== undefined) {
|
|
196
|
+
output = JSON.stringify(result.EvaluationResultIdentifier.EvaluationResultQualifier)
|
|
197
|
+
.replace(/\"/gi, '')
|
|
198
|
+
.replace(/{/gi, '')
|
|
199
|
+
.replace(/}/gi, '');
|
|
200
|
+
}
|
|
201
|
+
return output;
|
|
202
|
+
}
|
|
203
|
+
getRunTime(result) {
|
|
204
|
+
let diff = 0;
|
|
205
|
+
if (result.ResultRecordedTime !== undefined &&
|
|
206
|
+
result.ConfigRuleInvokedTime !== undefined) {
|
|
207
|
+
diff =
|
|
208
|
+
(result.ResultRecordedTime.getTime() -
|
|
209
|
+
result.ConfigRuleInvokedTime.getTime()) /
|
|
210
|
+
1000;
|
|
211
|
+
}
|
|
212
|
+
return diff;
|
|
213
|
+
}
|
|
214
|
+
getStatus(result) {
|
|
215
|
+
if (result.ComplianceType === 'COMPLIANT') {
|
|
216
|
+
return inspecjs_1.ExecJSON.ControlResultStatus.Passed;
|
|
217
|
+
}
|
|
218
|
+
else if (result.ComplianceType === 'NON_COMPLIANT') {
|
|
219
|
+
return inspecjs_1.ExecJSON.ControlResultStatus.Failed;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
return inspecjs_1.ExecJSON.ControlResultStatus.Skipped;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
getMessage(result, codeDesc, status) {
|
|
226
|
+
if (status === inspecjs_1.ExecJSON.ControlResultStatus.Failed) {
|
|
227
|
+
return `${codeDesc}: ${result.Annotation || 'Rule does not pass rule compliance'}`;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async fetchAllComplianceInfo(configRules) {
|
|
234
|
+
var _a;
|
|
235
|
+
const complianceResults = [];
|
|
236
|
+
const configRuleSlices = this.chunkArray(configRules, 25);
|
|
237
|
+
for (const slice of configRuleSlices) {
|
|
238
|
+
await this.delay(150);
|
|
239
|
+
const response = await this.configService
|
|
240
|
+
.describeComplianceByConfigRule({
|
|
241
|
+
ConfigRuleNames: slice.map((rule) => rule.ConfigRuleName || '')
|
|
242
|
+
})
|
|
243
|
+
.promise();
|
|
244
|
+
if (response.ComplianceByConfigRules === undefined) {
|
|
245
|
+
throw new Error('No compliance data was returned');
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
(_a = response.ComplianceByConfigRules) === null || _a === void 0 ? void 0 : _a.forEach((compliance) => complianceResults.push(compliance));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return complianceResults;
|
|
252
|
+
}
|
|
253
|
+
hdfTags(configRule) {
|
|
254
|
+
var _a;
|
|
255
|
+
let result = {};
|
|
256
|
+
const sourceIdentifier = (_a = configRule.Source) === null || _a === void 0 ? void 0 : _a.SourceIdentifier;
|
|
257
|
+
result = lodash_1.default.set(result, 'nist', []);
|
|
258
|
+
let defaultMatch = [];
|
|
259
|
+
if (sourceIdentifier !== undefined) {
|
|
260
|
+
defaultMatch = AWS_CONFIG_MAPPING.nistFilter([sourceIdentifier]);
|
|
261
|
+
}
|
|
262
|
+
if (Array.isArray(defaultMatch) && defaultMatch.length !== 0) {
|
|
263
|
+
result = lodash_1.default.set(result, 'nist', lodash_1.default.get(result, 'nist').concat(defaultMatch));
|
|
264
|
+
}
|
|
265
|
+
if (Array.isArray(lodash_1.default.get(result, 'nist')) &&
|
|
266
|
+
lodash_1.default.get(result, 'nist').length === 0) {
|
|
267
|
+
result = lodash_1.default.set(result, 'nist', ['unmapped']);
|
|
268
|
+
}
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
checkText(configRule) {
|
|
272
|
+
var _a;
|
|
273
|
+
let params = [];
|
|
274
|
+
if (configRule.InputParameters !== undefined &&
|
|
275
|
+
configRule.InputParameters !== '{}') {
|
|
276
|
+
params = configRule.InputParameters.replace(/{/gi, '')
|
|
277
|
+
.replace(/}/gi, '')
|
|
278
|
+
.split(',');
|
|
279
|
+
}
|
|
280
|
+
const checkText = [];
|
|
281
|
+
checkText.push(`ARN: ${configRule.ConfigRuleArn || 'N/A'}`);
|
|
282
|
+
checkText.push(`Source Identifier: ${((_a = configRule.Source) === null || _a === void 0 ? void 0 : _a.SourceIdentifier) || 'N/A'}`);
|
|
283
|
+
if (params.length !== 0) {
|
|
284
|
+
checkText.push(`${params.join('<br/>').replace(/\"/gi, '')}`);
|
|
285
|
+
}
|
|
286
|
+
return checkText.join('<br/>');
|
|
287
|
+
}
|
|
288
|
+
hdfDescriptions(configRule) {
|
|
289
|
+
return [
|
|
290
|
+
{
|
|
291
|
+
data: this.checkText(configRule),
|
|
292
|
+
label: 'check'
|
|
293
|
+
}
|
|
294
|
+
];
|
|
295
|
+
}
|
|
296
|
+
getAccountId(arn) {
|
|
297
|
+
const matches = arn.match(/:(\d{12}):config-rule/);
|
|
298
|
+
if (matches === null) {
|
|
299
|
+
return 'no-account-id';
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
return matches[0];
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
async getControls() {
|
|
306
|
+
let index = 0;
|
|
307
|
+
return (await this.issues).map((issue) => {
|
|
308
|
+
const control = {
|
|
309
|
+
id: issue.ConfigRuleId || '',
|
|
310
|
+
title: `${this.getAccountId(issue.ConfigRuleArn || '')} - ${issue.ConfigRuleName}`
|
|
311
|
+
.replace(/:/gi, '')
|
|
312
|
+
.replace(/config-rule/gi, ''),
|
|
313
|
+
desc: issue.Description || null,
|
|
314
|
+
impact: this.getImpact(issue),
|
|
315
|
+
tags: this.hdfTags(issue),
|
|
316
|
+
descriptions: this.hdfDescriptions(issue),
|
|
317
|
+
refs: [],
|
|
318
|
+
source_location: { ref: issue.ConfigRuleArn, line: 1 },
|
|
319
|
+
code: '',
|
|
320
|
+
results: this.results[index]
|
|
321
|
+
};
|
|
322
|
+
index++;
|
|
323
|
+
return control;
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
getImpact(issue) {
|
|
327
|
+
if (lodash_1.default.get(issue, 'compliance') === 'NOT_APPLICABLE') {
|
|
328
|
+
return 0;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
return 0.5;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
async toHdf() {
|
|
335
|
+
const hdf = {
|
|
336
|
+
platform: {
|
|
337
|
+
name: 'Heimdall Tools',
|
|
338
|
+
release: package_json_1.version,
|
|
339
|
+
target_id: ''
|
|
340
|
+
},
|
|
341
|
+
version: package_json_1.version,
|
|
342
|
+
statistics: {
|
|
343
|
+
duration: null
|
|
344
|
+
},
|
|
345
|
+
profiles: [
|
|
346
|
+
{
|
|
347
|
+
name: NAME,
|
|
348
|
+
version: '',
|
|
349
|
+
title: NAME,
|
|
350
|
+
maintainer: null,
|
|
351
|
+
summary: NAME,
|
|
352
|
+
license: null,
|
|
353
|
+
copyright: null,
|
|
354
|
+
copyright_email: null,
|
|
355
|
+
supports: [],
|
|
356
|
+
attributes: [],
|
|
357
|
+
depends: [],
|
|
358
|
+
groups: [],
|
|
359
|
+
status: 'loaded',
|
|
360
|
+
controls: await this.getControls(),
|
|
361
|
+
sha256: ''
|
|
362
|
+
}
|
|
363
|
+
]
|
|
364
|
+
};
|
|
365
|
+
return hdf;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
exports.AwsConfigMapper = AwsConfigMapper;
|
|
369
|
+
//# sourceMappingURL=aws-config-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-config-mapper.js","sourceRoot":"","sources":["../../src/aws-config-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExecJSON } from 'inspecjs';
|
|
2
2
|
export interface ILookupPath {
|
|
3
|
-
path?: string;
|
|
3
|
+
path?: string | string[];
|
|
4
4
|
transformer?: (value: any) => unknown;
|
|
5
5
|
arrayTransformer?: (value: unknown[], file: any) => unknown[];
|
|
6
6
|
key?: string;
|
|
@@ -16,6 +16,7 @@ export declare type MappedReform<T, U> = {
|
|
|
16
16
|
};
|
|
17
17
|
export declare function generateHash(data: string, algorithm?: string): string;
|
|
18
18
|
export declare function parseHtml(input: unknown): string;
|
|
19
|
+
export declare function parseXml(xml: string): Record<string, unknown>;
|
|
19
20
|
export declare function impactMapping(mapping: Map<string, number>): (severity: unknown) => number;
|
|
20
21
|
export declare class BaseConverter {
|
|
21
22
|
data: Record<string, unknown>;
|
|
@@ -30,6 +31,6 @@ export declare class BaseConverter {
|
|
|
30
31
|
convertInternal<T>(file: Record<string, unknown>, fields: T): MappedReform<T, ILookupPath>;
|
|
31
32
|
evaluate<T extends object>(file: Record<string, unknown>, v: Array<T> | T): T | Array<T> | MappedReform<T, ILookupPath>;
|
|
32
33
|
handleArray<T extends object>(file: Record<string, unknown>, v: Array<T & ILookupPath>): Array<T>;
|
|
33
|
-
handlePath(file: Record<string, unknown>, path: string): unknown;
|
|
34
|
-
hasPath(file: Record<string, unknown>, path: string): boolean;
|
|
34
|
+
handlePath(file: Record<string, unknown>, path: string | string[]): unknown;
|
|
35
|
+
hasPath(file: Record<string, unknown>, path: string | string[]): boolean;
|
|
35
36
|
}
|
|
@@ -22,8 +22,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.BaseConverter = exports.impactMapping = exports.parseHtml = exports.generateHash = void 0;
|
|
25
|
+
exports.BaseConverter = exports.impactMapping = exports.parseXml = exports.parseHtml = exports.generateHash = void 0;
|
|
26
26
|
const crypto_1 = require("crypto");
|
|
27
|
+
const fast_xml_parser_1 = __importDefault(require("fast-xml-parser"));
|
|
27
28
|
const htmlparser = __importStar(require("htmlparser2"));
|
|
28
29
|
const lodash_1 = __importDefault(require("lodash"));
|
|
29
30
|
function generateHash(data, algorithm = 'sha256') {
|
|
@@ -45,6 +46,15 @@ function parseHtml(input) {
|
|
|
45
46
|
return textData.join('');
|
|
46
47
|
}
|
|
47
48
|
exports.parseHtml = parseHtml;
|
|
49
|
+
function parseXml(xml) {
|
|
50
|
+
const options = {
|
|
51
|
+
attributeNamePrefix: '',
|
|
52
|
+
textNodeName: 'text',
|
|
53
|
+
ignoreAttributes: false
|
|
54
|
+
};
|
|
55
|
+
return fast_xml_parser_1.default.parse(xml, options);
|
|
56
|
+
}
|
|
57
|
+
exports.parseXml = parseXml;
|
|
48
58
|
function impactMapping(mapping) {
|
|
49
59
|
return (severity) => {
|
|
50
60
|
if (typeof severity === 'string' || typeof severity === 'number') {
|
|
@@ -145,89 +155,116 @@ class BaseConverter {
|
|
|
145
155
|
if (v.length === 0) {
|
|
146
156
|
return [];
|
|
147
157
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
output
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
158
|
+
const resultingData = [];
|
|
159
|
+
for (const lookupPath of v) {
|
|
160
|
+
if (lookupPath.path === undefined) {
|
|
161
|
+
const arrayTransformer = (_a = lookupPath.arrayTransformer) === null || _a === void 0 ? void 0 : _a.bind(this);
|
|
162
|
+
v = v.map((element) => {
|
|
163
|
+
return lodash_1.default.omit(element, ['arrayTransformer']);
|
|
164
|
+
});
|
|
165
|
+
let output = [];
|
|
166
|
+
v.forEach((element) => {
|
|
167
|
+
output.push(this.evaluate(file, element));
|
|
168
|
+
});
|
|
169
|
+
if (arrayTransformer !== undefined) {
|
|
170
|
+
if (Array.isArray(arrayTransformer)) {
|
|
171
|
+
output = arrayTransformer[0].apply(arrayTransformer[1], [
|
|
172
|
+
v,
|
|
173
|
+
this.data
|
|
174
|
+
]);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
output = arrayTransformer.apply(null, [output, this.data]);
|
|
178
|
+
}
|
|
166
179
|
}
|
|
180
|
+
resultingData.push(...output);
|
|
167
181
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
'arrayTransformer',
|
|
183
|
-
'key'
|
|
184
|
-
]);
|
|
185
|
-
});
|
|
186
|
-
if (arrayTransformer !== undefined) {
|
|
187
|
-
if (Array.isArray(arrayTransformer)) {
|
|
188
|
-
v = arrayTransformer[0].apply(arrayTransformer[1], [
|
|
189
|
-
v,
|
|
190
|
-
this.data
|
|
182
|
+
else {
|
|
183
|
+
const path = lookupPath.path;
|
|
184
|
+
const key = lookupPath.key;
|
|
185
|
+
const arrayTransformer = (_b = lookupPath.arrayTransformer) === null || _b === void 0 ? void 0 : _b.bind(this);
|
|
186
|
+
const transformer = (_c = lookupPath.transformer) === null || _c === void 0 ? void 0 : _c.bind(this);
|
|
187
|
+
if (this.hasPath(file, path)) {
|
|
188
|
+
const pathVal = this.handlePath(file, path);
|
|
189
|
+
if (Array.isArray(pathVal)) {
|
|
190
|
+
v = pathVal.map((element) => {
|
|
191
|
+
return lodash_1.default.omit(this.convertInternal(element, lookupPath), [
|
|
192
|
+
'path',
|
|
193
|
+
'transformer',
|
|
194
|
+
'arrayTransformer',
|
|
195
|
+
'key'
|
|
191
196
|
]);
|
|
197
|
+
});
|
|
198
|
+
if (arrayTransformer !== undefined) {
|
|
199
|
+
if (Array.isArray(arrayTransformer)) {
|
|
200
|
+
v = arrayTransformer[0].apply(arrayTransformer[1], [
|
|
201
|
+
v,
|
|
202
|
+
this.data
|
|
203
|
+
]);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
v = arrayTransformer.apply(null, [v, this.data]);
|
|
207
|
+
}
|
|
192
208
|
}
|
|
193
|
-
|
|
194
|
-
v =
|
|
209
|
+
if (key !== undefined) {
|
|
210
|
+
v = collapseDuplicates(v, key, this.collapseResults);
|
|
195
211
|
}
|
|
196
|
-
|
|
197
|
-
if (key !== undefined) {
|
|
198
|
-
v = collapseDuplicates(v, key, this.collapseResults);
|
|
199
|
-
}
|
|
200
|
-
return v;
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
if (transformer !== undefined) {
|
|
204
|
-
return [transformer(this.handlePath(file, path))];
|
|
212
|
+
resultingData.push(...v);
|
|
205
213
|
}
|
|
206
214
|
else {
|
|
207
|
-
|
|
215
|
+
if (transformer !== undefined) {
|
|
216
|
+
resultingData.push(transformer(this.handlePath(file, path)));
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
resultingData.push(this.handlePath(file, path));
|
|
220
|
+
}
|
|
208
221
|
}
|
|
209
222
|
}
|
|
210
223
|
}
|
|
211
|
-
else {
|
|
212
|
-
return [];
|
|
213
|
-
}
|
|
214
224
|
}
|
|
225
|
+
const uniqueResults = [];
|
|
226
|
+
resultingData.forEach((result) => {
|
|
227
|
+
if (!uniqueResults.some((uniqueResult) => lodash_1.default.isEqual(result, uniqueResult))) {
|
|
228
|
+
uniqueResults.push(result);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
return uniqueResults;
|
|
215
232
|
}
|
|
216
233
|
handlePath(file, path) {
|
|
217
|
-
|
|
218
|
-
|
|
234
|
+
let pathArray;
|
|
235
|
+
if (typeof path === 'string') {
|
|
236
|
+
pathArray = [path];
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
pathArray = path;
|
|
240
|
+
}
|
|
241
|
+
const index = lodash_1.default.findIndex(pathArray, (p) => this.hasPath(file, p));
|
|
242
|
+
if (index === -1) {
|
|
243
|
+
return '';
|
|
244
|
+
}
|
|
245
|
+
else if (pathArray[index].startsWith('$.')) {
|
|
246
|
+
return lodash_1.default.get(this.data, pathArray[index].slice(2)) || '';
|
|
219
247
|
}
|
|
220
248
|
else {
|
|
221
|
-
return lodash_1.default.get(file,
|
|
249
|
+
return lodash_1.default.get(file, pathArray[index]) || '';
|
|
222
250
|
}
|
|
223
251
|
}
|
|
224
252
|
hasPath(file, path) {
|
|
225
|
-
|
|
226
|
-
|
|
253
|
+
let pathArray;
|
|
254
|
+
if (typeof path === 'string') {
|
|
255
|
+
pathArray = [path];
|
|
227
256
|
}
|
|
228
257
|
else {
|
|
229
|
-
|
|
258
|
+
pathArray = path;
|
|
230
259
|
}
|
|
260
|
+
return lodash_1.default.some(pathArray, (p) => {
|
|
261
|
+
if (p.startsWith('$.')) {
|
|
262
|
+
return lodash_1.default.has(this.data, p.slice(2));
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
return lodash_1.default.has(file, p);
|
|
266
|
+
}
|
|
267
|
+
});
|
|
231
268
|
}
|
|
232
269
|
}
|
|
233
270
|
exports.BaseConverter = BaseConverter;
|