Skip to content

Commit 2d70218

Browse files
authored
Added notification for propose new vulnerability (#2833)
* Added notification for propose new vulnerability
1 parent 075fe77 commit 2d70218

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.saveourtool.save.backend.controllers.vulnerability.event
2+
3+
import com.saveourtool.save.backend.service.NotificationService
4+
import com.saveourtool.save.backend.service.UserDetailsService
5+
import com.saveourtool.save.domain.Role
6+
import com.saveourtool.save.entities.Notification
7+
import com.saveourtool.save.entities.cosv.VulnerabilityMetadata
8+
import com.saveourtool.save.entities.cosv.evententities.VulnerabilityMetadataEvent
9+
import com.saveourtool.save.entities.vulnerability.VulnerabilityStatus
10+
import org.springframework.context.event.EventListener
11+
import org.springframework.stereotype.Component
12+
13+
/**
14+
* A vulnerability metadata listener for sending notifications.
15+
*/
16+
@Component
17+
class VulnerabilityMetadataListener(
18+
private val userDetailsService: UserDetailsService,
19+
private val notificationService: NotificationService,
20+
) {
21+
/**
22+
* @param vulnerabilityEvent new VulnerabilityMetadataEvent
23+
*/
24+
@EventListener
25+
fun createVulnerabilityMetadata(vulnerabilityEvent: VulnerabilityMetadataEvent) {
26+
if (vulnerabilityEvent.vulnerabilityMetadata.status == VulnerabilityStatus.PENDING_REVIEW) {
27+
val recipients = userDetailsService.findByRole(Role.SUPER_ADMIN.asSpringSecurityRole())
28+
val notifications = recipients.map {
29+
Notification(
30+
message = messageNewVulnerabilityMetadata(vulnerabilityEvent.vulnerabilityMetadata),
31+
user = it,
32+
)
33+
}
34+
notificationService.saveAll(notifications)
35+
}
36+
}
37+
38+
companion object {
39+
/**
40+
* @param vulnerability
41+
* @return message
42+
*/
43+
fun messageNewVulnerabilityMetadata(vulnerability: VulnerabilityMetadata) = """
44+
New vulnerability: ${vulnerability.identifier} is waiting for approve.
45+
""".trimIndent()
46+
}
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.saveourtool.save.entities.cosv.evententities
2+
3+
import com.saveourtool.save.entities.cosv.VulnerabilityMetadata
4+
5+
/**
6+
* @property vulnerabilityMetadata
7+
**/
8+
data class VulnerabilityMetadataEvent(
9+
var vulnerabilityMetadata: VulnerabilityMetadata
10+
)

save-cosv/src/main/kotlin/com/saveourtool/save/cosv/service/VulnerabilityMetadataService.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.saveourtool.save.entities.cosv.CosvFile
1111
import com.saveourtool.save.entities.cosv.VulnerabilityMetadata
1212
import com.saveourtool.save.entities.cosv.VulnerabilityMetadataDto
1313
import com.saveourtool.save.entities.cosv.VulnerabilityMetadataDto.Companion.SUMMARY_LENGTH
14+
import com.saveourtool.save.entities.cosv.evententities.VulnerabilityMetadataEvent
1415
import com.saveourtool.save.entities.vulnerability.VulnerabilityLanguage
1516
import com.saveourtool.save.entities.vulnerability.VulnerabilityStatus
1617
import com.saveourtool.save.utils.ELLIPSIS
@@ -22,6 +23,7 @@ import com.saveourtool.save.utils.warn
2223

2324
import com.saveourtool.osv4k.Severity
2425
import com.saveourtool.osv4k.SeverityType
26+
import org.springframework.context.ApplicationEventPublisher
2527
import org.springframework.http.HttpStatus
2628
import org.springframework.stereotype.Service
2729
import org.springframework.transaction.annotation.Transactional
@@ -36,6 +38,7 @@ import kotlinx.datetime.toJavaLocalDateTime
3638
class VulnerabilityMetadataService(
3739
private val vulnerabilityMetadataRepository: VulnerabilityMetadataRepository,
3840
private val cosvFileS3KeyManager: CosvFileS3KeyManager,
41+
private val applicationEventPublisher: ApplicationEventPublisher,
3942
) {
4043
/**
4144
* @param cosvFile
@@ -60,7 +63,9 @@ class VulnerabilityMetadataService(
6063
existedMetadata.updateBy(cosv, cosvFile, isAutoApprove)
6164
}
6265
?: run {
63-
cosv.toNewMetadata(user, organization, cosvFile, isAutoApprove)
66+
val newMetadata = cosv.toNewMetadata(user, organization, cosvFile, isAutoApprove)
67+
applicationEventPublisher.publishEvent(VulnerabilityMetadataEvent(newMetadata))
68+
newMetadata
6469
}
6570

6671
return vulnerabilityMetadataRepository.save(metadata)

0 commit comments

Comments
 (0)