package models.odc import com.ysoft.odc.{CvssRating, CWE} import models.odc.profile.api._ import slick.lifted.Tag case class Vulnerability (cve: String, description: String, /*cweOption: Option[CWE],*/ cvss: CvssRating) class Vulnerabilities(tag: Tag) extends Table[(Int, Vulnerability)](tag, "vulnerability") { def id = column[Int]("id") def cve = column[String]("cve") def description = column[String]("description") //def cweOption = column[String]("cwe").? def cvssScore = column[Double]("cvssv2score").? def authentication = column[String]("cvssv2authentication").? def availabilityImpact = column[String]("cvssv2availabilityimpact").? def accessVector = column[String]("cvssv2accessvector").? def integrityImpact = column[String]("cvssv2integrityimpact").? def cvssAccessComplexity = column[String]("cvssv2accesscomplexity").? def cvssConfidentialityImpact = column[String]("cvssv2confidentialityimpact").? def cvssRating = (cvssScore, authentication, availabilityImpact, accessVector, integrityImpact, cvssAccessComplexity, cvssConfidentialityImpact) <> (CvssRating.tupled, CvssRating.unapply) //def cweOptionMapped = cweOption <> ((_: Option[String]).map(CWE.forIdentifierWithDescription), (_: Option[CWE]).map(CWE.unapply)) def base = (cve, description, cvssRating) <> (Vulnerability.tupled, Vulnerability.unapply) def * = (id, base) }