delete user session on event

- update handleRemoteAccountEvent to handle enabled event in AccountListener
- update RedisSessionService
  - add deleteUser
  - add delete
This commit is contained in:
2025-08-06 15:48:25 +02:00
committed by swordsteel
parent ff54e06204
commit 4a3706c960
2 changed files with 19 additions and 2 deletions

View File

@@ -17,8 +17,15 @@ class AccountListener(
@KafkaListener(topics = ["account"])
fun handleRemoteAccountEvent(record: ConsumerRecord<String, AccountMessage>) {
log.trace { "Received event: ${record.key()} for user: ${record.value().userId}" }
if (record.key() == "change" && record.value().change.any { it in setOf("enabled", "username", "roles") }) {
sessionService.updateUser(record.value().userId).subscribe()
if (record.key() == "change") {
when {
record.value().change.any { it == "enabled" } -> {
sessionService.deleteUser(record.value().userId).subscribe()
}
record.value().change.any { it in setOf("username", "roles") } -> {
sessionService.updateUser(record.value().userId).subscribe()
}
}
}
}
}

View File

@@ -16,6 +16,10 @@ class RedisSessionService(
private val accountRegistryService: AccountRegistryService,
) {
fun deleteUser(user: UUID): Flux<RedisSession> = findByUser(user)
.flatMapMany { sessions -> Flux.fromIterable(sessions.values) }
.flatMap(::delete)
fun updateUser(
user: UUID,
): Flux<RedisSession> = findByUser(user)
@@ -45,4 +49,10 @@ class RedisSessionService(
): Mono<RedisSession> = redisSessionRepository.save(session)
.thenReturn(session)
.doOnNext { ltd.hlaeja.listener.log.trace { "Save session: ${it.id}" } }
private fun delete(
session: RedisSession,
): Mono<RedisSession> = redisSessionRepository.deleteById(session.id)
.thenReturn(session)
.doOnNext { ltd.hlaeja.listener.log.trace { "Deleted session: ${it.id}" } }
}