@mitre/hdf-converters 2.6.1 → 2.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,196 @@
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.SonarQubeMapper = exports.SonarQubeResults = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const inspecjs_1 = require("inspecjs");
9
+ const package_json_1 = require("../package.json");
10
+ const base_converter_1 = require("./base-converter");
11
+ const CweNistMapping_1 = require("./mappings/CweNistMapping");
12
+ const OwaspNistMapping_1 = require("./mappings/OwaspNistMapping");
13
+ const IMPACT_MAPPING = new Map([
14
+ ['blocker', 1.0],
15
+ ['critical', 0.7],
16
+ ['major', 0.5],
17
+ ['minor', 0.3],
18
+ ['info', 0.0]
19
+ ]);
20
+ const CWE_NIST_MAPPING = new CweNistMapping_1.CweNistMapping();
21
+ const OWASP_NIST_MAPPING = new OwaspNistMapping_1.OwaspNistMapping();
22
+ function formatCodeDesc(vulnerability) {
23
+ const typedVulnerability = vulnerability;
24
+ if (typedVulnerability.textRange) {
25
+ const snipHtml = `StartLine: ${typedVulnerability.textRange.startLine}, EndLine: ${typedVulnerability.textRange.endLine}<br>Code:<pre>${typedVulnerability.snip}</pre>`;
26
+ return `Path:${typedVulnerability.component}:${typedVulnerability.textRange.startLine}:${typedVulnerability.textRange.endLine} ${snipHtml}`;
27
+ }
28
+ else {
29
+ return '';
30
+ }
31
+ }
32
+ function parseNistTags(issue) {
33
+ var _a, _b;
34
+ const tags = [];
35
+ (_a = issue.sysTags) === null || _a === void 0 ? void 0 : _a.forEach((sysTag) => {
36
+ if (sysTag.toLowerCase().startsWith('owasp-')) {
37
+ const identifier = [
38
+ sysTag.toLowerCase().replace('owasp-', '').toUpperCase()
39
+ ];
40
+ tags.push(...OWASP_NIST_MAPPING.nistFilterNoDefault(identifier));
41
+ }
42
+ });
43
+ (_b = issue.summary.match(/CWE-\d\d\d?\d?\d?\d?\d/gi)) === null || _b === void 0 ? void 0 : _b.forEach((match) => {
44
+ tags.push(...CWE_NIST_MAPPING.nistFilter(match.split('-')[1]));
45
+ });
46
+ return tags;
47
+ }
48
+ class SonarQubeResults {
49
+ constructor(sonarQubeHost, projectId, userToken) {
50
+ this.data = {
51
+ issues: []
52
+ };
53
+ this.sonarQubeHost = '';
54
+ this.projectId = '';
55
+ this.userToken = '';
56
+ this.sonarQubeHost = sonarQubeHost;
57
+ this.projectId = projectId;
58
+ this.userToken = userToken;
59
+ }
60
+ async toHdf() {
61
+ return this.getProjectData();
62
+ }
63
+ async getProjectData() {
64
+ var _a, _b;
65
+ let paging = true;
66
+ let page = 1;
67
+ while (paging) {
68
+ await axios_1.default
69
+ .get(`${this.sonarQubeHost}/api/issues/search`, {
70
+ auth: { username: this.userToken, password: '' },
71
+ params: {
72
+ componentKeys: this.projectId,
73
+ types: 'VULNERABILITY',
74
+ p: page
75
+ }
76
+ })
77
+ .then(({ data }) => {
78
+ var _a;
79
+ if (data.issues) {
80
+ this.data.issues.push(...data.issues);
81
+ }
82
+ paging = ((_a = data.paging) === null || _a === void 0 ? void 0 : _a.total) === 100;
83
+ page += 1;
84
+ });
85
+ }
86
+ let requests = [];
87
+ (_a = this.data.issues) === null || _a === void 0 ? void 0 : _a.forEach((issue) => {
88
+ requests.push(axios_1.default.get(`${this.sonarQubeHost}/api/sources/raw`, {
89
+ auth: { username: this.userToken, password: '' },
90
+ params: {
91
+ key: issue.component
92
+ }
93
+ }));
94
+ });
95
+ await axios_1.default.all(requests).then(axios_1.default.spread((...responses) => {
96
+ responses.forEach((response, index) => {
97
+ var _a, _b;
98
+ this.data.issues[index].snip = response.data
99
+ .split('\n')
100
+ .slice(((_a = this.data.issues[index].textRange) === null || _a === void 0 ? void 0 : _a.startLine) - 3, ((_b = this.data.issues[index].textRange) === null || _b === void 0 ? void 0 : _b.endLine) + 3)
101
+ .join('\n');
102
+ });
103
+ }));
104
+ requests = [];
105
+ (_b = this.data.issues) === null || _b === void 0 ? void 0 : _b.forEach((issue) => {
106
+ requests.push(axios_1.default.get(`${this.sonarQubeHost}/api/rules/show`, {
107
+ auth: { username: this.userToken, password: '' },
108
+ params: {
109
+ key: issue.rule
110
+ }
111
+ }));
112
+ });
113
+ await axios_1.default.all(requests).then(axios_1.default.spread((...responses) => {
114
+ responses.forEach((response, index) => {
115
+ this.data.issues[index].sysTags = response.data.rule.sysTags;
116
+ this.data.issues[index].name = response.data.rule.name;
117
+ this.data.issues[index].summary = response.data.rule.htmlDesc;
118
+ });
119
+ }));
120
+ const result = new SonarQubeMapper(this.data, this.projectId);
121
+ return result.toHdf();
122
+ }
123
+ setMappings(customMapping) {
124
+ this.customMapping = customMapping;
125
+ }
126
+ }
127
+ exports.SonarQubeResults = SonarQubeResults;
128
+ class SonarQubeMapper extends base_converter_1.BaseConverter {
129
+ constructor(issuesJSON, projectName) {
130
+ super(issuesJSON);
131
+ this.projectName = '';
132
+ this.mappings = {
133
+ platform: {
134
+ name: 'Heimdall Tools',
135
+ release: package_json_1.version,
136
+ target_id: this.projectName
137
+ },
138
+ version: package_json_1.version,
139
+ statistics: {
140
+ duration: null
141
+ },
142
+ profiles: [
143
+ {
144
+ name: 'Sonarqube Scan',
145
+ version: '',
146
+ title: `SonarQube Scan of Project ${this.projectName}`,
147
+ maintainer: null,
148
+ summary: `SonarQube Scan of Project ${this.projectName}`,
149
+ license: null,
150
+ copyright: null,
151
+ copyright_email: null,
152
+ supports: [],
153
+ attributes: [],
154
+ depends: [],
155
+ groups: [],
156
+ status: 'loaded',
157
+ controls: [
158
+ {
159
+ path: 'issues',
160
+ key: 'id',
161
+ desc: { path: 'summary' },
162
+ descriptions: [],
163
+ refs: [],
164
+ source_location: {},
165
+ id: { path: 'rule' },
166
+ title: { path: 'name' },
167
+ impact: {
168
+ path: 'severity',
169
+ transformer: (0, base_converter_1.impactMapping)(IMPACT_MAPPING)
170
+ },
171
+ code: null,
172
+ tags: {
173
+ nist: { transformer: parseNistTags }
174
+ },
175
+ results: [
176
+ {
177
+ status: inspecjs_1.ExecJSON.ControlResultStatus.Failed,
178
+ code_desc: { transformer: formatCodeDesc },
179
+ run_time: 0,
180
+ start_time: ''
181
+ }
182
+ ]
183
+ }
184
+ ],
185
+ sha256: ''
186
+ }
187
+ ]
188
+ };
189
+ this.projectName = projectName;
190
+ }
191
+ setMappings(customMappings) {
192
+ super.setMappings(customMappings);
193
+ }
194
+ }
195
+ exports.SonarQubeMapper = SonarQubeMapper;
196
+ //# sourceMappingURL=sonarqube-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sonarqube-mapper.js","sourceRoot":"","sources":["../../src/sonarqube-mapper.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mitre/hdf-converters",
3
- "version": "2.6.1",
3
+ "version": "2.6.2",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Converter util library used to transform various scan results into HDF format",
6
6
  "files": [
@@ -16,20 +16,22 @@
16
16
  "build": "tsc -p ./tsconfig.build.json && cp -R ./data ./lib",
17
17
  "lint": "eslint \"**/*.ts\" --fix",
18
18
  "lint:ci": "eslint \"**/*.ts\" --max-warnings 0",
19
- "test": "jest --silent",
19
+ "test": "jest",
20
20
  "csv2json": "ts-node data/converters/csv2json.ts",
21
21
  "xml2json": "ts-node data/converters/xml2json.ts"
22
22
  },
23
23
  "dependencies": {
24
24
  "@types/csv2json": "^1.4.2",
25
25
  "@types/xml2js": "^0.4.9",
26
- "csv-parse": "^4.16.0",
26
+ "axios": "^0.24.0",
27
+ "csv-parse": "^5.0.1",
27
28
  "csv2json": "^2.0.2",
28
29
  "fast-xml-parser": "^3.19.0",
29
30
  "html-entities": "^2.3.2",
30
31
  "htmlparser2": "^7.1.2",
31
- "inspecjs": "^2.6.1",
32
+ "inspecjs": "^2.6.2",
32
33
  "lodash": "^4.17.21",
34
+ "moment": "^2.29.1",
33
35
  "xml2js": "^0.4.23"
34
36
  },
35
37
  "devDependencies": {