From 1b79635ffa686cf545e0c1d39c3c7159ac972b2a Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Fri, 14 Aug 2020 15:29:47 +0200 Subject: [PATCH] Persists login cookie between browser restarts --- app/src/main/kotlin/SimpleNotes.kt | 2 +- app/src/main/kotlin/controllers/UserController.kt | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/SimpleNotes.kt b/app/src/main/kotlin/SimpleNotes.kt index 11babfa..6fb7c38 100644 --- a/app/src/main/kotlin/SimpleNotes.kt +++ b/app/src/main/kotlin/SimpleNotes.kt @@ -71,7 +71,7 @@ val serverModule = module { } val userModule = module { - single { UserController(get(), get()) } + single { UserController(get(), get(), get()) } single { UserView(get()) } } diff --git a/app/src/main/kotlin/controllers/UserController.kt b/app/src/main/kotlin/controllers/UserController.kt index 9b68eab..09103ae 100644 --- a/app/src/main/kotlin/controllers/UserController.kt +++ b/app/src/main/kotlin/controllers/UserController.kt @@ -10,6 +10,7 @@ import be.simplenotes.domain.usecases.login.* import be.simplenotes.domain.usecases.register.InvalidRegisterForm import be.simplenotes.domain.usecases.register.RegisterForm import be.simplenotes.domain.usecases.register.UserExists +import be.simplenotes.shared.config.JwtConfig import org.http4k.core.Method.GET import org.http4k.core.Request import org.http4k.core.Response @@ -19,10 +20,12 @@ import org.http4k.core.cookie.Cookie import org.http4k.core.cookie.SameSite import org.http4k.core.cookie.cookie import org.http4k.core.cookie.invalidateCookie +import java.util.concurrent.TimeUnit class UserController( private val userService: UserService, private val userView: UserView, + private val jwtConfig: JwtConfig, ) { fun register(request: Request, jwtPayload: JwtPayload?): Response { if (request.method == GET) return Response(OK).html( @@ -90,9 +93,7 @@ class UserController( } private fun Response.loginCookie(token: Token, secure: Boolean): Response { - // FIXME: expires - // val expiresAt = JWT.decode(token).expiresAt - // LocalDateTime.ofEpochSecond(expiresAt.time, 0) + val validityInSeconds = TimeUnit.SECONDS.convert(jwtConfig.validity, jwtConfig.timeUnit) return this.cookie( Cookie( @@ -101,6 +102,7 @@ class UserController( path = "/", httpOnly = true, sameSite = SameSite.Lax, + maxAge = validityInSeconds, secure = secure ) )