Files
odc-analyzer/app/models/vulnerabilityOverviews.scala
2020-01-31 00:53:40 +01:00

50 lines
2.2 KiB
Scala

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)
}
}