From bef0d0e53664508a24fc78594e471a5cddcda6bc Mon Sep 17 00:00:00 2001 From: Stefan Schallerl Date: Fri, 7 Feb 2025 10:03:55 +0100 Subject: [PATCH] Adds file session handling. --- .../main/kotlin/net/h34t/filemure/Server.kt | 25 ++++++++++++++++++- .../main/kotlin/net/h34t/filemure/Session.kt | 5 +++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/net/h34t/filemure/Server.kt b/app/src/main/kotlin/net/h34t/filemure/Server.kt index 216745c..a5eaf4a 100644 --- a/app/src/main/kotlin/net/h34t/filemure/Server.kt +++ b/app/src/main/kotlin/net/h34t/filemure/Server.kt @@ -4,6 +4,11 @@ import io.javalin.Javalin import io.javalin.http.staticfiles.Location import net.h34t.filemure.FilemureApp import net.h34t.filemure.repository.SqliteRepository +import org.eclipse.jetty.http.HttpCookie +import org.eclipse.jetty.server.session.DefaultSessionCache +import org.eclipse.jetty.server.session.FileSessionDataStore +import org.eclipse.jetty.server.session.SessionHandler +import java.io.File fun main() { @@ -18,15 +23,33 @@ fun main() { staticFiles.hostedPath = "/" staticFiles.directory = "./public" staticFiles.location = Location.EXTERNAL - // staticFiles. } config.requestLogger.http { ctx, ms -> // log things here } + + config.useVirtualThreads = true + + config.jetty.modifyServletContextHandler { + it.sessionHandler = fileSessionHandler() + } } .also { app.register(it) } .start(7070) } + +fun fileSessionHandler() = SessionHandler().apply { + sessionCache = DefaultSessionCache(this).apply { + sessionDataStore = FileSessionDataStore().apply { + val baseDir = File(System.getProperty("java.io.tmpdir")) + this.storeDir = File(baseDir, "javalin-session").apply { mkdirs() } + } + } + maxInactiveInterval = 30 * 60 + httpOnly = true + isSecureRequestOnly = true + sameSite = HttpCookie.SameSite.STRICT +} \ No newline at end of file diff --git a/app/src/main/kotlin/net/h34t/filemure/Session.kt b/app/src/main/kotlin/net/h34t/filemure/Session.kt index c0ce760..ef8540c 100644 --- a/app/src/main/kotlin/net/h34t/filemure/Session.kt +++ b/app/src/main/kotlin/net/h34t/filemure/Session.kt @@ -1,3 +1,6 @@ package net.h34t.filemure -data class Session(val id: Long, val email: String) \ No newline at end of file +import java.io.Serializable + + +data class Session(val id: Long, val email: String) : Serializable \ No newline at end of file