a
This commit is contained in:
@@ -0,0 +1,278 @@
|
||||
"use strict";
|
||||
|
||||
let AmountOfNonCompliantRules;
|
||||
let AmountOfCompliantRules;
|
||||
let TotalAmountOfRules;
|
||||
let QuantityCompliance;
|
||||
|
||||
let TotalAmountOfSeverityRules;
|
||||
let AmountOfFailedSeverityRules;
|
||||
let SeverityCompliance;
|
||||
|
||||
|
||||
const cssVars = getComputedStyle(document.documentElement);
|
||||
|
||||
const COLORS = {
|
||||
green: cssVars.getPropertyValue('--color-green').trim(),
|
||||
red: cssVars.getPropertyValue('--company-red').trim(),
|
||||
orange: cssVars.getPropertyValue('--color-orange').trim(),
|
||||
purple: cssVars.getPropertyValue('--color-purple').trim(),
|
||||
white: cssVars.getPropertyValue('--color-white').trim(),
|
||||
blue: cssVars.getPropertyValue('--color-blue').trim(),
|
||||
dark_gray: cssVars.getPropertyValue('--color-dark-gray').trim(),
|
||||
light_gray: cssVars.getPropertyValue('--color-light-gray').trim()
|
||||
};
|
||||
|
||||
function startConditions() {
|
||||
let isRiskScoreValue = document.getElementById("riskScore");
|
||||
let isMITREValue = document.getElementById("MITRE");
|
||||
|
||||
/* Default-Value: Display summary always at the beginning */
|
||||
document.getElementById("summary").style.display = "block";
|
||||
|
||||
/* Default-Value: Disable all other tabs at the beginning */
|
||||
document.getElementById("foundationData").style.display = "none";
|
||||
document.getElementById("references").style.display = "none";
|
||||
document.getElementById("settingsOverview").style.display = "none";
|
||||
|
||||
|
||||
/* document.getElementById("summaryBtn").style.backgroundColor = COLORS.orange;
|
||||
document.getElementById("foundationDataBtn").style.backgroundColor = 'transparent';
|
||||
document.getElementById("referenceBtn").style.backgroundColor = 'transparent';
|
||||
document.getElementById("settingsOverviewBtn").style.backgroundColor = 'transparent'; */
|
||||
|
||||
if (isRiskScoreValue != null) {
|
||||
document.getElementById("riskScore").style.display = "none";
|
||||
/* document.getElementById("riskScoreBtn").style.backgroundColor = 'transparent'; */
|
||||
/* Initialize necessary variables */
|
||||
|
||||
AmountOfNonCompliantRules = document.getElementById("AmountOfNonCompliantRules").textContent;
|
||||
AmountOfCompliantRules = document.getElementById("AmountOfCompliantRules").textContent;
|
||||
TotalAmountOfRules = document.getElementById("TotalAmountOfRules").textContent;
|
||||
QuantityCompliance = document.getElementById("QuantityCompliance").textContent;
|
||||
TotalAmountOfSeverityRules = document.getElementById("TotalAmountOfSeverityRules").textContent;
|
||||
AmountOfFailedSeverityRules = document.getElementById("AmountOfFailedSeverityRules").textContent;
|
||||
|
||||
calcDotPosition();
|
||||
let severityComplianceCollapseBtn = document.getElementById("severityComplianceCollapse");
|
||||
severityComplianceCollapseBtn.addEventListener("click", () => {
|
||||
if (document.getElementById("severityDetails").style.display == "none") {
|
||||
document.getElementById("severityDetails").style.display = "block";
|
||||
}
|
||||
else {
|
||||
document.getElementById("severityDetails").style.display = "none";
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (isMITREValue != null) {
|
||||
document.getElementById("MITRE").style.display = "none";
|
||||
document.getElementById("MITREBtn").style.backgroundColor = 'transparent';
|
||||
document.getElementById("CISA").style.display = "none";
|
||||
document.getElementById("CISABtn").style.backgroundColor = 'transparent';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let buttonNumber;
|
||||
|
||||
function clickButton(value) {
|
||||
buttonNumber = parseInt(value);
|
||||
|
||||
/* Disable all content */
|
||||
let tabContents = document.getElementsByClassName('tabContent');
|
||||
for (let i = 0; i < tabContents.length; i++) {
|
||||
tabContents.item(i).style.display = "none";
|
||||
}
|
||||
|
||||
/* Disable all buttons */
|
||||
let buttons = document.getElementsByClassName('navButton');
|
||||
for (let i = 0; i < buttons.length; i++) {
|
||||
/* buttons.item(i).style.backgroundColor = 'transparent'; */
|
||||
buttons.item(i).classList.remove("selectedNavButton");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Re-Enable fitting content / button */
|
||||
switch (buttonNumber) {
|
||||
case 1:
|
||||
document.getElementById("summary").style.display = "block";
|
||||
/* document.getElementById("summaryBtn").style.backgroundColor = COLORS.orange; */
|
||||
document.getElementById("summaryBtn").classList.add("selectedNavButton");
|
||||
break;
|
||||
case 2:
|
||||
document.getElementById("riskScore").style.display = "block";
|
||||
/* document.getElementById("riskScoreBtn").style.backgroundColor = COLORS.orange; */
|
||||
document.getElementById("riskScoreBtn").classList.add("selectedNavButton");
|
||||
calcDotPosition();
|
||||
break;
|
||||
case 3:
|
||||
document.getElementById("references").style.display = "block";
|
||||
/* document.getElementById("referenceBtn").style.backgroundColor = COLORS.orange; */
|
||||
document.getElementById("referenceBtn").classList.add("selectedNavButton");
|
||||
break;
|
||||
case 4:
|
||||
document.getElementById("settingsOverview").style.display = "block";
|
||||
/* document.getElementById("settingsOverviewBtn").style.backgroundColor = COLORS.orange; */
|
||||
document.getElementById("settingsOverviewBtn").classList.add("selectedNavButton");
|
||||
break;
|
||||
case 5:
|
||||
document.getElementById("foundationData").style.display = "block";
|
||||
/* document.getElementById("foundationDataBtn").style.backgroundColor = COLORS.orange; */
|
||||
document.getElementById("foundationDataBtn").classList.add("selectedNavButton");
|
||||
break;
|
||||
case 6:
|
||||
document.getElementById("MITRE").style.display = "block";
|
||||
/* document.getElementById("MITREBtn").style.backgroundColor = COLORS.orange; */
|
||||
document.getElementById("MITREBtn").classList.add("selectedNavButton");
|
||||
break;
|
||||
case 7:
|
||||
document.getElementById("CISA").style.display = "block";
|
||||
/* document.getElementById("CISABtn").style.backgroundColor = COLORS.orange; */
|
||||
document.getElementById("CISABtn").classList.add("selectedNavButton");
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Calculate the position of the dot inside the risk matrix;
|
||||
Will be calleed, after the user has clicked on Risk Score Button
|
||||
*/
|
||||
function calcDotPosition() {
|
||||
|
||||
|
||||
let dotRiskScoreTab = document.getElementById("dotRiskScoreTab");
|
||||
let dotSummaryTab = document.getElementById("dotSummaryTab");
|
||||
QuantityCompliance = parseFloat(QuantityCompliance);
|
||||
|
||||
let complianceValueQuantity = 0;
|
||||
let complianceValueSeverity = 0;
|
||||
|
||||
/*low quantity compliance*/
|
||||
if (80 < QuantityCompliance) {
|
||||
dotRiskScoreTab.style.gridColumnStart = 3;
|
||||
dotSummaryTab.style.gridColumnStart = 3;
|
||||
complianceValueQuantity = 1;
|
||||
}
|
||||
/*medium quantity compliance*/
|
||||
else if (65 < QuantityCompliance && QuantityCompliance < 80) {
|
||||
dotRiskScoreTab.style.gridColumnStart = 4;
|
||||
dotSummaryTab.style.gridColumnStart = 4;
|
||||
complianceValueQuantity = 2;
|
||||
}
|
||||
/*high quantity compliance*/
|
||||
else if (50 < QuantityCompliance && QuantityCompliance < 65) {
|
||||
dotRiskScoreTab.style.gridColumnStart = 5;
|
||||
dotSummaryTab.style.gridColumnStart = 5;
|
||||
complianceValueQuantity = 3;
|
||||
}
|
||||
/*critical quantity compliance*/
|
||||
else {
|
||||
dotRiskScoreTab.style.gridColumnStart = 6;
|
||||
dotSummaryTab.style.gridColumnStart = 6;
|
||||
complianceValueQuantity = 4;
|
||||
}
|
||||
|
||||
|
||||
SeverityCompliance = parseInt(AmountOfFailedSeverityRules);
|
||||
/*low severity compliance*/
|
||||
if (SeverityCompliance == 0) {
|
||||
dotRiskScoreTab.style.gridRowStart = 4;
|
||||
dotSummaryTab.style.gridRowStart = 4;
|
||||
complianceValueSeverity = 1;
|
||||
|
||||
|
||||
document.getElementById("complianceStatus").style.backgroundColor = COLORS.green;
|
||||
}
|
||||
/*critical severity compliance*/
|
||||
else {
|
||||
dotRiskScoreTab.style.gridRowStart = 1;
|
||||
dotSummaryTab.style.gridRowStart = 1;
|
||||
complianceValueSeverity = 4;
|
||||
document.getElementById("complianceStatus").style.backgroundColor = COLORS.red;
|
||||
}
|
||||
/* Unhide the dot now that it has been positioned */
|
||||
document.getElementById("dotSummaryTab").style.display = "inline-block";
|
||||
|
||||
let totalComplianceValue = Math.max(complianceValueQuantity, complianceValueSeverity);
|
||||
|
||||
let summary = "Current Risk Score on tested System: ";
|
||||
let riskResult = document.createElement("p");
|
||||
riskResult.style.display = "contents";
|
||||
if (totalComplianceValue == 1) {
|
||||
riskResult.innerText = "Low";
|
||||
riskResult.style.backgroundColor = "#548dd6";
|
||||
}
|
||||
else if (totalComplianceValue == 2) {
|
||||
riskResult.innerText = "Medium";
|
||||
riskResult.style.backgroundColor = "#ffc000";
|
||||
}
|
||||
else if (totalComplianceValue == 3) {
|
||||
riskResult.innerText = "High";
|
||||
riskResult.style.color = "white";
|
||||
riskResult.style.backgroundColor = "#cc0000";
|
||||
}
|
||||
else {
|
||||
riskResult.innerText = "Critical";
|
||||
riskResult.style.color = "white";
|
||||
riskResult.style.backgroundColor = "purple";
|
||||
}
|
||||
riskResult.style.display = "inline";
|
||||
riskResult.style.padding = "5px 10px";
|
||||
riskResult.style.borderRadius = "8px";
|
||||
riskResult.style.fontWeight = "bold";
|
||||
riskResult.style.margin = "auto";
|
||||
|
||||
let copyRiskResult = riskResult.cloneNode();
|
||||
copyRiskResult.innerText = riskResult.innerText;
|
||||
|
||||
document.getElementById("CurrentRiskScore").textContent = summary;
|
||||
document.getElementById("CurrentRiskScore").appendChild(riskResult);
|
||||
document.getElementById("CurrentRiskScoreRS").textContent = summary;
|
||||
document.getElementById("CurrentRiskScoreRS").appendChild(copyRiskResult);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
techniques are hidden or shown based on the status of the provided checkboxes and classes
|
||||
classes must be in a compatible format for document.querySelectorAll()
|
||||
examples with first all nodes in the 'orgMeasure' class and second all nodes that are in the 'MITRETechnique' but not in the 'mailVector' class:
|
||||
hideMitreTechniques(this, '.orgMeasure')
|
||||
hideMitreTechniques(this, '.MITRETechnique:not(.mailVector)')
|
||||
*/
|
||||
let activeFilter = new Array();
|
||||
function hideMitreTechniques(checkbox, classes) {
|
||||
let classElements = document.querySelectorAll(classes);
|
||||
if (checkbox.checked) {
|
||||
/* push the current classes into the activeFilter array to determine which filters are currently active. */
|
||||
activeFilter.push(classes);
|
||||
for (let i = 0; i < classElements.length; i++) {
|
||||
classElements[i].style.padding = '0.1em';
|
||||
|
||||
const children = classElements[i].querySelectorAll('*');
|
||||
for (let j = 0; j < children.length; j++) {
|
||||
children[j].style.display = 'none';
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
activeFilter.splice(activeFilter.indexOf(classes), 1);
|
||||
/* create an array from the classElements since it makes filtering easier. */
|
||||
let elementsToHide = Array.from(classElements);
|
||||
/* create an array that includes all elements from the remaining active filters */
|
||||
let elementsNotToHide = (activeFilter.length === 0) ? new Array() : Array.from(document.querySelectorAll(activeFilter));
|
||||
/* filter the elementsToHide array to retrieve and display only the elements that are not hidden by other filters */
|
||||
elementsToHide = elementsToHide.filter(element => !elementsNotToHide.includes(element));
|
||||
for (let i = 0; i < elementsToHide.length; i++) {
|
||||
elementsToHide[i].style.removeProperty('padding');
|
||||
const children = elementsToHide[i].querySelectorAll('*');
|
||||
for (let j = 0; j < children.length; j++) {
|
||||
children[j].style.removeProperty('display');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user