diff --git a/WebsiteBackend/src/de/steamwar/routes/Auth.kt b/WebsiteBackend/src/de/steamwar/routes/Auth.kt index 8a037ad5..19f300f0 100644 --- a/WebsiteBackend/src/de/steamwar/routes/Auth.kt +++ b/WebsiteBackend/src/de/steamwar/routes/Auth.kt @@ -20,13 +20,11 @@ package de.steamwar.routes import de.steamwar.ResponseError -import de.steamwar.config import de.steamwar.plugins.SWUserSession import de.steamwar.sql.SteamwarUser import io.ktor.client.HttpClient import io.ktor.client.engine.java.Java import io.ktor.client.plugins.contentnegotiation.ContentNegotiation -import io.ktor.client.plugins.defaultRequest import io.ktor.client.request.get import io.ktor.client.request.headers import io.ktor.client.statement.bodyAsText @@ -55,25 +53,6 @@ fun Route.configureAuth() { } } - post("/discord") { - val token = call.receiveText() - - val res = client.get("https://discord.com/api/v10/oauth2/@me") { - headers { - set("Authorization", "Bearer $token") - } - } - val resJson = Json.parseToJsonElement(res.bodyAsText()).jsonObject - val discordId = resJson["user"]?.jsonObject["id"]?.jsonPrimitive?.content ?: return@post - - SteamwarUser.clear() - val user = SteamwarUser.get(discordId.toLong()) ?: return@post - - - call.sessions.set(SWUserSession(user.getId())) - call.respond(ResponseUser.get(user)) - } - post { val request = call.receive() @@ -94,5 +73,35 @@ fun Route.configureAuth() { call.sessions.clear() call.respond(HttpStatusCode.NoContent) } + + route("/discord") { + post { + val token = call.receiveText() + + val res = client.get("https://discord.com/api/v10/oauth2/@me") { + headers { + append("Authorization", "Bearer $token") + } + } + val resJson = Json.parseToJsonElement(res.bodyAsText()).jsonObject + val discordId = resJson["user"]?.jsonObject["id"]?.jsonPrimitive?.content + + if (discordId == null) { + call.respond(HttpStatusCode.Forbidden, ResponseError("Invalid Discord token", "invalid")) + return@post + } + + SteamwarUser.clear() + val user = SteamwarUser.get(discordId.toLong()) + + if (user == null) { + call.respond(HttpStatusCode.Forbidden, ResponseError("Discord account not linked", "not_linked")) + return@post + } + + call.sessions.set(SWUserSession(user.getId())) + call.respond(ResponseUser.get(user)) + } + } } } \ No newline at end of file