@(idPrefix: String, list: Seq[GroupedDependency], selectorOption: Option[String], expandByDefault: Boolean = true, addButtons: Boolean = true)
@cpeHtmlId(cpe: String) = @{
cpe.getBytes("utf-8").mkString("-")
}
@for(dep <- list; depPrefix = s"$idPrefix-${dep.sha1}"){
@libraryIdentification(dep, Some(cpe => s"$idPrefix-${dep.sha1}-suppression-cpe-${cpeHtmlId(cpe)}"), addLink = false, addButtons = addButtons)
@for(s <- dep.maxCvssScore) {
(@s
× @dep.projects.size
= @dep.ysdssScore)
(vulns: @dep.vulnerabilities.size)
}
@dep.cpeIdentifiers.toSeq match {
case Seq() => {}
case cpeIds => {
}
}
@for(identifier <- dep.identifiers; cpe <- identifier.toCpeIdentifierOption ) {
@SuppressionXml.forCpe(dep, cpe)
}
@if(dep.descriptions.size > 1){
Multiple descriptions for this dependency!
}
@for(descriptionParagraphs <- dep.parsedDescriptions){
@for(descriptionParagraphLines <- descriptionParagraphs){
@for(line <- descriptionParagraphLines) {
@line
}
}
}
Evidence
| confidence |
evidence type |
name |
source |
value |
@for(fileName <- dep.fileNames.toIndexedSeq.sorted){
|
filename |
|
|
@fileName |
}
@for(ev <- dep.dependencies.keySet.map(_.evidenceCollected).flatten){
| @ev.confidence
| @ev.evidenceType
| @ev.name
| @ev.source
| @ev.value
|
}
Affected projects (@dep.projects.size)
@for(p <- dep.projects.toIndexedSeq.sorted){- @friendlyProjectName(p)
}
Vulnerabilities (@dep.vulnerabilities.size)
@for(vuln <- dep.vulnerabilities.toSeq.sortBy(_.cvssScore.map(-_)); vulnPrefix = s"$depPrefix-vulnerabilities-details-${vuln.name}"){
-
@vuln.name
@vulnerability("h6", s"$idPrefix-${dep.sha1}", vuln)
CVE suppression
@SuppressionXml.forVuln(dep, vuln)
}
}