Skip to content

Commit

Permalink
Renamings, template changes and documentation #2887,
Browse files Browse the repository at this point in the history
- documented report model as class plantuml
- renamed some classes to make their meaning clearer
- changed templates: introduced and used more fragements
  to reduce redundant parts - easier for debugging
  • Loading branch information
de-jcup committed Feb 9, 2024
1 parent e9b3bc3 commit e7f49cc
Show file tree
Hide file tree
Showing 25 changed files with 889 additions and 794 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
// SPDX-License-Identifier: MIT
package com.mercedesbenz.sechub.commons.model;

import java.io.IOException;
import java.util.*;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ScanTypeSummaryDetailData {

private static final Logger LOG = LoggerFactory.getLogger(ScanTypeSummaryDetailData.class);

@JsonDeserialize(using = FindingSummaryDetailDataTreeMapDeserializer.class)
Map<String, ScanTypeSummaryFindingOverviewData> high = new TreeMap<>();

@JsonDeserialize(using = FindingSummaryDetailDataTreeMapDeserializer.class)
Map<String, ScanTypeSummaryFindingOverviewData> medium = new TreeMap<>();

@JsonDeserialize(using = FindingSummaryDetailDataTreeMapDeserializer.class)
Map<String, ScanTypeSummaryFindingOverviewData> low = new TreeMap<>();

/**
* Adds given finding to calculation data. Be aware: there is no duplication
* check
*
* @param finding the finding to inspect and add to calculation
*/
public void addToCalculation(SecHubFinding finding) {
switch (finding.getSeverity()) {
case HIGH, CRITICAL -> incrementSummary(high, finding);
case MEDIUM -> incrementSummary(medium, finding);
case UNCLASSIFIED, LOW, INFO -> incrementSummary(low, finding);
}
}

protected void incrementSummary(Map<String, ScanTypeSummaryFindingOverviewData> targetDetailMap, SecHubFinding finding) {
Integer cweId = finding.getCweId();
String name = finding.getName() != null ? finding.getName() : "no_name";

ScanTypeSummaryFindingOverviewData summaryDetailData = targetDetailMap.get(name);
if (summaryDetailData == null) {

summaryDetailData = new ScanTypeSummaryFindingOverviewData(cweId, name);
targetDetailMap.put(name, summaryDetailData);
}

summaryDetailData.incrementCount();
}

public List<ScanTypeSummaryFindingOverviewData> getHigh() {
return new ArrayList<>(high.values());
}

public List<ScanTypeSummaryFindingOverviewData> getMedium() {
return new ArrayList<>(medium.values());
}

public List<ScanTypeSummaryFindingOverviewData> getLow() {
return new ArrayList<>(low.values());
}

@JsonIgnoreProperties(ignoreUnknown = true)
public class ScanTypeSummaryFindingOverviewData {
private Integer cweId;
private String name;
private long count;

ScanTypeSummaryFindingOverviewData(Integer cweId, String name) {
this.cweId = cweId;
this.name = name;
}

public void incrementCount() {
this.count++;
}

public Integer getCweId() {
return cweId;
}

public String getName() {
return name;
}

public long getCount() {
return count;
}
}

private static class FindingSummaryDetailDataTreeMapDeserializer extends StdDeserializer<Map<String, ScanTypeSummaryFindingOverviewData>> {

private static final long serialVersionUID = 1L;

@SuppressWarnings("unused")
public FindingSummaryDetailDataTreeMapDeserializer() {
this(null);
}

protected FindingSummaryDetailDataTreeMapDeserializer(Class<?> vc) {
super(vc);
}

@Override
public TreeMap<String, ScanTypeSummaryFindingOverviewData> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
TreeMap<String, ScanTypeSummaryFindingOverviewData> treeMap = new TreeMap<>();
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
node.fields().forEachRemaining(entry -> {
try {
String key = entry.getKey();
ScanTypeSummaryFindingOverviewData value = entry.getValue().traverse(jsonParser.getCodec()).readValueAs(ScanTypeSummaryFindingOverviewData.class);
treeMap.put(key, value);
} catch (IOException e) {
LOG.debug("JSON deserialization failed \n" + e);
}
});
return treeMap;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,4 @@ public SecHubReportSummary getSummary() {
return summary;
}

public void setSummary(SecHubReportSummary summary) {
this.summary = summary;
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// SPDX-License-Identifier: MIT
package com.mercedesbenz.sechub.commons.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

/**
* Represents the report summary for one dedicated scan type
*
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class SecHubReportScanTypeSummary {

private long total = 0;

private long red = 0;
private long yellow = 0;
private long green = 0;

private ScanTypeSummaryDetailData details = new ScanTypeSummaryDetailData();

/**
* Adds finding data to calculated values. Be aware: There is no duplication check - If you add
* the same finding multiple times color counts, details etc. will increased multiple times!
*
* @param finding the finding to add
*/
public void addToCalculation(SecHubFinding finding) {

incrementColorCounts(finding);

details.addToCalculation(finding);
}

protected void incrementColorCounts(SecHubFinding finding) {
Severity severity = finding.getSeverity();

switch (severity) {
case HIGH, CRITICAL -> red++;
case MEDIUM -> yellow++;
case UNCLASSIFIED, INFO, LOW -> green++;
}
total++;
}

public long getTotal() {
return total;
}

public long getRed() {
return red;
}

public long getYellow() {
return yellow;
}

public long getGreen() {
return green;
}

public ScanTypeSummaryDetailData getDetails() {
return details;
}
}
Loading

0 comments on commit e7f49cc

Please sign in to comment.