From 30f19a655ac593f65734f0dd6b0677eff1a8f2e7 Mon Sep 17 00:00:00 2001 From: Evan Goode Date: Sun, 18 Aug 2024 00:12:38 -0400 Subject: [PATCH] Use /profiles/minecraft instead of /users/profiles/minecraft The authlib-injector spect does not require /users/profiles/minecraft to be implemented, so we should POST to /profiles/minecraft to get player UUIDs. --- .../legacy/fix/online/OnlineModeFix.java | 4 ++-- .../legacy/fix/online/SkinFix.java | 4 ++-- .../legacy/utils/api/MojangApi.java | 23 +++++++++++++++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/libraries/launcher/legacy/org/prismlauncher/legacy/fix/online/OnlineModeFix.java b/libraries/launcher/legacy/org/prismlauncher/legacy/fix/online/OnlineModeFix.java index 695732592..10a674d1e 100644 --- a/libraries/launcher/legacy/org/prismlauncher/legacy/fix/online/OnlineModeFix.java +++ b/libraries/launcher/legacy/org/prismlauncher/legacy/fix/online/OnlineModeFix.java @@ -79,12 +79,12 @@ public final class OnlineModeFix { throw new AssertionError("missing sessionId"); } - // sessionId hashas the form: + // sessionId has the form: // token:: String accessToken = sessionId.split(":")[1]; String uuid = null; - uuid = MojangApi.getUuid(user); + uuid = MojangApi.getUuid(user, proxy); if (uuid == null) { return new ByteArrayUrlConnection(("Couldn't find UUID of " + user).getBytes("utf-8")); } diff --git a/libraries/launcher/legacy/org/prismlauncher/legacy/fix/online/SkinFix.java b/libraries/launcher/legacy/org/prismlauncher/legacy/fix/online/SkinFix.java index d5b185450..8f2ad4185 100644 --- a/libraries/launcher/legacy/org/prismlauncher/legacy/fix/online/SkinFix.java +++ b/libraries/launcher/legacy/org/prismlauncher/legacy/fix/online/SkinFix.java @@ -80,7 +80,7 @@ final class SkinFix { if (capeOwner != null) { // since we do not need to process the image, open a direct connection bypassing // Handler - Texture texture = MojangApi.getTexture(MojangApi.getUuid(capeOwner), "CAPE"); + Texture texture = MojangApi.getTexture(MojangApi.getUuid(capeOwner, proxy), "CAPE"); if (texture == null) return null; @@ -91,7 +91,7 @@ final class SkinFix { } private static URLConnection getSkinConnection(String owner, Proxy proxy) throws IOException { - Texture texture = MojangApi.getTexture(MojangApi.getUuid(owner), "SKIN"); + Texture texture = MojangApi.getTexture(MojangApi.getUuid(owner, proxy), "SKIN"); if (texture == null) return null; diff --git a/libraries/launcher/legacy/org/prismlauncher/legacy/utils/api/MojangApi.java b/libraries/launcher/legacy/org/prismlauncher/legacy/utils/api/MojangApi.java index 977cb2769..4507950be 100644 --- a/libraries/launcher/legacy/org/prismlauncher/legacy/utils/api/MojangApi.java +++ b/libraries/launcher/legacy/org/prismlauncher/legacy/utils/api/MojangApi.java @@ -38,10 +38,15 @@ package org.prismlauncher.legacy.utils.api; import org.prismlauncher.legacy.utils.Base64; import org.prismlauncher.legacy.utils.api.ApiServers; import org.prismlauncher.legacy.utils.json.JsonParser; +import org.prismlauncher.legacy.utils.url.UrlUtils; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.Proxy; import java.net.URL; +import java.util.List; import java.util.Map; /** @@ -49,10 +54,20 @@ import java.util.Map; */ @SuppressWarnings("unchecked") public final class MojangApi { - public static String getUuid(String username) throws IOException { - try (InputStream in = new URL(ApiServers.getAccountURL() + "/users/profiles/minecraft/" + username).openStream()) { - Map map = (Map) JsonParser.parse(in); - return (String) map.get("id"); + public static String getUuid(String username, Proxy proxy) throws IOException { + URL url = new URL(ApiServers.getAccountURL() + "/profiles/minecraft"); + HttpURLConnection connection = (HttpURLConnection) UrlUtils.openConnection(url, proxy); + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Accept", "application/json"); + try (OutputStream os = connection.getOutputStream()) { + String payload = "[\"" + username + "\"]"; + os.write(payload.getBytes("utf-8")); + } + try (InputStream in = connection.getInputStream()) { + List> list = (List>) JsonParser.parse(in); + return (String) list.get(0).get("id"); } }