mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-03-27 03:21:49 +01:00
Fix for notifications: When a vulnerability reappears, it should not try to recreate a ticket for it
This commit is contained in:
@@ -61,7 +61,10 @@ class Notifications @Inject()(
|
|||||||
) = {
|
) = {
|
||||||
val vulnerabilitiesByName = lds.vulnerabilitiesToDependencies.map{case (v, deps) => (v.name, (v, deps))}
|
val vulnerabilitiesByName = lds.vulnerabilitiesToDependencies.map{case (v, deps) => (v.name, (v, deps))}
|
||||||
for{
|
for{
|
||||||
tickets <- ep.loadUnfinishedTickets().map(_.map{case rec @ (id, ticket) => ticket.vulnerabilityName->rec}.toMap)
|
// TODO: Prevent loading all tickets
|
||||||
|
allTickets <- ep.loadAllTickets().map(_.map{case rec @ (id, ticket) => ticket.vulnerabilityName->rec}.toMap)
|
||||||
|
tickets = allTickets.filter(_._2._2.done == false)
|
||||||
|
//tickets <- ep.loadUnfinishedTickets().map(_.map{case rec @ (id, ticket) => ticket.vulnerabilityName->rec}.toMap)
|
||||||
// Check existing tickets
|
// Check existing tickets
|
||||||
existingTicketsIds = tickets.values.map(_._1).toSet
|
existingTicketsIds = tickets.values.map(_._1).toSet
|
||||||
ticketsById = tickets.values.toMap
|
ticketsById = tickets.values.toMap
|
||||||
@@ -86,7 +89,7 @@ class Notifications @Inject()(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check new tickets
|
// Check new tickets
|
||||||
missingTickets = vulnerabilitiesByName.keySet -- tickets.keySet
|
missingTickets = vulnerabilitiesByName.keySet -- allTickets.keySet
|
||||||
newTicketIds <- Future.traverse(filterMissingTickets(missingTickets)){vulnerabilityName =>
|
newTicketIds <- Future.traverse(filterMissingTickets(missingTickets)){vulnerabilityName =>
|
||||||
val (vulnerability, dependencies) = vulnerabilitiesByName(vulnerabilityName)
|
val (vulnerability, dependencies) = vulnerabilitiesByName(vulnerabilityName)
|
||||||
reportVulnerability(vulnerability, dependencies).flatMap{ ticket =>
|
reportVulnerability(vulnerability, dependencies).flatMap{ ticket =>
|
||||||
|
|||||||
@@ -68,6 +68,10 @@ class VulnerabilityNotificationService @Inject() (protected val dbConfigProvider
|
|||||||
ept.tickets.filter(_.done === false).result
|
ept.tickets.filter(_.done === false).result
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def loadAllTickets(): Future[Seq[(Int, ExportedVulnerability[T])]] = db.run(
|
||||||
|
ept.tickets.result
|
||||||
|
)
|
||||||
|
|
||||||
def changeProjects(ticketId: Int, diff: SetDiff[String], projects: ProjectsWithReports): Future[Unit] = db.run(
|
def changeProjects(ticketId: Int, diff: SetDiff[String], projects: ProjectsWithReports): Future[Unit] = db.run(
|
||||||
DBIO.seq(
|
DBIO.seq(
|
||||||
ept.tickets.filter(_.id === ticketId).map(_.done).update(diff.newSet.isEmpty),
|
ept.tickets.filter(_.id === ticketId).map(_.done).update(diff.newSet.isEmpty),
|
||||||
|
|||||||
Reference in New Issue
Block a user