mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-01-13 15:23:59 +01:00
50 lines
2.2 KiB
Scala
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)
|
|
}
|
|
}
|