Name
sn_vsc.ScanComparisonUtil
Description
No description available
Script
var ScanComparisonUtil = Class.create();
ScanComparisonUtil.prototype = {
constants: new sn_vsc.SecurityCenterConstants(),
initialize: function() {},
/*
*
*Input params (scanResult1 = first comparison result)
*Input params (scanResult2 = second comparison result)
*Check if comparison already exist, update user assignment respectively
*/
lookForComparison: function(scanResult1, scanResult2) {
var grR = new GlideRecord('scan_result');
grR.get(scanResult1);
var sr1 = grR.number;
var gr2 = new GlideRecord('scan_result');
gr2.get(scanResult2);
var sr2 = gr2.number;
var compId = sr1 + ',' + sr2;
var grUser = new GlideRecord("sn_vsc_scan_comparisons");
grUser.addQuery('scn_comp', compId);
grUser.query();
if (grUser.next()) { //Comparison found
if (!grUser.scn_list.toString().includes(gs.getUserID())) {
this.removeUserFromComparisons(gs.getUserID());
if (grUser.scn_list.toString() != '') {
grUser.scn_list = grUser.scn_list.toString() + ',' + gs.getUserID();
} else {
grUser.scn_list = gs.getUserID();
}
grUser.update();
}
} else { //Comparison not found
this.compareWithUserId(scanResult1, scanResult2);
}
},
/*
*
*Input params (timeStamp = dateTime for sys_created_on)
*check if result exist for given timestamp
*/
checkTableForResult: function(timeStamp) {
var date = timeStamp.split(" ")[0];
var time = timeStamp.split(" ")[1];
var gr = new GlideRecord('scan_result');
gr.addEncodedQuery("sys_created_onON" + date + "@javascript:gs.dateGenerate('" + date + "','" + time + "')@javascript:gs.dateGenerate('" + date + "','" + time + "')");
gr.query();
if (gr.next()) {
return gr.sys_id;
}
return null;
},
/*
*
*Input params (userId = user running comparison)
*Remove user from previous comparisons
*/
removeUserFromComparisons: function(userId) {
var gr = new GlideRecord("sn_vsc_scan_comparisons");
var eQ = "scn_listLIKE" + userId;
gr.addEncodedQuery(eQ);
gr.query();
while (gr.next()) {
var Uarr = gr.scn_list.split(",");
var index = Uarr.indexOf(userId.toString());
if (index !== -1) {
Uarr.splice(index, 1);
}
gr.scn_list = Uarr.toString();
gr.update();
}
},
/*
*Input params (scanId = sysId of scan result)
*Return Scan Result number
*/
getScanNumber: function(scanId) {
var gr = new GlideRecord('scan_result');
gr.get('sys_id', scanId);
gr.query();
return gr.next() ? gr.number : null;
},
/*
*Triggered upon Auditor Scan suite execution
*/
defaultComparison: function() {
var gr = new GlideRecord('scan_suite_execution');
gr.addQuery('suite', this.constants.HardeningSuite);
gr.orderByDesc('sys_created_on');
gr.query();
if (gr.getRowCount() > 1) {
var count = 2;
var suiteIds = [];
while (gr.next() && count > 0) {
count--;
suiteIds.push(gr.result.toString());
}
var gU = new GlideRecord("sn_vsc_scan_comparisons");
gU.addQuery('scn_default', true);
gU.query();
while (gU.next()) {
gU.scn_default = false;
gU.update();
}
var com = this.createScanComparison(suiteIds[1], suiteIds[0], " ", this.constants.HardeningSuite, true);
var scan = com + ',' + suiteIds[1] + ',' + suiteIds[0];
gs.eventQueue('sn_vsc.sec.scan.comparison', null, 'sn_vsc_changed_scan_findings', scan);
}
},
/*
*Input params (scanResult1 = first comparison result)
*Input params (scanResult2 = second comparison result)
*Run comparison for user
*/
compareWithUserId: function(scanResult1, scanResult2) {
var gr = new GlideRecord('scan_suite_execution');
gr.get('result', scanResult1);
//create new comparison
var compare = this.createScanComparison(scanResult1, scanResult2, gs.getUserID(), gr.suite, false);
var scan = compare + ',' + scanResult1 + ',' + scanResult2;
gs.eventQueue('sn_vsc.sec.scan.comparison', null, 'sn_vsc_changed_scan_findings', scan);
},
/*
*Input params (scanResult1 = first comparison result)
*Input params (scanResult2 = second comparison result)
*Input params (userId = Logged in user)
*Input params (suite = sysId of suite)
*Input params (isDefault = is this default comparison)
*Create comparison records
*/
createScanComparison: function(scanResult1, scanResult2, userId, suite, isDefault) {
if (userId != " ") {
this.removeUserFromComparisons(gs.getUserID());
}
var grR = new GlideRecord('scan_result');
grR.get(scanResult1);
var sr1 = grR.number;
var gr2 = new GlideRecord('scan_result');
gr2.get(scanResult2);
var sr2 = gr2.number;
var res = sr1 + ',' + sr2;
var grC = new GlideRecord('sn_vsc_scan_comparisons');
grC.initialize();
grC.setValue("scn_comp", res);
grC.setValue("scn_suite", suite);
if (userId != "") {
grC.setValue("scn_list", userId);
}
grC.setValue("scn_default", isDefault);
grC.setValue("scn_status", 'progress');
return grC.insert();
},
/*
*Input params (scanResult1 = first comparison result)
*Input params (scanResult2 = second comparison result)
*Input params (compare = Comparison record)
*Insert records
*/
runComparison: function(scanResult1, scanResult2, compare, scan1, scan2) {
var gFin = new GlideRecord('scan_finding');
gFin.addQuery('result', scanResult1);
gFin.query();
while (gFin.next()) {
var result = this.checkInResult(gFin.source, scanResult2);
if (result) {
var res = scan1 + ',' + scan2;
this.insertComparison(gFin.sys_id, res, compare);
} else {
this.insertComparison(gFin.sys_id, this.getScanNumber(scanResult1), compare);
}
}
},
/*
*Input params (scanResult1 = first comparison result)
*Input params (scanResult2 = second comparison result)
*Input params (compare = Comparison record)
*Insert records into chnaged findings table
*/
insertComparison: function(finding, result, compare) {
var gInsert = new GlideRecord('sn_vsc_changed_scan_findings');
gInsert.initialize();
gInsert.fin_finding = finding;
gInsert.fin_status = result;
gInsert.fin_comp = compare;
gInsert.insert();
},
/*
*Input params (source = source of finding)
*Input params (scanResult = result to compare)
*Input params (compare = Comparison record)
*Check if finding already exist in other result
*/
checkInResult: function(source, scanResult) {
var gFin = new GlideRecord('scan_finding');
gFin.addQuery('result', scanResult);
gFin.addQuery('source', source);
gFin.query();
if (gFin.next()) {
return true;
} else {
return false;
}
},
/*
*Input params (uId = logged in user)
*Assign default comparison to logged in user
*/
loginEvent: function(uId) {
var gC = new GlideRecord("sn_vsc_scan_comparisons");
gC.query();
if (gC.getRowCount() > 0) {
this.removeUserFromComparisons(uId);
}
},
type: 'ScanComparisonUtil'
};
Sys ID
2742283b53305110dd8eddeeff7b124f