From ef7c56cd368f83ef8caa2ad8c4b67b336d1ab201 Mon Sep 17 00:00:00 2001 From: TheSaminator Date: Sun, 13 Feb 2022 17:29:57 -0500 Subject: [PATCH] Add clear-expired-sessions feature --- .../kotlin/starshipfights/auth/providers.kt | 23 +++++++++++++++++++ .../starshipfights/info/endpoints_info.kt | 2 +- .../kotlin/starshipfights/info/views_user.kt | 10 +++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/jvmMain/kotlin/starshipfights/auth/providers.kt b/src/jvmMain/kotlin/starshipfights/auth/providers.kt index e942760..e8d5f49 100644 --- a/src/jvmMain/kotlin/starshipfights/auth/providers.kt +++ b/src/jvmMain/kotlin/starshipfights/auth/providers.kt @@ -300,6 +300,29 @@ interface AuthProvider { redirect("/me/manage") } + get("/clear-expired/{id}") { + val id = Id(call.parameters.getOrFail("id")) + call.getUserSession()?.let { sess -> + launch { + val now = Instant.now() + UserSession.remove(and(UserSession::id eq id, UserSession::user eq sess.user, UserSession::expiration lte now)) + } + } + + redirect("/me/manage") + } + + get("/clear-all-expired/") { + call.getUserSession()?.let { sess -> + launch { + val now = Instant.now() + UserSession.remove(and(UserSession::user eq sess.user, UserSession::expiration lte now)) + } + } + + redirect("/me/manage") + } + currentProvider.installRouting(this) } } diff --git a/src/jvmMain/kotlin/starshipfights/info/endpoints_info.kt b/src/jvmMain/kotlin/starshipfights/info/endpoints_info.kt index d9645aa..c2e71c8 100644 --- a/src/jvmMain/kotlin/starshipfights/info/endpoints_info.kt +++ b/src/jvmMain/kotlin/starshipfights/info/endpoints_info.kt @@ -34,7 +34,7 @@ fun Routing.installPages() { // Random name generation get("/generate-name/{flavor}/{gender}") { - val flavor = call.parameters["flavor"]?.let { flavor -> AdmiralNameFlavor.values().singleOrNull { it.toUrlSlug() == flavor.lowercase() } }!! + val flavor = call.parameters["flavor"]?.let { flavor -> AdmiralNameFlavor.values().singleOrNull { it.toUrlSlug().equals(flavor, ignoreCase = true) } }!! val isFemale = call.parameters["gender"]?.startsWith('f', ignoreCase = true) ?: false call.respondText(AdmiralNames.randomName(flavor, isFemale), ContentType.Text.Plain) diff --git a/src/jvmMain/kotlin/starshipfights/info/views_user.kt b/src/jvmMain/kotlin/starshipfights/info/views_user.kt index 5944177..e053925 100644 --- a/src/jvmMain/kotlin/starshipfights/info/views_user.kt +++ b/src/jvmMain/kotlin/starshipfights/info/views_user.kt @@ -200,7 +200,7 @@ suspend fun ApplicationCall.manageUserPage(): HTML.() -> Unit { } } section { - h2 { +"Other Sessions" } + h2 { +"Logged-In Sessions" } table { tr { th { +"User-Agent" } @@ -253,9 +253,17 @@ suspend fun ApplicationCall.manageUserPage(): HTML.() -> Unit { style = "display:none" +session.expiration.toEpochMilli().toString() } + br + a(href = "/clear-expired/${session.id}") { +"Clear" } } } } + tr { + td { + colSpan = "3" + a(href = "/clear-all-expired") { +"Clear All Expired Sessions" } + } + } } } } -- 2.25.1