@import com.ysoft.odc.statistics.FailedProjects
@(
projectsWithSelection: ProjectsWithSelection,
vulnerability: Vulnerability,
affectedProjects: Map[ReportInfo, Set[GroupedDependency]],
vulnerableDependencies: Set[GroupedDependency],
affectedLibraries: Set[PlainLibraryIdentifier],
issueOption: Option[(ExportedVulnerability[String], String)],
failedProjects: FailedProjects
)(implicit header: DefaultRequest, mainTemplateData: MainTemplateData)
@section = @{views.html.genericSection("vuln")("h2") _}
@main(
title = s"vulnerability ${vulnerability.name} for ${projectsWithSelection.projectNameText}",
projectsOption = Some((projectsWithSelection, p => routes.Statistics.vulnerability(vulnerability.name, p)))
) {
@healthReport(failedProjects)
@if(projectsWithSelection.isProjectSpecified){
}
@for((ticket, issueLink) <- issueOption){
Issue in your issue tracker: @ticket.ticket
}
@section("details", "Vulnerability details") {
@views.html.vulnerability("h2", "vuln-details", vulnerability)
}
@section("affected-libs", s"Unique affected libraries – without version number (${affectedLibraries.size})"){
@for(lib <- affectedLibraries){
- @lib
}
}
@section("affected-deps", s"Unique affected dependencies (${vulnerableDependencies.size})"){
@for(dep <- vulnerableDependencies){
- @libraryIdentificationList(dep, addButtons = false, addLink = false)
}
}
@section("affected-projects", s"Affected projects (${affectedProjects.size} projects with ${affectedProjects.flatMap(_._2).size} occurrences)"){
@for((project, dependencies) <- affectedProjects.toSeq.sortBy(_._1)){
@for(dep <- dependencies.toSeq){
- @libraryIdentificationList(dep, addButtons = false, addLink = false)
}
}
}
}