From 88d09c0c2a4647990c61a6c62d85ca56d5d45d74 Mon Sep 17 00:00:00 2001 From: samolego <34912839+samolego@users.noreply.github.com> Date: Thu, 18 Aug 2022 10:02:20 +0200 Subject: [PATCH] Add allowed skin domains in config --- gradle.properties | 2 +- .../fabrictailor/client/ClientTailor.java | 1 - .../fabrictailor/config/TailorConfig.java | 17 +++++++++++++++ ...ecraftSessionService_AllSkinsAcceptor.java | 21 ++++++++++++++++--- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index cd9ec89..a13d11f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ loader_version=0.14.9 fabric_version=0.59.0+1.19.2 quilt_mappings=3 # Mod Properties -mod_version=2.0.0 +mod_version=2.0.1 maven_group=org.samo_lego archives_base_name=fabrictailor # Dependencies diff --git a/src/main/java/org/samo_lego/fabrictailor/client/ClientTailor.java b/src/main/java/org/samo_lego/fabrictailor/client/ClientTailor.java index 00ca1de..adbf574 100644 --- a/src/main/java/org/samo_lego/fabrictailor/client/ClientTailor.java +++ b/src/main/java/org/samo_lego/fabrictailor/client/ClientTailor.java @@ -56,7 +56,6 @@ public void onInitializeClient() { // Reset values ClientLoginConnectionEvents.DISCONNECT.register((handler, server) -> { - System.out.println("Disconnected from server"); TAILORED_SERVER = false; ALLOW_DEFAULT_SKIN = true; forceOpen = false; diff --git a/src/main/java/org/samo_lego/fabrictailor/config/TailorConfig.java b/src/main/java/org/samo_lego/fabrictailor/config/TailorConfig.java index 27cf3cd..b6c685c 100644 --- a/src/main/java/org/samo_lego/fabrictailor/config/TailorConfig.java +++ b/src/main/java/org/samo_lego/fabrictailor/config/TailorConfig.java @@ -16,6 +16,7 @@ import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; +import java.util.Set; import static org.samo_lego.fabrictailor.FabricTailor.MOD_ID; import static org.samo_lego.fabrictailor.FabricTailor.configFile; @@ -52,6 +53,22 @@ public class TailorConfig implements IBrigadierConfigurator { @SerializedName("custom_skin_server") public String customSkinServer = ""; + @SerializedName("allowed_texture_domains") + public Set allowedTextureDomains = Set.of( + "minecraft.net", + "mojang.com", + "crafatar.com", + "imgur.com", + "githubusercontent.com", + "minecraftskins.com", + "mc-heads.net", + "ely.by", + "namemc.com", + "planetminecraft.com", + "googleusercontent.com", + "nocookie.net" + ); + @Override public void save() { try (Writer writer = new OutputStreamWriter(new FileOutputStream(configFile), StandardCharsets.UTF_8)) { diff --git a/src/main/java/org/samo_lego/fabrictailor/mixin/client/MYggDrasilMinecraftSessionService_AllSkinsAcceptor.java b/src/main/java/org/samo_lego/fabrictailor/mixin/client/MYggDrasilMinecraftSessionService_AllSkinsAcceptor.java index c19e791..9d509b0 100644 --- a/src/main/java/org/samo_lego/fabrictailor/mixin/client/MYggDrasilMinecraftSessionService_AllSkinsAcceptor.java +++ b/src/main/java/org/samo_lego/fabrictailor/mixin/client/MYggDrasilMinecraftSessionService_AllSkinsAcceptor.java @@ -1,5 +1,6 @@ package org.samo_lego.fabrictailor.mixin.client; +import com.google.common.net.InternetDomainName; import com.mojang.authlib.properties.Property; import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService; import org.spongepowered.asm.mixin.Mixin; @@ -7,6 +8,11 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.net.URI; + +import static org.samo_lego.fabrictailor.FabricTailor.config; @Mixin(value = YggdrasilMinecraftSessionService.class, remap = false) public class MYggDrasilMinecraftSessionService_AllSkinsAcceptor { @@ -16,9 +22,18 @@ private void ft_enableInsecureValue(Property property, CallbackInfoReturnable cir) { - cir.setReturnValue(true); + @Inject(method = "isAllowedTextureDomain", at = @At("TAIL"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) + private static void ft_allowAllTextureDomains(String url, CallbackInfoReturnable cir, URI uri, String domain) { + if (url.startsWith("file://")) { + cir.setReturnValue(true); + return; + } + + String topDomain = InternetDomainName.from(domain) + .topDomainUnderRegistrySuffix() + .toString() + .toLowerCase(); + cir.setReturnValue(config.allowedTextureDomains.contains(topDomain)); } @ModifyVariable(method = "getTextures", at = @At("HEAD"), argsOnly = true)