From 2335a093911b14d84b37d55137e8b93ecb5eb962 Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Sat, 10 Aug 2024 17:16:36 +0900 Subject: [PATCH] debug discordHook logics, session fix. - DiscordHook normal respond is not defined - add MariadbSessionStorage --- .../space/mori/chzzk_bot/common/Connector.kt | 3 +- .../mori/chzzk_bot/common/models/Session.kt | 18 +++++++++++ .../space/mori/chzzk_bot/webserver/Main.kt | 2 +- .../webserver/MariadbSessionStorage.kt | 32 +++++++++++++++++++ .../webserver/routes/ApiDiscordRoutes.kt | 4 +-- 5 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 common/src/main/kotlin/space/mori/chzzk_bot/common/models/Session.kt create mode 100644 webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/MariadbSessionStorage.kt diff --git a/common/src/main/kotlin/space/mori/chzzk_bot/common/Connector.kt b/common/src/main/kotlin/space/mori/chzzk_bot/common/Connector.kt index 0507fbe..6b1ea25 100644 --- a/common/src/main/kotlin/space/mori/chzzk_bot/common/Connector.kt +++ b/common/src/main/kotlin/space/mori/chzzk_bot/common/Connector.kt @@ -34,7 +34,8 @@ object Connector { TimerConfigs, LiveStatuses, SongLists, - SongConfigs + SongConfigs, + Sessions ) transaction { diff --git a/common/src/main/kotlin/space/mori/chzzk_bot/common/models/Session.kt b/common/src/main/kotlin/space/mori/chzzk_bot/common/models/Session.kt new file mode 100644 index 0000000..afb50a6 --- /dev/null +++ b/common/src/main/kotlin/space/mori/chzzk_bot/common/models/Session.kt @@ -0,0 +1,18 @@ +package space.mori.chzzk_bot.common.models + +import org.jetbrains.exposed.dao.IntEntity +import org.jetbrains.exposed.dao.IntEntityClass +import org.jetbrains.exposed.dao.id.EntityID +import org.jetbrains.exposed.dao.id.IntIdTable + +object Sessions: IntIdTable("session") { + val key = text("key") + val value = text("value") +} + +class Session(id: EntityID) : IntEntity(id) { + companion object : IntEntityClass(Sessions) + + var key by Sessions.key + var value by Sessions.value +} \ No newline at end of file diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/Main.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/Main.kt index e78aa1a..cbbd00c 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/Main.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/Main.kt @@ -47,7 +47,7 @@ val server = embeddedServer(Netty, port = 8080, ) { }) } install(Sessions) { - cookie("user_session", storage = SessionStorageMemory()) {} + cookie("user_session", storage = MariadbSessionStorage()) {} } install(Authentication) { oauth("auth-oauth-naver") { diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/MariadbSessionStorage.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/MariadbSessionStorage.kt new file mode 100644 index 0000000..056391f --- /dev/null +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/MariadbSessionStorage.kt @@ -0,0 +1,32 @@ +package space.mori.chzzk_bot.webserver + +import io.ktor.server.sessions.* +import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq +import org.jetbrains.exposed.sql.transactions.transaction +import space.mori.chzzk_bot.common.models.Session +import space.mori.chzzk_bot.common.models.Sessions as SessionTable + +class MariadbSessionStorage: SessionStorage { + override suspend fun invalidate(id: String) { + return transaction { + val session = Session.find( + SessionTable.key eq id + ).firstOrNull() + session?.delete() + } + } + + override suspend fun read(id: String): String { + return transaction { + val session = Session.find(SessionTable.key eq id).firstOrNull() + ?: throw NoSuchElementException("Session $id not found") + session.value + } + } + + override suspend fun write(id: String, value: String) { + Session.findSingleByAndUpdate(SessionTable.key eq id) { + it.value = value + } + } +} \ No newline at end of file diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiDiscordRoutes.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiDiscordRoutes.kt index f710a95..559ba14 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiDiscordRoutes.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiDiscordRoutes.kt @@ -49,12 +49,12 @@ fun Route.apiDiscordRoutes() { return@get } - + call.respond(HttpStatusCode.OK) } } } data class DiscordRequireRegisterDTO( val user: String, - val passkey: String + val token: String ) \ No newline at end of file