Skip to content

Commit 64f6f3b

Browse files
authored
Added new Notifications (#2841)
1 parent 0875faf commit 64f6f3b

4 files changed

Lines changed: 64 additions & 15 deletions

File tree

save-backend/src/main/kotlin/com/saveourtool/save/backend/controllers/vulnerability/event/VulnerabilityMetadataListener.kt

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,18 @@ class VulnerabilityMetadataListener(
2323
*/
2424
@EventListener
2525
fun createVulnerabilityMetadata(vulnerabilityEvent: VulnerabilityMetadataEvent) {
26-
if (vulnerabilityEvent.vulnerabilityMetadata.status == VulnerabilityStatus.CREATED) {
26+
val newMessage = when (vulnerabilityEvent.vulnerabilityMetadata.status) {
27+
VulnerabilityStatus.CREATED -> messageNewVulnerabilityMetadata(vulnerabilityEvent.vulnerabilityMetadata)
28+
VulnerabilityStatus.AUTO_APPROVED -> messageNewVulnerabilityMetadataAutoApproved(vulnerabilityEvent.vulnerabilityMetadata)
29+
VulnerabilityStatus.PENDING_REVIEW -> messageUpdatedVulnerabilityMetadata(vulnerabilityEvent.vulnerabilityMetadata)
30+
else -> null
31+
}
32+
newMessage?.let { message ->
2733
val recipients = userDetailsService.findByRole(Role.SUPER_ADMIN.asSpringSecurityRole())
28-
val notifications = recipients.map {
34+
val notifications = recipients.map { user ->
2935
Notification(
30-
message = messageNewVulnerabilityMetadata(vulnerabilityEvent.vulnerabilityMetadata),
31-
user = it,
36+
message = message,
37+
user = user,
3238
)
3339
}
3440
notificationService.saveAll(notifications)
@@ -43,5 +49,21 @@ class VulnerabilityMetadataListener(
4349
fun messageNewVulnerabilityMetadata(vulnerability: VulnerabilityMetadata) = """
4450
New vulnerability: ${vulnerability.identifier} is waiting for approve.
4551
""".trimIndent()
52+
53+
/**
54+
* @param vulnerability
55+
* @return message
56+
*/
57+
fun messageNewVulnerabilityMetadataAutoApproved(vulnerability: VulnerabilityMetadata) = """
58+
New uploaded vulnerability: ${vulnerability.identifier} has been auto approved.
59+
""".trimIndent()
60+
61+
/**
62+
* @param vulnerability
63+
* @return message
64+
*/
65+
fun messageUpdatedVulnerabilityMetadata(vulnerability: VulnerabilityMetadata) = """
66+
Vulnerability: ${vulnerability.identifier} has been updated and waiting for approve.
67+
""".trimIndent()
4668
}
4769
}

save-backend/src/main/kotlin/com/saveourtool/save/backend/event/UserListener.kt

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.saveourtool.save.backend.service.UserDetailsService
55
import com.saveourtool.save.domain.Role
66
import com.saveourtool.save.entities.Notification
77
import com.saveourtool.save.entities.User
8+
import com.saveourtool.save.evententities.UserEvent
89
import com.saveourtool.save.info.UserStatus
910
import org.springframework.context.event.EventListener
1011
import org.springframework.stereotype.Component
@@ -18,16 +19,22 @@ class UserListener(
1819
private val notificationService: NotificationService,
1920
) {
2021
/**
21-
* @param user new user
22+
* @param userEvent new userEvent
2223
*/
2324
@EventListener
24-
fun createUser(user: User) {
25-
if (user.status == UserStatus.NOT_APPROVED) {
25+
fun createUser(userEvent: UserEvent) {
26+
val newMessage = when (userEvent.user.status) {
27+
UserStatus.NOT_APPROVED -> messageNewUser(userEvent.user)
28+
UserStatus.BANNED -> messageBanUser(userEvent.user)
29+
else -> null
30+
}
31+
32+
newMessage?.let { message ->
2633
val recipients = userDetailsService.findByRole(Role.SUPER_ADMIN.asSpringSecurityRole())
27-
val notifications = recipients.map {
34+
val notifications = recipients.map { user ->
2835
Notification(
29-
message = messageNewUser(user),
30-
user = it,
36+
message = message,
37+
user = user,
3138
)
3239
}
3340
notificationService.saveAll(notifications)
@@ -42,5 +49,13 @@ class UserListener(
4249
fun messageNewUser(user: User) = """
4350
New user: ${user.name} is waiting for approve of his account.
4451
""".trimIndent()
52+
53+
/**
54+
* @param user
55+
* @return message
56+
*/
57+
fun messageBanUser(user: User) = """
58+
User: ${user.name} has been banned.
59+
""".trimIndent()
4560
}
4661
}

save-backend/src/main/kotlin/com/saveourtool/save/backend/service/UserDetailsService.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.saveourtool.save.domain.Role
1111
import com.saveourtool.save.domain.UserSaveStatus
1212
import com.saveourtool.save.entities.OriginalLogin
1313
import com.saveourtool.save.entities.User
14+
import com.saveourtool.save.evententities.UserEvent
1415
import com.saveourtool.save.info.UserStatus
1516
import com.saveourtool.save.utils.*
1617
import org.slf4j.Logger
@@ -129,7 +130,7 @@ class UserDetailsService(
129130
*/
130131
@Transactional
131132
fun saveUser(newUser: User, oldName: String?, oldUserStatus: UserStatus): UserSaveStatus {
132-
applicationEventPublisher.publishEvent(newUser)
133+
applicationEventPublisher.publishEvent(UserEvent(newUser))
133134
val isNameFreeAndNotTaken = userRepository.validateName(newUser.name) != 0L
134135
// if we are registering new user (updating just name and status to NOT_APPROVED):
135136
return if (oldUserStatus == UserStatus.CREATED && newUser.status == UserStatus.NOT_APPROVED) {
@@ -272,11 +273,12 @@ class UserDetailsService(
272273
fun banUser(
273274
name: String,
274275
): UserSaveStatus {
275-
val user: User = userRepository.findByName(name).orNotFound()
276-
277-
userRepository.save(user.apply {
276+
val user: User = userRepository.findByName(name).orNotFound().apply {
278277
this.status = UserStatus.BANNED
279-
})
278+
}
279+
applicationEventPublisher.publishEvent(UserEvent(user))
280+
281+
userRepository.save(user)
280282

281283
return UserSaveStatus.BANNED
282284
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.saveourtool.save.evententities
2+
3+
import com.saveourtool.save.entities.User
4+
5+
/**
6+
* @property user
7+
**/
8+
data class UserEvent(
9+
var user: User
10+
)

0 commit comments

Comments
 (0)