Extract authorization code
authorLanius Trolling <lanius@laniustrolling.dev>
Thu, 2 Mar 2023 16:10:34 +0000 (11:10 -0500)
committerLanius Trolling <lanius@laniustrolling.dev>
Thu, 2 Mar 2023 16:10:34 +0000 (11:10 -0500)
src/main/kotlin/info/mechyrdia/data/nations.kt
src/main/kotlin/info/mechyrdia/data/views_user.kt

index ef28bdfad308219aa3de6ac200ccaa63a5b4bda1..2882a14921a59aea4e48cba6ddc86f7b072e8fb8 100644 (file)
@@ -1,6 +1,7 @@
 package info.mechyrdia.data
 
 import com.github.agadar.nationstates.shard.NationShard
+import info.mechyrdia.OwnerNationId
 import info.mechyrdia.application
 import info.mechyrdia.auth.NSAPI
 import info.mechyrdia.auth.UserSession
@@ -10,6 +11,7 @@ import io.ktor.server.sessions.*
 import io.ktor.util.*
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
+import java.lang.NullPointerException
 
 @Serializable
 data class NationData(
@@ -60,6 +62,11 @@ suspend fun MutableMap<Id<NationData>, NationData>.getNation(id: Id<NationData>)
 
 private val callCurrentNationAttribute = AttributeKey<NationSession>("CurrentNation")
 
+fun ApplicationCall.ownerNationOnly() {
+       if (sessions.get<UserSession>()?.nationId != OwnerNationId)
+               throw NullPointerException("Hidden page")
+}
+
 suspend fun ApplicationCall.currentNation(): NationData? {
        attributes.getOrNull(callCurrentNationAttribute)?.let { sess ->
                return when (sess) {
index beaf1f90dbf276b2873d6269802200c274c35fda..f22b5120ec0d7524c3a00e519f58ab61375efad1 100644 (file)
@@ -50,10 +50,7 @@ suspend fun ApplicationCall.userPage(): HTML.() -> Unit {
 }
 
 suspend fun ApplicationCall.adminBanUserRoute(): Nothing {
-       val currNation = currentNation()
-       if (currNation?.id != OwnerNationId)
-               throw NullPointerException()
-       
+       ownerNationOnly()
        verifyCsrfToken()
        
        val bannedNation = nationCache.getNation(Id(parameters["id"]!!))
@@ -65,10 +62,7 @@ suspend fun ApplicationCall.adminBanUserRoute(): Nothing {
 }
 
 suspend fun ApplicationCall.adminUnbanUserRoute(): Nothing {
-       val currNation = currentNation()
-       if (currNation?.id != OwnerNationId)
-               throw NullPointerException()
-       
+       ownerNationOnly()
        verifyCsrfToken()
        
        val bannedNation = nationCache.getNation(Id(parameters["id"]!!))