1
0
mirror of https://github.com/GeyserMC/Geyser.git synced 2025-12-19 14:59:27 +00:00

Use new auth payload

This commit is contained in:
onebeastchris
2025-11-21 18:22:51 +01:00
parent c0b4579436
commit b7e5f63672

View File

@@ -42,11 +42,6 @@ import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.MobArmorEquipment
import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventoryContentSerializer_v748;
import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventorySlotSerializer_v748;
import org.cloudburstmc.protocol.bedrock.codec.v776.serializer.BossEventSerializer_v776;
import org.cloudburstmc.protocol.bedrock.codec.v818.serializer.LoginSerializer_v818;
import org.cloudburstmc.protocol.bedrock.data.auth.AuthPayload;
import org.cloudburstmc.protocol.bedrock.data.auth.AuthType;
import org.cloudburstmc.protocol.bedrock.data.auth.CertificateChainPayload;
import org.cloudburstmc.protocol.bedrock.data.auth.TokenPayload;
import org.cloudburstmc.protocol.bedrock.packet.AnvilDamagePacket;
import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket;
import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket;
@@ -64,7 +59,6 @@ import org.cloudburstmc.protocol.bedrock.packet.GameTestRequestPacket;
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
import org.cloudburstmc.protocol.bedrock.packet.LabTablePacket;
import org.cloudburstmc.protocol.bedrock.packet.LoginPacket;
import org.cloudburstmc.protocol.bedrock.packet.MapCreateLockedCopyPacket;
import org.cloudburstmc.protocol.bedrock.packet.MapInfoRequestPacket;
import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket;
@@ -89,13 +83,7 @@ import org.cloudburstmc.protocol.bedrock.packet.SettingsCommandPacket;
import org.cloudburstmc.protocol.bedrock.packet.SimpleEventPacket;
import org.cloudburstmc.protocol.bedrock.packet.SubChunkRequestPacket;
import org.cloudburstmc.protocol.bedrock.packet.SubClientLoginPacket;
import org.cloudburstmc.protocol.common.util.Preconditions;
import org.cloudburstmc.protocol.common.util.VarInts;
import org.jose4j.json.JsonUtil;
import org.jose4j.lang.JoseException;
import java.util.List;
import java.util.Map;
/**
* Processes the Bedrock codec to remove or modify unused or unsafe packets and fields.
@@ -254,38 +242,6 @@ class CodecProcessor {
}
};
private static final BedrockPacketSerializer<LoginPacket> LOGIN_PACKET_BEDROCK_PACKET_SERIALIZER = new LoginSerializer_v818() {
@Override
protected AuthPayload readAuthJwt(String authJwt) {
try {
Map<String, Object> payload = JsonUtil.parseJson(authJwt);
Preconditions.checkArgument(payload.containsKey("AuthenticationType"), "Missing AuthenticationType in JWT");
int authTypeOrdinal = ((Number)payload.get("AuthenticationType")).intValue();
if (authTypeOrdinal >= 0 && authTypeOrdinal < AuthType.values().length - 1) {
AuthType authType = AuthType.values()[authTypeOrdinal + 1];
if (payload.containsKey("Certificate") && payload.get("Certificate") instanceof String certJson && !certJson.isEmpty()) {
Map<String, Object> certData = JsonUtil.parseJson(certJson);
if (certData.containsKey("chain") && certData.get("chain") instanceof List) {
List<String> chain = (List)certData.get("chain");
return new CertificateChainPayload(chain, authType);
} else {
throw new IllegalArgumentException("Invalid Certificate chain in JWT");
}
} else if (payload.containsKey("Token") && payload.get("Token") instanceof String token && !token.isEmpty()) {
return new TokenPayload(token, authType);
} else {
throw new IllegalArgumentException("Invalid AuthPayload in JWT");
}
} else {
throw new IllegalArgumentException("Invalid AuthenticationType ordinal: " + authTypeOrdinal);
}
} catch (JoseException e) {
throw new IllegalArgumentException("Failed to parse auth payload", e);
}
}
};
@SuppressWarnings("unchecked")
static BedrockCodec processCodec(BedrockCodec codec) {
BedrockPacketSerializer<BossEventPacket> bossEventSerializer;
@@ -349,11 +305,6 @@ class CodecProcessor {
.updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER);
}
// TODO remove once global api is updated
if (codec.getProtocolVersion() >= 818) {
codecBuilder.updateSerializer(LoginPacket.class, LOGIN_PACKET_BEDROCK_PACKET_SERIALIZER);
}
if (!Boolean.getBoolean("Geyser.ReceiptPackets")) {
codecBuilder.updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER);
codecBuilder.updateSerializer(PurchaseReceiptPacket.class, IGNORED_SERIALIZER);