debug discord login (6x)

This commit is contained in:
dalbodeule 2024-08-11 16:28:26 +09:00
parent 25b835456e
commit a1e44c3bb1
No known key found for this signature in database
GPG Key ID: EFA860D069C9FA65

View File

@ -21,6 +21,7 @@ import io.ktor.server.sessions.*
import io.ktor.server.websocket.* import io.ktor.server.websocket.*
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.slf4j.LoggerFactory
import space.mori.chzzk_bot.common.services.UserService import space.mori.chzzk_bot.common.services.UserService
import space.mori.chzzk_bot.webserver.routes.* import space.mori.chzzk_bot.webserver.routes.*
import java.time.Duration import java.time.Duration
@ -33,6 +34,8 @@ const val naverMeAPIURL = "https://openapi.naver.com/v1/nid/me"
val redirects = mutableMapOf<String, String>() val redirects = mutableMapOf<String, String>()
val logger = LoggerFactory.getLogger("ktorMain")
val server = embeddedServer(Netty, port = 8080, ) { val server = embeddedServer(Netty, port = 8080, ) {
install(WebSockets) { install(WebSockets) {
pingPeriod = Duration.ofSeconds(15) pingPeriod = Duration.ofSeconds(15)
@ -73,13 +76,14 @@ val server = embeddedServer(Netty, port = 8080, ) {
client = applicationHttpClient client = applicationHttpClient
} }
oauth("auth-oauth-discord") { oauth("auth-oauth-discord") {
urlProvider = { "${dotenv["HOST"]}/auth/discord/callback" } urlProvider = { "${dotenv["HOST"]}/auth/callback/discord" }
providerLookup = { OAuthServerSettings.OAuth2ServerSettings( providerLookup = { OAuthServerSettings.OAuth2ServerSettings(
name = "discord", name = "discord",
authorizeUrl = "https://discord.com/oauth2/authorize", authorizeUrl = "https://discord.com/oauth2/authorize",
accessTokenUrl = "https://discord.com/api/oauth2/token", accessTokenUrl = "https://discord.com/api/oauth2/token",
clientId = dotenv["DISCORD_CLIENT_ID"], clientId = dotenv["DISCORD_CLIENT_ID"],
clientSecret = dotenv["DISCORD_CLIENT_SECRET"], clientSecret = dotenv["DISCORD_CLIENT_SECRET"],
requestMethod = HttpMethod.Post,
defaultScopes = listOf(), defaultScopes = listOf(),
extraAuthParameters = listOf( extraAuthParameters = listOf(
Pair("permissions", "826781355072"), Pair("permissions", "826781355072"),
@ -103,39 +107,51 @@ val server = embeddedServer(Netty, port = 8080, ) {
get("/login/discord") { get("/login/discord") {
} }
get("/discord/callback") { get("/callback/discord") {
val principal = call.principal<OAuthAccessTokenResponse.OAuth2>() println("CALLBACK")
val session = call.sessions.get<UserSession>() try {
val user = session?.id?.let { UserService.getUserWithNaverId(it)} val principal = call.principal<OAuthAccessTokenResponse.OAuth2>()
val session = call.sessions.get<UserSession>()
val user = session?.id?.let { UserService.getUserWithNaverId(it) }
if(principal != null && session != null && user != null) { if(principal != null && session != null && user != null) {
val accessToken = principal.accessToken try {
val userInfo = getDiscordUser(accessToken) val accessToken = principal.accessToken
val guilds = getUserGuilds(accessToken) val userInfo = getDiscordUser(accessToken)
val guilds = getUserGuilds(accessToken)
userInfo?.user?.id?.toLong()?.let { id -> UserService.updateUser(user, id) } println(userInfo)
println(guilds)
call.sessions.set(UserSession( userInfo?.user?.id?.toLong()?.let { id -> UserService.updateUser(user, id) }
session.state,
session.id,
guilds.map { it.id }
))
redirects[principal.state]?.let { redirect -> call.sessions.set(UserSession(
call.respondRedirect(redirect) session.state,
return@get session.id,
guilds.map { it.id }
))
redirects[principal.state]?.let { redirect ->
call.respondRedirect(redirect)
return@get
}
call.respondRedirect(getFrontendURL(""))
} catch(e: Exception) {
logger.debug(e.toString())
}
} else {
call.respondRedirect(getFrontendURL(""))
} }
} catch(e: Exception) {
call.respondRedirect(getFrontendURL("")) println(e.stackTrace)
} else {
call.respondRedirect(getFrontendURL(""))
} }
} }
} }
// naver login // naver login
authenticate("auth-oauth-naver") { authenticate("auth-oauth-naver") {
get("/login/discord") { get("/login") {
} }
get("/callback") { get("/callback") {