From: TheSaminator Date: Tue, 8 Feb 2022 22:59:36 +0000 (-0500) Subject: Add avatars and attempt to fix user session saving X-Git-Url: https://gitweb.starshipfights.net/?a=commitdiff_plain;h=117ae4bad7730d931f76ec106a664d0062f68dad;p=starship-fights Add avatars and attempt to fix user session saving --- diff --git a/plan/oauth-logo.png b/plan/oauth-logo.png index f0940b4..0a6186c 100644 Binary files a/plan/oauth-logo.png and b/plan/oauth-logo.png differ diff --git a/plan/oauth-logo.svg b/plan/oauth-logo.svg new file mode 100644 index 0000000..f364dc7 --- /dev/null +++ b/plan/oauth-logo.svg @@ -0,0 +1,117 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/src/jvmMain/kotlin/starshipfights/auth/providers.kt b/src/jvmMain/kotlin/starshipfights/auth/providers.kt index a37944f..e050fb8 100644 --- a/src/jvmMain/kotlin/starshipfights/auth/providers.kt +++ b/src/jvmMain/kotlin/starshipfights/auth/providers.kt @@ -234,6 +234,7 @@ object TestAuthProvider : AuthProvider { discordId = credentials.name, discordName = "", discordDiscriminator = "0000", + discordAvatar = null, profileName = "Test User" ).also { User.put(it) @@ -387,14 +388,17 @@ class ProductionAuthProvider(val discordLogin: DiscordLogin) : AuthProvider { val discordId = (userInfo["id"] as? JsonPrimitive)?.content ?: redirect("/login") val discordUsername = (userInfo["username"] as? JsonPrimitive)?.content ?: redirect("/login") val discordDiscriminator = (userInfo["discriminator"] as? JsonPrimitive)?.content ?: redirect("/login") + val discordAvatar = (userInfo["avatar"] as? JsonPrimitive)?.content val user = User.locate(User::discordId eq discordId)?.copy( discordName = discordUsername, - discordDiscriminator = discordDiscriminator + discordDiscriminator = discordDiscriminator, + discordAvatar = discordAvatar ) ?: User( discordId = discordId, discordName = discordUsername, discordDiscriminator = discordDiscriminator, + discordAvatar = discordAvatar, profileName = discordUsername ) @@ -405,10 +409,8 @@ class ProductionAuthProvider(val discordLogin: DiscordLogin) : AuthProvider { expirationMillis = System.currentTimeMillis() + 86_400_000 ) - launch { - User.put(user) - UserSession.put(userSession) - } + launch { User.put(user) } + launch { UserSession.put(userSession) } call.sessions.set(userSession.id) redirect("/me") diff --git a/src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt b/src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt index b5b9b19..019e1e3 100644 --- a/src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt +++ b/src/jvmMain/kotlin/starshipfights/data/auth/user_sessions.kt @@ -15,9 +15,15 @@ data class User( val discordId: String, val discordName: String, val discordDiscriminator: String, + val discordAvatar: String?, val profileName: String, val status: UserStatus = UserStatus.AVAILABLE, ) : DataDocument { + val discordAvatarUrl: String + get() = discordAvatar?.let { + "https://cdn.discordapp.com/avatars/$discordId/$it." + (if (it.startsWith("a_")) "gif" else "png") + "?size=256" + } ?: "https://cdn.discordapp.com/embed/avatars/${discordDiscriminator.last().digitToInt() % 5}.png" + companion object Table : DocumentTable by DocumentTable.create({ unique(User::discordId) }) diff --git a/src/jvmMain/kotlin/starshipfights/info/views_user.kt b/src/jvmMain/kotlin/starshipfights/info/views_user.kt index 6c6df5a..02716bf 100644 --- a/src/jvmMain/kotlin/starshipfights/info/views_user.kt +++ b/src/jvmMain/kotlin/starshipfights/info/views_user.kt @@ -31,31 +31,28 @@ suspend fun ApplicationCall.userPage(): HTML.() -> Unit { val admirals = Admiral.select(Admiral::owningUser eq user.id).toList() return page( - user.profileName, standardNavBar(), if (isCurrentUser) - PageNavSidebar( - listOf( - NavLink("/admiral/new", "New Admiral"), - ) - ) - else null - ) { - section { - h1 { +user.profileName } + user.profileName, standardNavBar(), CustomSidebar { + img(src = user.discordAvatarUrl) p { + style = "text-align:center" +user.discordName +"#" +user.discordDiscriminator } - - if (isCurrentUser) + if (user.discordId == CurrentConfiguration.discordClient?.ownerId) p { - +"This user is you!" + style = "text-align:center" + +"Site Owner" } - - if (user.discordId == CurrentConfiguration.discordClient?.ownerId) + if (isCurrentUser) p { - +"This user is the owner of the site!" + style = "text-align:center" + a(href = "/admiral/new") { +"Create New Admiral" } } + } + ) { + section { + h1 { +user.profileName } if (admirals.isNotEmpty()) { p {