UNPKG

trivy-to-sonarqube

Version:

Generates a report for Sonarqube (generic issue import format) based on report trivy.

67 lines 2.53 kB
"use strict"; 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