From 30d4cc0dcdbaafcce7c66775cbd0178a676b22a8 Mon Sep 17 00:00:00 2001 From: booky10 Date: Sun, 12 May 2024 21:46:30 +0200 Subject: [PATCH] Don't verify checksums for yarn maven metadata at all This can't be reliably checked, as fabric's maven cache returns outdated files for a while after an update Closes #10 --- .../providers/BuildBasedMappingProvider.java | 12 ++++++++++-- .../mappings/providers/QuiltMappingProvider.java | 2 +- .../mappings/providers/YarnMappingProvider.java | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/dev/booky/stackdeobf/mappings/providers/BuildBasedMappingProvider.java b/common/src/main/java/dev/booky/stackdeobf/mappings/providers/BuildBasedMappingProvider.java index d8fda22..1342da4 100644 --- a/common/src/main/java/dev/booky/stackdeobf/mappings/providers/BuildBasedMappingProvider.java +++ b/common/src/main/java/dev/booky/stackdeobf/mappings/providers/BuildBasedMappingProvider.java @@ -46,6 +46,14 @@ protected MappingFormat getMappingFormat() { return MappingFormat.TINY_2; } + public VerifiableUrl.HashType getMetaHashType() { + return this.hashType; + } + + public VerifiableUrl.HashType getJarHashType() { + return this.hashType; + } + @Override protected CompletableFuture downloadMappings0(Path cacheDir, Executor executor) { String version = getFabricatedVersion(this.versionData); @@ -59,7 +67,7 @@ protected CompletableFuture downloadMappings0(Path cacheDir, Executor exec return CompletableFuture.completedFuture(null); } - return this.artifactInfo.buildVerifiableUrl(build, "jar", this.hashType, executor) + return this.artifactInfo.buildVerifiableUrl(build, "jar", this.getJarHashType(), executor) .thenCompose(verifiableUrl -> { LOGGER.info("Downloading {} mappings jar for build {}...", this.name, build); return verifiableUrl.get(executor); @@ -99,7 +107,7 @@ private CompletableFuture fetchLatestVersion(Path cacheDir, String mcVer } } - return this.artifactInfo.buildVerifiableMetaUrl(this.hashType, executor).thenCompose(verifiableUrl -> { + return this.artifactInfo.buildVerifiableMetaUrl(this.getMetaHashType(), executor).thenCompose(verifiableUrl -> { LOGGER.info("Fetching latest {} build...", this.name); return verifiableUrl.get(executor).thenApply(resp -> { Document document; diff --git a/common/src/main/java/dev/booky/stackdeobf/mappings/providers/QuiltMappingProvider.java b/common/src/main/java/dev/booky/stackdeobf/mappings/providers/QuiltMappingProvider.java index 8bfdb15..ff7e254 100644 --- a/common/src/main/java/dev/booky/stackdeobf/mappings/providers/QuiltMappingProvider.java +++ b/common/src/main/java/dev/booky/stackdeobf/mappings/providers/QuiltMappingProvider.java @@ -87,7 +87,7 @@ protected CompletableFuture downloadMappings0(Path cacheDir, Executor exec } return future - .thenCompose($ -> HASHED_MAPPINGS_ARTIFACT.buildVerifiableUrl(this.versionData.getId(), "jar", this.hashType, executor)) + .thenCompose($ -> HASHED_MAPPINGS_ARTIFACT.buildVerifiableUrl(this.versionData.getId(), "jar", this.getJarHashType(), executor)) .thenCompose(verifiableUrl -> { LOGGER.info("Downloading hashed {} mappings for {}...", this.name, this.versionData.getId()); return verifiableUrl.get(executor); diff --git a/common/src/main/java/dev/booky/stackdeobf/mappings/providers/YarnMappingProvider.java b/common/src/main/java/dev/booky/stackdeobf/mappings/providers/YarnMappingProvider.java index 4ddd7e4..b93333c 100644 --- a/common/src/main/java/dev/booky/stackdeobf/mappings/providers/YarnMappingProvider.java +++ b/common/src/main/java/dev/booky/stackdeobf/mappings/providers/YarnMappingProvider.java @@ -19,6 +19,12 @@ public class YarnMappingProvider extends BuildBasedMappingProvider { private static final String REPO_URL = System.getProperty("stackdeobf.yarn.repo-url", "https://maven.fabricmc.net"); + // default to false as fabric's maven repository sometimes + // returns invalid checksums after an update for maven-metadata.xml files; + // this should work around https://github.com/booky10/StackDeobfuscator/issues/10 + private static final boolean VERIFY_YARN_METADATA_CHECKSUMS = + Boolean.getBoolean("stackdeobf.yarn.verify-metadata-checksums"); + private static final MavenArtifactInfo MAPPINGS_ARTIFACT_V1 = MavenArtifactInfo.parse(REPO_URL, System.getProperty("stackdeobf.yarn.mappings-artifact.v1", "net.fabricmc:yarn")); private static final MavenArtifactInfo MAPPINGS_ARTIFACT_V2 = MavenArtifactInfo.parse(REPO_URL, @@ -62,6 +68,14 @@ private static VerifiableUrl.HashType getHashType(VersionData versionData) { ? VerifiableUrl.HashType.SHA1 : VerifiableUrl.HashType.SHA256; } + @Override + public VerifiableUrl.HashType getMetaHashType() { + if (!VERIFY_YARN_METADATA_CHECKSUMS) { + return VerifiableUrl.HashType.DUMMY; + } + return super.getMetaHashType(); + } + @Override protected MappingFormat getMappingFormat() { return getVersionFlags(this.versionData).contains(VersionFlag.NO_V2)