Fix Atlas vulnerability response parsing — API returns arrays per host, not objects

This commit is contained in:
root
2026-04-27 16:21:19 +00:00
parent 06c6821d85
commit 623b57ca06

View File

@@ -3907,29 +3907,22 @@ function BulkAtlasModal({ selectedFindings, onClose, onSuccess }) {
const data = await res.json(); const data = await res.json();
if (cancelled) return; if (cancelled) return;
// Parse response — Atlas returns { host_id: { qualys_id: vulnObj, ... }, ... } // Parse response — Atlas returns { "host_id": [ { qualys_id, title, ... }, ... ], ... }
const qualysMap = new Map(); const qualysMap = new Map();
if (data && typeof data === 'object') { if (data && typeof data === 'object' && !Array.isArray(data)) {
const entries = Array.isArray(data) ? data : Object.entries(data); for (const [, vulnList] of Object.entries(data)) {
for (const entry of entries) { if (!Array.isArray(vulnList)) continue;
let vulns; for (const vuln of vulnList) {
if (Array.isArray(entry)) { const qid = vuln.qualys_id || vuln.sourceId;
vulns = entry[1]; if (!qid) continue;
} else if (typeof entry === 'object') { if (!qualysMap.has(qid)) {
vulns = entry; qualysMap.set(qid, {
} else continue; qualys_id: qid,
title: vuln.title || qid,
if (vulns && typeof vulns === 'object' && !Array.isArray(vulns)) { count: 1,
for (const [qid, vuln] of Object.entries(vulns)) { });
if (!qualysMap.has(qid)) { } else {
qualysMap.set(qid, { qualysMap.get(qid).count++;
qualys_id: qid,
title: vuln?.title || vuln?.vulnerability_title || qid,
count: 1,
});
} else {
qualysMap.get(qid).count++;
}
} }
} }
} }