Add user registration and activity datetimes
authorTheSaminator <TheSaminator@users.noreply.github.com>
Thu, 10 Feb 2022 23:10:50 +0000 (18:10 -0500)
committerTheSaminator <TheSaminator@users.noreply.github.com>
Thu, 10 Feb 2022 23:10:50 +0000 (18:10 -0500)
src/jvmMain/kotlin/starshipfights/auth/providers.kt
src/jvmMain/kotlin/starshipfights/auth/utils.kt
src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt
src/jvmMain/kotlin/starshipfights/info/views_user.kt

index afc5046d2617a5ab28a57937b975566566ac1f67..6dcc8a95cd6230710ecaad80dcc355e67b3df586 100644 (file)
@@ -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(
index 4492cc5b6748ebf71163bc29cf7113eaab42f1ac..beabee31f9c430492298f72c6e5c63dae2285f8c 100644 (file)
@@ -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<Id<UserSession>>()?.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<Id<UserSession>> {
        override fun serialize(session: Id<UserSession>): String {
index cfab053e82a6384115c2f2a70ca3c1f193805de0..467f0d6876ea2c82c3054810ad0278c6bf1c387c 100644 (file)
@@ -14,12 +14,18 @@ import java.time.Instant
 data class User(
        @SerialName("_id")
        override val id: Id<User> = 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<User> {
        val discordAvatarUrl: String
index e9d868be1cbbc55870824ba9c4d42e9f63f951fa..0541d49c9089a7934282fc959f1152c5619c3e1b 100644 (file)
@@ -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") {