From 198bea07cb0132a3c50eaed656e14ea7a5e9bf34 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 2 Aug 2021 22:06:24 +0200 Subject: [PATCH] microsoft account server joining --- .../data/accounts/types/MicrosoftAccount.kt | 3 ++- .../data/accounts/types/MojangAccount.kt | 17 ++---------- .../util/account/microsoft/AccountUtil.kt | 26 +++++++++++++++++++ 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/accounts/types/MicrosoftAccount.kt b/src/main/java/de/bixilon/minosoft/data/accounts/types/MicrosoftAccount.kt index b9cc2eb90..67fd8c232 100644 --- a/src/main/java/de/bixilon/minosoft/data/accounts/types/MicrosoftAccount.kt +++ b/src/main/java/de/bixilon/minosoft/data/accounts/types/MicrosoftAccount.kt @@ -18,6 +18,7 @@ import de.bixilon.minosoft.data.accounts.Account import de.bixilon.minosoft.data.accounts.AccountType import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.util.KUtil.asResourceLocation +import de.bixilon.minosoft.util.account.microsoft.AccountUtil import de.bixilon.minosoft.util.account.microsoft.MicrosoftOAuthUtils import java.util.* @@ -32,7 +33,7 @@ class MicrosoftAccount( override val type: ResourceLocation = RESOURCE_LOCATION override fun join(serverId: String) { - TODO() + AccountUtil.joinMojangServer(username, accessToken!!, uuid, serverId) } override fun logout() {} diff --git a/src/main/java/de/bixilon/minosoft/data/accounts/types/MojangAccount.kt b/src/main/java/de/bixilon/minosoft/data/accounts/types/MojangAccount.kt index b0d07f68e..012ae8a97 100644 --- a/src/main/java/de/bixilon/minosoft/data/accounts/types/MojangAccount.kt +++ b/src/main/java/de/bixilon/minosoft/data/accounts/types/MojangAccount.kt @@ -21,8 +21,8 @@ import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.util.KUtil.asResourceLocation import de.bixilon.minosoft.util.KUtil.asUUID import de.bixilon.minosoft.util.KUtil.nullCast -import de.bixilon.minosoft.util.KUtil.trim import de.bixilon.minosoft.util.KUtil.unsafeCast +import de.bixilon.minosoft.util.account.microsoft.AccountUtil import de.bixilon.minosoft.util.http.HTTP2.postJson import de.bixilon.minosoft.util.http.exceptions.AuthenticationException import de.bixilon.minosoft.util.logging.Log @@ -42,19 +42,7 @@ class MojangAccount( override val type: ResourceLocation = RESOURCE_LOCATION override fun join(serverId: String) { - val response = mutableMapOf( - "accessToken" to accessToken, - "selectedProfile" to uuid.trim(), - "serverId" to serverId, - ).postJson(MOJANG_URL_JOIN) - - - if (response.statusCode != 204) { - response.body!! - throw AuthenticationException(response.statusCode, response.body["errorMessage"]?.nullCast()) - } - - Log.log(LogMessageType.AUTHENTICATION, LogLevels.VERBOSE) { "Mojang server join successful (username=$username, serverId=$serverId)" } + AccountUtil.joinMojangServer(username, accessToken, uuid, serverId) } override fun logout() { @@ -109,7 +97,6 @@ class MojangAccount( companion object : AccountType(MojangAccount::class) { private const val MOJANG_URL_LOGIN = "https://authserver.mojang.com/authenticate" - private const val MOJANG_URL_JOIN = "https://sessionserver.mojang.com/session/minecraft/join" private const val MOJANG_URL_REFRESH = "https://authserver.mojang.com/refresh" private const val MOJANG_URL_INVALIDATE = "https://authserver.mojang.com/invalidate" override val RESOURCE_LOCATION: ResourceLocation = "minosoft:mojang_account".asResourceLocation() diff --git a/src/main/java/de/bixilon/minosoft/util/account/microsoft/AccountUtil.kt b/src/main/java/de/bixilon/minosoft/util/account/microsoft/AccountUtil.kt index 4d7c84b0e..65b50a45c 100644 --- a/src/main/java/de/bixilon/minosoft/util/account/microsoft/AccountUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/account/microsoft/AccountUtil.kt @@ -15,10 +15,20 @@ package de.bixilon.minosoft.util.account.microsoft import de.bixilon.minosoft.data.accounts.MojangAccountInfo import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition +import de.bixilon.minosoft.util.KUtil.nullCast +import de.bixilon.minosoft.util.KUtil.trim import de.bixilon.minosoft.util.KUtil.unsafeCast import de.bixilon.minosoft.util.http.HTTP2.getJson +import de.bixilon.minosoft.util.http.HTTP2.postJson +import de.bixilon.minosoft.util.http.exceptions.AuthenticationException +import de.bixilon.minosoft.util.logging.Log +import de.bixilon.minosoft.util.logging.LogLevels +import de.bixilon.minosoft.util.logging.LogMessageType +import java.util.* object AccountUtil { + private const val MOJANG_URL_JOIN = "https://sessionserver.mojang.com/session/minecraft/join" + fun getMojangAccountInfo(bearerToken: String): MojangAccountInfo { val response = ProtocolDefinition.MICROSOFT_ACCOUNT_GET_MOJANG_PROFILE_URL.getJson(mapOf( "Authorization" to "Bearer $bearerToken" @@ -38,4 +48,20 @@ object AccountUtil { name = response.body["name"].unsafeCast(), ) } + + fun joinMojangServer(username: String, accessToken: String, selectedProfile: UUID, serverId: String) { + val response = mutableMapOf( + "accessToken" to accessToken, + "selectedProfile" to selectedProfile.trim(), + "serverId" to serverId, + ).postJson(MOJANG_URL_JOIN) + + + if (response.statusCode != 204) { + response.body!! + throw AuthenticationException(response.statusCode, response.body["errorMessage"]?.nullCast()) + } + + Log.log(LogMessageType.AUTHENTICATION, LogLevels.VERBOSE) { "Mojang server join successful (username=$username, serverId=$serverId)" } + } }