trivy-to-sonarqube
Version:
Generates a report for Sonarqube (generic issue import format) based on report trivy.
67 lines • 2.53 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertReport = void 0;
const fs_1 = require("fs");
const path_1 = __importDefault(require("path"));
const ENGINE_ID = 'Trivy';
const VULNERABILITY = 'VULNERABILITY';
/**
* Convert Severity trivy to sonarqube
* @param {string} level
* @returns {SonarIssue["severity"]}
*/
function convertSeverity(level) {
switch (level) {
case 'HIGH':
return 'BLOCKER';
case 'LOW':
return 'MINOR';
case 'CRITICAL':
return 'CRITICAL';
case 'MEDIUM':
return 'MAJOR';
default:
return 'INFO';
}
}
async function convertReport(inputFile, outputFile) {
const reportBlob = await fs_1.promises.readFile(path_1.default.join(inputFile));
const report = JSON.parse(reportBlob.toString() || '{}');
const data = [];
for (const file of (report === null || report === void 0 ? void 0 : report.Results) || []) {
// if exists
for (const issue of (file === null || file === void 0 ? void 0 : file.Misconfigurations) || []) {
data.push({
engineId: ENGINE_ID,
ruleId: issue.ID,
primaryLocation: {
filePath: file.Target,
message: `${issue.ID} : ${issue.Message} => ${issue.Resolution} (${issue.PrimaryURL})`,
},
severity: convertSeverity(issue.Severity),
type: VULNERABILITY,
});
}
// if exists
for (const issue of (file === null || file === void 0 ? void 0 : file.Vulnerabilities) || []) {
data.push({
engineId: ENGINE_ID,
ruleId: issue.VulnerabilityID,
primaryLocation: {
filePath: file.Target,
message: `${issue.VulnerabilityID} : ${issue.Title} \n ${issue.InstalledVersion} => ${issue.FixedVersion} \n ${issue.Description} (${issue.PrimaryURL})`,
},
severity: convertSeverity(issue.Severity),
type: VULNERABILITY,
});
}
}
await fs_1.promises.writeFile(path_1.default.join(outputFile), JSON.stringify({ issues: data }, null, 2), {
flag: 'w',
});
}
exports.convertReport = convertReport;
//# sourceMappingURL=index.js.map