From ef1d43487165d0e399857d53dbe88f871f617c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0est=C3=A1k=20V=C3=ADt?= Date: Wed, 5 Apr 2017 13:14:49 +0200 Subject: [PATCH] Fix for notifications: When a vulnerability reappears, it should not try to recreate a ticket for it --- app/controllers/Notifications.scala | 7 +++++-- app/services/VulnerabilityNotificationService.scala | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/controllers/Notifications.scala b/app/controllers/Notifications.scala index cfd6415..eaf7a0d 100644 --- a/app/controllers/Notifications.scala +++ b/app/controllers/Notifications.scala @@ -61,7 +61,10 @@ class Notifications @Inject()( ) = { val vulnerabilitiesByName = lds.vulnerabilitiesToDependencies.map{case (v, deps) => (v.name, (v, deps))} 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 existingTicketsIds = tickets.values.map(_._1).toSet ticketsById = tickets.values.toMap @@ -86,7 +89,7 @@ class Notifications @Inject()( } } // Check new tickets - missingTickets = vulnerabilitiesByName.keySet -- tickets.keySet + missingTickets = vulnerabilitiesByName.keySet -- allTickets.keySet newTicketIds <- Future.traverse(filterMissingTickets(missingTickets)){vulnerabilityName => val (vulnerability, dependencies) = vulnerabilitiesByName(vulnerabilityName) reportVulnerability(vulnerability, dependencies).flatMap{ ticket => diff --git a/app/services/VulnerabilityNotificationService.scala b/app/services/VulnerabilityNotificationService.scala index c12414c..6f9e074 100644 --- a/app/services/VulnerabilityNotificationService.scala +++ b/app/services/VulnerabilityNotificationService.scala @@ -68,6 +68,10 @@ class VulnerabilityNotificationService @Inject() (protected val dbConfigProvider 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( DBIO.seq( ept.tickets.filter(_.id === ticketId).map(_.done).update(diff.newSet.isEmpty),