From be01a0dc23b6802f3274a51c0253131c631a1b21 Mon Sep 17 00:00:00 2001 From: Matthew Messinger Date: Tue, 3 Nov 2026 20:29:17 -0500 Subject: [PATCH] Remove checksum from skin upload metadata Texture upload URLs act as their own hash, so checksum has never been needed. If skin history doesn't come back sorted, open an issue on the skin server. # Conflicts: # src/main/java/com/minelittlepony/hdskins/server/ValhallaSkinServer.java --- .../hdskins/server/ValhallaSkinServer.java | 26 +++---------------- .../hdskins/util/net/URIUtil.java | 4 --- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/minelittlepony/hdskins/server/ValhallaSkinServer.java b/src/main/java/com/minelittlepony/hdskins/server/ValhallaSkinServer.java index 6894b216..f92139cf 100644 --- a/src/main/java/com/minelittlepony/hdskins/server/ValhallaSkinServer.java +++ b/src/main/java/com/minelittlepony/hdskins/server/ValhallaSkinServer.java @@ -15,14 +15,12 @@ import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.util.CommonColors; -import net.minecraft.util.Util; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.http.HttpRequest; import java.time.Duration; import java.util.*; -import java.util.function.Function; import org.jetbrains.annotations.Nullable; @@ -151,7 +149,7 @@ public void uploadSkin(SkinUpload upload) throws IOException, AuthenticationExce MoreHttpResponses.execute(FileTypes.multiPart() .field("type", fileUpload.type().getParameterizedName()) .field("file", fileUpload.file()) - .field("meta", new Gson().toJson(addChecksum(fileUpload.metadata(), fileUpload.file().toUri()))) + .field("meta", new Gson().toJson(fileUpload.metadata())) .build(builder.newHttpBuilder(buildBackendUri("textures"))::PUT) .build()) .requireOk(); @@ -160,7 +158,7 @@ public void uploadSkin(SkinUpload upload) throws IOException, AuthenticationExce .POST(FileTypes.json(Map.of( "type", uriUpload.type().getParameterizedName(), "file", uriUpload.uri().toString(), - "meta", addChecksum(uriUpload.metadata(), uriUpload.uri()) + "meta", uriUpload.metadata() ))) .header(FileTypes.HEADER_CONTENT_TYPE, FileTypes.APPLICATION_JSON) .build()) @@ -168,15 +166,6 @@ public void uploadSkin(SkinUpload upload) throws IOException, AuthenticationExce }); } - private Map addChecksum(Map metadata, URI uri) throws IOException { - if (metadata.containsKey("checksum")) { - return metadata; - } - metadata = new HashMap<>(metadata); - metadata.put("checksum", URIUtil.getChecksum(uri)); - return Map.copyOf(metadata); - } - @Override public void authorize(Session session) throws IOException, AuthenticationException { if (accessToken != null) { @@ -203,19 +192,10 @@ public Optional> loadProfile(Session session) throws IOExce return doAuthorizedRequest(session, (builder) -> MoreHttpResponses.execute(builder.newHttpBuilder(buildBackendUri("history")) .GET() .build()).accept(r -> r.json(Textures.class, "Server sent invalid profile response")).map(p -> { - Function> textures = Util.memoize(type -> { - Set visited = new HashSet<>(); - return p.textures().getOrDefault(type, List.of()) - .stream() - .filter(texture -> texture.metadata().containsKey("checksum")) - .sorted(Comparator.comparing(t -> -t.startTime)) - .filter(texture -> visited.add(texture.metadata().get("checksum") + texture.getModel())) - .toList(); - }); return new SkinServerProfile() { @Override public List getSkins(SkinType type) { - return textures.apply(type); + return p.textures().getOrDefault(type, List.of()); } @Override diff --git a/src/main/java/com/minelittlepony/hdskins/util/net/URIUtil.java b/src/main/java/com/minelittlepony/hdskins/util/net/URIUtil.java index 3aeb58cb..9cf060ef 100644 --- a/src/main/java/com/minelittlepony/hdskins/util/net/URIUtil.java +++ b/src/main/java/com/minelittlepony/hdskins/util/net/URIUtil.java @@ -35,10 +35,6 @@ String toURIComponent() { } } - static String getChecksum(URI uri) throws IOException { - return Hashing.farmHashFingerprint64().hashBytes(getBytes(uri)).toString(); - } - static byte[] getBytes(URI uri) throws IOException { if ("file".equalsIgnoreCase(uri.getScheme())) { return Files.readAllBytes(Path.of(uri));