From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Stabrinai Date: Sun, 30 Jun 2024 20:46:42 +0800 Subject: [PATCH] Add config to verify signature only in online-mode diff --git a/src/main/java/me/earthme/luminol/config/modules/misc/PublickeyVerifyConfig.java b/src/main/java/me/earthme/luminol/config/modules/misc/PublickeyVerifyConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..e45ce3abf49684c911678abcefd69586246cc0e3 --- /dev/null +++ b/src/main/java/me/earthme/luminol/config/modules/misc/PublickeyVerifyConfig.java @@ -0,0 +1,21 @@ +package me.earthme.luminol.config.modules.misc; + +import me.earthme.luminol.config.ConfigInfo; +import me.earthme.luminol.config.EnumConfigCategory; +import me.earthme.luminol.config.IConfigModule; + +public class PublickeyVerifyConfig implements IConfigModule { + + @ConfigInfo(baseName = "enabled") + public static boolean enabled = false; + + @Override + public EnumConfigCategory getCategory() { + return EnumConfigCategory.MISC; + } + + @Override + public String getBaseName() { + return "verify_publickey_only_in_online_mode"; + } +} diff --git a/src/main/java/net/minecraft/world/entity/player/ProfilePublicKey.java b/src/main/java/net/minecraft/world/entity/player/ProfilePublicKey.java index 6a7d7fad990fc44fdda6849d43dad141e61f7f37..dd470577fe314154b5a3677851eef95ebd151721 100644 --- a/src/main/java/net/minecraft/world/entity/player/ProfilePublicKey.java +++ b/src/main/java/net/minecraft/world/entity/player/ProfilePublicKey.java @@ -9,12 +9,15 @@ import java.time.Duration; import java.time.Instant; import java.util.Arrays; import java.util.UUID; + +import me.earthme.luminol.config.modules.misc.PublickeyVerifyConfig; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.ThrowingComponent; import net.minecraft.util.Crypt; import net.minecraft.util.ExtraCodecs; import net.minecraft.util.SignatureValidator; +import org.bukkit.Bukkit; public record ProfilePublicKey(ProfilePublicKey.Data data) { public static final Component EXPIRED_PROFILE_PUBLIC_KEY = Component.translatable("multiplayer.disconnect.expired_public_key"); @@ -23,7 +26,7 @@ public record ProfilePublicKey(ProfilePublicKey.Data data) { public static final Codec TRUSTED_CODEC = ProfilePublicKey.Data.CODEC.xmap(ProfilePublicKey::new, ProfilePublicKey::data); public static ProfilePublicKey createValidated(SignatureValidator servicesSignatureVerifier, UUID playerUuid, ProfilePublicKey.Data publicKeyData) throws ProfilePublicKey.ValidationException { - if (!publicKeyData.validateSignature(servicesSignatureVerifier, playerUuid)) { + if ((!PublickeyVerifyConfig.enabled || Bukkit.getServer().getOnlineMode()) && !publicKeyData.validateSignature(servicesSignatureVerifier, playerUuid)) { // Luminol - Verify signature only in online-mode throw new ProfilePublicKey.ValidationException(INVALID_SIGNATURE, org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PUBLIC_KEY_SIGNATURE); // Paper - kick event causes } else { return new ProfilePublicKey(publicKeyData);