aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
diff options
context:
space:
mode:
authorYasin <a.piri@hotmail.de>2023-10-09 12:58:02 +0200
committerYasin <a.piri@hotmail.de>2023-10-09 12:58:02 +0200
commitbd3f0329d0e391bd84b5f9e3ff207d9dd9815853 (patch)
tree2fd1d1ef625f57acc2e4916c967d8d2393844798 /src/main/java/de/hysky/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
parent2315b90da8117f28f66348927afdb621ee4fc815 (diff)
downloadSkyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.tar.gz
Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.tar.bz2
Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.zip
new pr because fixing merge conflict would take too long
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java b/src/main/java/de/hysky/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
new file mode 100644
index 00000000..d38e40cc
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixin/YggdrasilServicesKeyInfoMixin.java
@@ -0,0 +1,59 @@
+package de.hysky.skyblocker.mixin;
+
+import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
+import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
+import com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo;
+
+import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntList;
+import de.hysky.skyblocker.utils.Utils;
+import org.slf4j.Logger;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.Unique;
+import org.spongepowered.asm.mixin.injection.At;
+
+import java.util.Base64;
+import java.util.Map;
+
+@Mixin(value = YggdrasilServicesKeyInfo.class, remap = false)
+public class YggdrasilServicesKeyInfoMixin {
+ @Shadow
+ @Final
+ private static Logger LOGGER;
+ @Unique
+ private static final Map<String, String> REPLACEMENT_MAP = Map.of();
+ @Unique
+ private static final IntList ERRONEUS_SIGNATURE_HASHES = new IntArrayList();
+
+ @WrapOperation(method = "validateProperty", at = @At(value = "INVOKE", target = "Ljava/util/Base64$Decoder;decode(Ljava/lang/String;)[B", remap = false), remap = false)
+ private byte[] skyblocker$replaceKnownWrongBase64(Base64.Decoder decoder, String signature, Operation<byte[]> decode) {
+ try {
+ return decode.call(decoder, signature);
+ } catch (IllegalArgumentException e) {
+ try {
+ return decode.call(decoder, signature.replaceAll("[^A-Za-z0-9+/=]", ""));
+ } catch (IllegalArgumentException e2) {
+ if (Utils.isOnSkyblock()) {
+ if (REPLACEMENT_MAP.containsKey(signature)) {
+ return decode.call(decoder, REPLACEMENT_MAP.get(signature));
+ }
+ int signatureHashCode = signature.hashCode();
+ if (!ERRONEUS_SIGNATURE_HASHES.contains(signatureHashCode)) {
+ ERRONEUS_SIGNATURE_HASHES.add(signatureHashCode);
+ LOGGER.warn("[Skyblocker Base64 Fixer] Failed to decode base64 string No.{}: {}", ERRONEUS_SIGNATURE_HASHES.size() - 1, signature);
+ } else {
+ LOGGER.warn("[Skyblocker Base64 Fixer] Failed to decode the base64 string No.{} again", ERRONEUS_SIGNATURE_HASHES.indexOf(signatureHashCode));
+ }
+ }
+ }
+ throw e;
+ }
+ }
+
+ @WrapOperation(method = "validateProperty", remap = false, at = @At(value = "INVOKE", target = "org/slf4j/Logger.error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false))
+ private void skyblocker$dontLogFailedSignatureValidation(Logger logger, String message, Object property, Object exception, Operation<Void> operation) {
+ if (!Utils.isOnHypixel()) operation.call(logger, message, property, exception);
+ }
+} \ No newline at end of file