From d29a508737cd945df790c3eccedc7dad6df2e50a Mon Sep 17 00:00:00 2001 From: TheSaminator Date: Thu, 10 Feb 2022 18:10:50 -0500 Subject: [PATCH] Add user registration and activity datetimes --- .../kotlin/starshipfights/auth/providers.kt | 8 ++++++-- src/jvmMain/kotlin/starshipfights/auth/utils.kt | 6 +++++- .../starshipfights/data/auth/user_sessions.kt | 6 ++++++ .../kotlin/starshipfights/info/views_user.kt | 15 +++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/jvmMain/kotlin/starshipfights/auth/providers.kt b/src/jvmMain/kotlin/starshipfights/auth/providers.kt index afc5046..6dcc8a9 100644 --- a/src/jvmMain/kotlin/starshipfights/auth/providers.kt +++ b/src/jvmMain/kotlin/starshipfights/auth/providers.kt @@ -234,7 +234,9 @@ object TestAuthProvider : AuthProvider { discordDiscriminator = "", discordAvatar = null, profileName = credentials.name, - profileBio = "BEEP BOOP I EXIST ONLY FOR TESTING BLOP BLARP." + profileBio = "BEEP BOOP I EXIST ONLY FOR TESTING BLOP BLARP.", + registeredAt = Instant.now(), + lastActivity = Instant.now(), ).also { User.put(it) } @@ -398,7 +400,9 @@ class ProductionAuthProvider(val discordLogin: DiscordLogin) : AuthProvider { discordDiscriminator = discordDiscriminator, discordAvatar = discordAvatar, profileName = discordUsername, - profileBio = "Hi, I'm new here!" + profileBio = "Hi, I'm new here!", + registeredAt = Instant.now(), + lastActivity = Instant.now(), ) val userSession = UserSession( diff --git a/src/jvmMain/kotlin/starshipfights/auth/utils.kt b/src/jvmMain/kotlin/starshipfights/auth/utils.kt index 4492cc5..beabee3 100644 --- a/src/jvmMain/kotlin/starshipfights/auth/utils.kt +++ b/src/jvmMain/kotlin/starshipfights/auth/utils.kt @@ -19,9 +19,13 @@ suspend fun UserSession.renewed(clientAddress: String) = copy( clientAddresses = if (clientAddresses.last() != clientAddress) clientAddresses + clientAddress else clientAddresses ).also { UserSession.put(it) } +suspend fun User.updated() = copy( + lastActivity = Instant.now() +).also { User.put(it) } + suspend fun ApplicationCall.getUserSession() = request.userAgent()?.let { sessions.get>()?.resolve(it) }?.renewed(request.origin.remoteHost) -suspend fun ApplicationCall.getUser() = getUserSession()?.user?.let { User.get(it) } +suspend fun ApplicationCall.getUser() = getUserSession()?.user?.let { User.get(it) }?.updated() object UserSessionIdSerializer : SessionSerializer> { override fun serialize(session: Id): String { diff --git a/src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt b/src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt index cfab053..467f0d6 100644 --- a/src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt +++ b/src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt @@ -14,12 +14,18 @@ import java.time.Instant data class User( @SerialName("_id") override val id: Id = Id(), + val discordId: String, val discordName: String, val discordDiscriminator: String, val discordAvatar: String?, + val profileName: String, val profileBio: String, + + val registeredAt: @Contextual Instant, + val lastActivity: @Contextual Instant, + val status: UserStatus = UserStatus.AVAILABLE, ) : DataDocument { val discordAvatarUrl: String diff --git a/src/jvmMain/kotlin/starshipfights/info/views_user.kt b/src/jvmMain/kotlin/starshipfights/info/views_user.kt index e9d868b..0541d49 100644 --- a/src/jvmMain/kotlin/starshipfights/info/views_user.kt +++ b/src/jvmMain/kotlin/starshipfights/info/views_user.kt @@ -57,6 +57,21 @@ suspend fun ApplicationCall.userPage(): HTML.() -> Unit { style = "text-align:center;border:2px solid #a82;padding:3px;background-color:#fc3;color:#a82;font-variant:small-caps;font-family:'Orbitron',sans-serif" +"Site Owner" } + hr { style = "border-color:#036" } + p { + style = "text-align:center" + +"Registered at " + span(classes = "moment") { + style = "display:none" + +user.registeredAt.toEpochMilli().toString() + } + br + +"Last active at " + span(classes = "moment") { + style = "display:none" + +user.lastActivity.toEpochMilli().toString() + } + } if (isCurrentUser) { hr { style = "border-color:#036" } div(classes = "list") { -- 2.25.1