From 8976e254993d9cb79f4fe2c71b1ffad363782e6f Mon Sep 17 00:00:00 2001 From: Hartmut Bauer Date: Mon, 12 Oct 2026 23:58:20 +0200 Subject: [PATCH] progress --- .../src/main/kotlin/books/config/Routing.kt | 2 + .../main/kotlin/books/edit/BooksSession.kt | 14 +++++ server/src/main/kotlin/core/auth/Sessions.kt | 53 +++++++++++++++++++ .../src/main/kotlin/core/config/Security.kt | 2 + 4 files changed, 71 insertions(+) create mode 100644 server/src/main/kotlin/books/edit/BooksSession.kt create mode 100644 server/src/main/kotlin/core/auth/Sessions.kt diff --git a/server/src/main/kotlin/books/config/Routing.kt b/server/src/main/kotlin/books/config/Routing.kt index 9536e8b..740a510 100644 --- a/server/src/main/kotlin/books/config/Routing.kt +++ b/server/src/main/kotlin/books/config/Routing.kt @@ -20,6 +20,7 @@ import net.keinekekse.app.books.db.schema.emptyBook import net.keinekekse.app.books.scan.getCover import net.keinekekse.app.books.scan.getIsbnFromCalibre import net.keinekekse.app.books.ui.* +import net.keinekekse.app.core.auth.Sessions import net.keinekekse.app.core.auth.UserRoles import net.keinekekse.app.core.config.KeycloakSession import net.keinekekse.app.core.config.onUnauthorized @@ -32,6 +33,7 @@ fun Application.configureRouting( @Named("booksDb") db: Database, booksRepo: BookRepository, keycloakSession: KeycloakSession, + sessions: Sessions, // resultCallback: (String, String) -> Unit, ) { log.info("Configuring books routing") diff --git a/server/src/main/kotlin/books/edit/BooksSession.kt b/server/src/main/kotlin/books/edit/BooksSession.kt new file mode 100644 index 0000000..bf6028d --- /dev/null +++ b/server/src/main/kotlin/books/edit/BooksSession.kt @@ -0,0 +1,14 @@ +package net.keinekekse.app.books.edit + +import net.keinekekse.app.core.auth.UserSession + +class BooksSession( + override val userId: String, + override val sessionId: String, + override var data: BooksSessionData +) : UserSession + + +class BooksSessionData() { + +} diff --git a/server/src/main/kotlin/core/auth/Sessions.kt b/server/src/main/kotlin/core/auth/Sessions.kt new file mode 100644 index 0000000..b27a2a5 --- /dev/null +++ b/server/src/main/kotlin/core/auth/Sessions.kt @@ -0,0 +1,53 @@ +package net.keinekekse.app.core.auth + +import kotlin.uuid.ExperimentalUuidApi +import kotlin.uuid.Uuid + +class Sessions { + + var sessions: MutableMap>> = mutableMapOf() + + @OptIn(ExperimentalUuidApi::class) + fun newSessionId(): String { + return Uuid.generateV4().toHexDashString() + } + + fun getUserSessions(uid: String): MutableMap>? { + return sessions.get(uid) + } + + fun getUserSession(uid: String, sessionId: String): UserSession<*>? { + return sessions.get(uid)?.get(sessionId) + } + + fun setUserSession(uid: String, sessionId: String, data: UserSession<*>) { + sessions.getOrPut(uid) { mutableMapOf() }[sessionId] = data + } + +// fun addSession(uid: String) { +// sessions[uid] = BooksSession(uid, "", "") +// } +// +// fun addTestSession(uid: String) { +// sessions[uid] = TestSession(uid, "", 0) +// } +} + +interface UserSession { + val userId: String + val sessionId: String + + var data: T +} + +//data class BooksSession( +// override val userId: String, +// override val sessionId: String, +// override var data: String, +//) : UserSession +// +//data class TestSession( +// override val userId: String, +// override val sessionId: String, +// override var data: Int, +//) : UserSession diff --git a/server/src/main/kotlin/core/config/Security.kt b/server/src/main/kotlin/core/config/Security.kt index b37b53f..b274c2a 100644 --- a/server/src/main/kotlin/core/config/Security.kt +++ b/server/src/main/kotlin/core/config/Security.kt @@ -8,6 +8,7 @@ import io.ktor.server.response.* import io.ktor.server.sessions.* import io.ktor.utils.io.* import net.keinekekse.app.core.auth.AppPrincipal +import net.keinekekse.app.core.auth.Sessions import net.keinekekse.app.core.auth.UserRoles import java.io.File import java.security.SecureRandom @@ -191,6 +192,7 @@ suspend fun Application.configureSecurity() { dependencies { provide { keycloakIdentity } provide { keycloakSession } + provide { Sessions() } } }