From 4a3706c960f6b30dc0ff4621ac8a068fd88fee1a Mon Sep 17 00:00:00 2001 From: Swordsteel Date: Wed, 6 Aug 2025 15:48:25 +0200 Subject: [PATCH] delete user session on event - update handleRemoteAccountEvent to handle enabled event in AccountListener - update RedisSessionService - add deleteUser - add delete --- .../kotlin/ltd/hlaeja/listener/AccountListener.kt | 11 +++++++++-- .../kotlin/ltd/hlaeja/service/RedisSessionService.kt | 10 ++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/ltd/hlaeja/listener/AccountListener.kt b/src/main/kotlin/ltd/hlaeja/listener/AccountListener.kt index 8b31a21..c39fd63 100644 --- a/src/main/kotlin/ltd/hlaeja/listener/AccountListener.kt +++ b/src/main/kotlin/ltd/hlaeja/listener/AccountListener.kt @@ -17,8 +17,15 @@ class AccountListener( @KafkaListener(topics = ["account"]) fun handleRemoteAccountEvent(record: ConsumerRecord) { 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() + } + } } } } diff --git a/src/main/kotlin/ltd/hlaeja/service/RedisSessionService.kt b/src/main/kotlin/ltd/hlaeja/service/RedisSessionService.kt index 1a5a68c..413079e 100644 --- a/src/main/kotlin/ltd/hlaeja/service/RedisSessionService.kt +++ b/src/main/kotlin/ltd/hlaeja/service/RedisSessionService.kt @@ -16,6 +16,10 @@ class RedisSessionService( private val accountRegistryService: AccountRegistryService, ) { + fun deleteUser(user: UUID): Flux = findByUser(user) + .flatMapMany { sessions -> Flux.fromIterable(sessions.values) } + .flatMap(::delete) + fun updateUser( user: UUID, ): Flux = findByUser(user) @@ -45,4 +49,10 @@ class RedisSessionService( ): Mono = redisSessionRepository.save(session) .thenReturn(session) .doOnNext { ltd.hlaeja.listener.log.trace { "Save session: ${it.id}" } } + + private fun delete( + session: RedisSession, + ): Mono = redisSessionRepository.deleteById(session.id) + .thenReturn(session) + .doOnNext { ltd.hlaeja.listener.log.trace { "Deleted session: ${it.id}" } } }