Merge pull request #317 from nsacyber/update-component-failure-highlight

[#316] Update component failure highlight
This commit is contained in:
Cyrus 2020-11-19 10:56:06 -05:00 committed by GitHub
commit d99bb1039c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 19 deletions

View File

@ -84,6 +84,7 @@ public class SupplyChainValidationServiceImpl implements SupplyChainValidationSe
private static final Logger LOGGER private static final Logger LOGGER
= LogManager.getLogger(SupplyChainValidationServiceImpl.class); = LogManager.getLogger(SupplyChainValidationServiceImpl.class);
private static final int VALUE_INDEX = 1;
/** /**
* Constructor. * Constructor.
@ -238,7 +239,8 @@ public class SupplyChainValidationServiceImpl implements SupplyChainValidationSe
String.format("%s%n%s", platformScv.getMessage(), String.format("%s%n%s", platformScv.getMessage(),
attributeScv.getMessage()))); attributeScv.getMessage())));
} }
componentFailures = attributeScv.getMessage(); componentFailures = updateUnmatchedComponents(
attributeScv.getMessage());
} }
pc.setDevice(device); pc.setDevice(device);
@ -270,6 +272,29 @@ public class SupplyChainValidationServiceImpl implements SupplyChainValidationSe
return summary; return summary;
} }
private String updateUnmatchedComponents(final String unmatchedString) {
StringBuilder updatedFailures = new StringBuilder();
String manufacturer = "";
String model = "";
for (String rows : unmatchedString.split(";")) {
for (String str : rows.split(",")) {
String[] manufacturerSplit;
String[] modelSplit;
if (str.contains("Manufacturer")) {
manufacturerSplit = str.split("=");
manufacturer = manufacturerSplit[VALUE_INDEX];
}
if (str.contains("Model")) {
modelSplit = str.split("=");
model = modelSplit[VALUE_INDEX];
}
}
updatedFailures.append(String.format("%s%s;", manufacturer, model));
}
return updatedFailures.toString();
}
/** /**
* This method is a sub set of the validate supply chain method and focuses * This method is a sub set of the validate supply chain method and focuses
* on the specific multibase validation check for a delta chain. This method * on the specific multibase validation check for a delta chain. This method

View File

@ -31,7 +31,6 @@ public final class CertificateStringMapBuilder {
private static final Logger LOGGER = private static final Logger LOGGER =
LogManager.getLogger(CertificateStringMapBuilder.class); LogManager.getLogger(CertificateStringMapBuilder.class);
private static final int SERIAL_INDEX = 1;
private CertificateStringMapBuilder() { private CertificateStringMapBuilder() {
@ -341,19 +340,7 @@ public final class CertificateStringMapBuilder {
//CPSuri //CPSuri
data.put("CPSuri", certificate.getCPSuri()); data.put("CPSuri", certificate.getCPSuri());
//component failure //component failure
StringBuilder savedFailures = new StringBuilder(); data.put("failures", certificate.getComponentFailures());
String[] serialSplit;
for (String s : certificate.getComponentFailures().split(",")) {
if (s.contains("Serial")) {
serialSplit = s.split("=");
if (serialSplit.length > SERIAL_INDEX) {
savedFailures.append(serialSplit[SERIAL_INDEX]);
} else {
savedFailures.append(s);
}
}
}
data.put("failures", savedFailures.toString());
//Get platform Configuration values and set map with it //Get platform Configuration values and set map with it
PlatformConfiguration platformConfiguration = certificate.getPlatformConfiguration(); PlatformConfiguration platformConfiguration = certificate.getPlatformConfiguration();

View File

@ -614,10 +614,11 @@
<div class="panel-body"> <div class="panel-body">
<div id="componentIdentifier" class="row"> <div id="componentIdentifier" class="row">
<c:forEach items="${initialData.componentsIdentifier}" var="component"> <c:forEach items="${initialData.componentsIdentifier}" var="component">
<c:set var="combined" value="${component.getComponentManufacturer()}${component.getComponentModel()}" scope="page"/>
<div class="component col col-md-4"> <div class="component col col-md-4">
<div class="panel panel-default"> <div class="panel panel-default">
<c:choose> <c:choose>
<c:when test="${fn:contains(initialData.failures, component.getComponentSerial()) && not empty fn:trim(component.getComponentSerial())}"> <c:when test="${fn:contains(initialData.failures, combined)}">
<div class="panel-heading" style="background-color: red; color: white"> <div class="panel-heading" style="background-color: red; color: white">
</c:when> </c:when>
<c:otherwise> <c:otherwise>

View File

@ -852,11 +852,11 @@ public final class SupplyChainCredentialValidator implements CredentialValidator
LOGGER.error(String.format("Platform Credential contained %d unmatched components:", LOGGER.error(String.format("Platform Credential contained %d unmatched components:",
pcUnmatchedComponents.size())); pcUnmatchedComponents.size()));
int umatchedComponentCounter = 1; int unmatchedComponentCounter = 1;
for (ComponentIdentifier unmatchedComponent : pcUnmatchedComponents) { for (ComponentIdentifier unmatchedComponent : pcUnmatchedComponents) {
LOGGER.error("Unmatched component " + umatchedComponentCounter++ + ": " LOGGER.error("Unmatched component " + unmatchedComponentCounter++ + ": "
+ unmatchedComponent); + unmatchedComponent);
sb.append(String.format("Manufacturer=%s, Model=%s, Serial=%s, Revision=%s%n", sb.append(String.format("Manufacturer=%s, Model=%s, Serial=%s, Revision=%s;%n",
unmatchedComponent.getComponentManufacturer(), unmatchedComponent.getComponentManufacturer(),
unmatchedComponent.getComponentModel(), unmatchedComponent.getComponentModel(),
unmatchedComponent.getComponentSerial(), unmatchedComponent.getComponentSerial(),