default/cve/script.js (205 lines of code) (raw):
var additionalTabs = {
advisoryTab: {
title: 'Advisory',
setValue: async function (j) {
if (pugRender && document.getElementById("render")) {
var cve_list = textUtil.deep_value(j, 'CNA_private.CVE_list');
if (cve_list && cve_list.length > 0) {
var cSet = new Set();
var cMap = {};
for (var d of cve_list) {
if (d.CVE) {
for (var x of d.CVE.match(/CVE-\d{4}-[a-zA-Z\d\._-]{4,}/igm)) {
cSet.add(x);
cMap[x] = {
impact: '',
summary: d.summary
}
}
}
}
if (cSet.size > 0) {
var r = await textUtil.getDocuments('nvd', Array.from(cSet), ['cve.CVE_data_meta', 'cve.description', 'impact']);
for (var c of r) {
var cveid = textUtil.deep_value(c, 'cve.CVE_data_meta.ID');
if (textUtil.deep_value(c, 'impact.baseMetricV3.cvssV3')) {
cMap[cveid].impact = {
cvss: c.impact.baseMetricV3.cvssV3
};
} else if (textUtil.deep_value(c, 'impact.baseMetricV2.cvssV2')) {
cMap[cveid].impact = {
cvss: c.impact.baseMetricV2.cvssV2
};
}
if (!cMap[cveid].summary) {
var title = textUtil.deep_value(c, 'cve.CVE_data_meta.TITLE');
cMap[cveid].summary = title ? title : textUtil.deep_value(c, 'cve.description.description_data')[0].value;
}
cSet.delete(cveid);
}
if (cSet.size > 0) {
var nr = await textUtil.getDocuments('cve', Array.from(cSet), ['body.CVE_data_meta', 'body.impact', 'body.description']);
for (c of nr) {
var cveid = textUtil.deep_value(c, 'body.CVE_data_meta.ID');
if (textUtil.deep_value(c, 'body.impact.cvss')) {
cMap[cveid].impact = c.body.impact;
}
if (!cMap[cveid].summary) {
var desc = textUtil.deep_value(c, 'body.description.description_data')[0].value;
cMap[cveid].summary = desc ? desc : textUtil.deep_value(c, 'body.CVE_data_meta.TITLE');
}
}
}
document.getElementById("render").innerHTML = pugRender({
renderTemplate: 'page',
doc: j,
getProductAffected: getProductAffected,
cmap: cMap,
});
} else {
document.getElementById("render").innerHTML = pugRender({
renderTemplate: 'page',
getProductAffected: getProductAffected,
doc: j
});
}
} else {
document.getElementById("render").innerHTML = pugRender({
renderTemplate: 'page',
getProductAffected: getProductAffected,
doc: j
});
}
}
}
},
mitreTab: {
title: 'MITRE-Preview',
setValue: function(j){
document.getElementById("mitreweb").innerHTML = pugRender({
renderTemplate: 'mitre',
doc: j
});
}
},
jsonTab: {
title: 'CVE-JSON',
setValue: function(j){
document.getElementById("outjson").textContent = textUtil.getMITREJSON(textUtil.reduceJSON(j));
}
}
}
function tweetJSON(event, link) {
var j = mainTabGroup.getValue();
if (!j){
event.preventDefault();
return;
}
var id = textUtil.deep_value(j, 'CVE_data_meta.ID');
var cvelist = textUtil.deep_value(j, 'CNA_private.CVE_list');
if(cvelist && cvelist.length > 0) {
id = '';
}
var aka = textUtil.deep_value(j, 'CVE_data_meta.AKA')
var text = id + ' ' + textUtil.deep_value(j, 'source.advisory') + ' '
+ textUtil.getBestTitle(j) + ' '
+ (aka? ' aka ' + aka : '');
text = text.replace(/ +(?= )/g,'');
link.href = 'https://twitter.com/intent/tweet?&text='
+ encodeURI(text)
+ '&url=' + encodeURI(textUtil.deep_value(j, 'references.reference_data.0.url'));
// + '&hashtags=' + encodeURI(id)
//via=vulnogram&hashtags=CVE
}
async function draftEmail(event, link, renderId) {
var subject = ''
if(typeof(mainTabGroup) !== 'undefined') {
var j = mainTabGroup.getValue();
if (!j){
event.preventDefault();
return;
}
var id = textUtil.deep_value(j, 'CVE_data_meta.ID');
var cvelist = textUtil.deep_value(j, 'CNA_private.CVE_list');
if(cvelist && cvelist.length > 0) {
id = '';
}
subject = id +' ' + textUtil.getBestTitle(j);
} else {
var t = document.getElementById(renderId).getElementsByTagName('h2')[0];
if(t) {
subject = t.textContent;
}
}
var emailBody = document.getElementById(renderId).innerText;
link.href="mailto:?subject=" + encodeURI(subject) + '&body=' + encodeURI(emailBody);
}
function loadCVE(value) {
var realId = value.match(/(CVE-(\d{4})-(\d{1,12})(\d{3}))/);
if (realId) {
var id = realId[1];
var year = realId[2];
var bucket = realId[3];
fetch('https://raw.githubusercontent.com/CVEProject/cvelist/master/' + year + '/' + bucket + 'xxx/' + id + '.json', {
method: 'GET',
credentials: 'omit',
headers: {
'Accept': 'application/json, text/plain, */*'
},
redirect: 'error'
})
.then(function (response) {
if (!response.ok) {
errMsg.textContent = "Failed to load valid CVE JSON";
infoMsg.textContent = "";
throw Error(id + ' ' + response.statusText);
}
return response.json();
})
.then(function (res) {
if (res.CVE_data_meta) {
loadJSON(res, id, "Loaded "+id+" from GIT!");
} else {
errMsg.textContent = "Failed to load valid CVE JSON";
infoMsg.textContent = "";
}
})
.catch(function (error) {
errMsg.textContent = error;
})
} else {
errMsg.textContent = "CVE ID required";
}
return false;
}
function getProductAffected(cve) {
var lines = [];
for (var vendor of cve.affects.vendor.vendor_data) {
var pstring = [];
for(var product of vendor.product.product_data) {
var versions = {};
var includePlatforms = true;
var platforms = {};
for (var version of product.version.version_data) {
if(version.version_affected && version.version_affected.indexOf('!') < 0 && version.version_affected.indexOf('?') < 0) {
versions[version.version_name] = 1;
if (version.platform == "all" || version.platform == "") {
includePlatforms = false;
}
if (includePlatforms && version.platform) {
var ps = version.platform.split(',');
for (var p of ps) {
platforms[p.trim()] = true;
}
}
}
}
pstring.push('This issue affects ' + product.product_name + ' ' +
Object.keys(versions).sort().join(", ")+ '.');
if(includePlatforms && (Object.keys(platforms).length > 0)) {
pstring.push('Affected platforms: ' + Object.keys(platforms).sort().join(', ') + '.');
}
}
lines.push(pstring.join(" "));
}
// ASF
var x = lines.join();
return x.replace(" .",".");
// END ASF
};