mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-03-23 01:30:25 +01:00
Added more fail safety for vulnerability export.
This should affect all exports when a vulnerability disappears.
This commit is contained in:
49
app/models/vulnerabilityOverviews.scala
Normal file
49
app/models/vulnerabilityOverviews.scala
Normal file
@@ -0,0 +1,49 @@
|
||||
package models
|
||||
|
||||
import com.ysoft.odc.CWE
|
||||
import controllers.Vulnerability
|
||||
|
||||
/**
|
||||
* Provides some overview about vulnerability. It might be either covered by fully-detailed vulnerability or represent a vulnerability we know little or nothing about.
|
||||
*/
|
||||
abstract sealed class VulnerabilityOverview {
|
||||
def name: String
|
||||
def descriptionAttempt: String
|
||||
def isSureAboutDescription: Boolean
|
||||
def cvssScore: Option[Double]
|
||||
def cweOption: Option[CWE]
|
||||
}
|
||||
|
||||
object VulnerabilityOverview{
|
||||
def apply(name: String, v: Option[Vulnerability]): VulnerabilityOverview = v.fold(UnknownVulnerabilityOverview(name))(new StandardVulnerabilityOverview(_))
|
||||
}
|
||||
|
||||
final class StandardVulnerabilityOverview(vulnerability: Vulnerability) extends VulnerabilityOverview {
|
||||
override def name: String = vulnerability.name
|
||||
override def descriptionAttempt: String = vulnerability.description
|
||||
override def isSureAboutDescription = true
|
||||
override def cvssScore: Option[Double] = vulnerability.cvssScore
|
||||
override def cweOption = vulnerability.cweOption
|
||||
}
|
||||
|
||||
private final class UnknownVulnerabilityOverview(override val name: String, link: String) extends VulnerabilityOverview {
|
||||
override def descriptionAttempt: String = s"Unknown vulnerability. Try looking at the following address for more details: $link"
|
||||
override def cvssScore: Option[Double] = None
|
||||
override def isSureAboutDescription = false
|
||||
override def cweOption = None
|
||||
}
|
||||
|
||||
private final class TotallyUnknownVulnerabilityOverview(override val name: String) extends VulnerabilityOverview {
|
||||
override def descriptionAttempt: String = s"Unknown vulnerability. Not even sure where to look for other details. Maybe Googling the identifier will help."
|
||||
override def cvssScore: Option[Double] = None
|
||||
override def isSureAboutDescription = false
|
||||
override def cweOption = None
|
||||
}
|
||||
|
||||
private object UnknownVulnerabilityOverview {
|
||||
def apply(name: String): VulnerabilityOverview = name match {
|
||||
case cveId if name startsWith "CVE-" => new UnknownVulnerabilityOverview(name, s"https://nvd.nist.gov/vuln/detail/$cveId")
|
||||
case ossIndexId if name startsWith "OSSINDEX-" => new UnknownVulnerabilityOverview(name, s"https://ossindex.net/resource/vulnerability/$ossIndexId")
|
||||
case other => new TotallyUnknownVulnerabilityOverview(other)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user