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:
@@ -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.InventoryContentSerializer_v748;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventorySlotSerializer_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.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.AnvilDamagePacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket;
|
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.InventoryContentPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.LabTablePacket;
|
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.MapCreateLockedCopyPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.MapInfoRequestPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.MapInfoRequestPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket;
|
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.SimpleEventPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.SubChunkRequestPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.SubChunkRequestPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.SubClientLoginPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.SubClientLoginPacket;
|
||||||
import org.cloudburstmc.protocol.common.util.Preconditions;
|
|
||||||
import org.cloudburstmc.protocol.common.util.VarInts;
|
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.
|
* 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")
|
@SuppressWarnings("unchecked")
|
||||||
static BedrockCodec processCodec(BedrockCodec codec) {
|
static BedrockCodec processCodec(BedrockCodec codec) {
|
||||||
BedrockPacketSerializer<BossEventPacket> bossEventSerializer;
|
BedrockPacketSerializer<BossEventPacket> bossEventSerializer;
|
||||||
@@ -349,11 +305,6 @@ class CodecProcessor {
|
|||||||
.updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER);
|
.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")) {
|
if (!Boolean.getBoolean("Geyser.ReceiptPackets")) {
|
||||||
codecBuilder.updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER);
|
codecBuilder.updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER);
|
||||||
codecBuilder.updateSerializer(PurchaseReceiptPacket.class, IGNORED_SERIALIZER);
|
codecBuilder.updateSerializer(PurchaseReceiptPacket.class, IGNORED_SERIALIZER);
|
||||||
|
|||||||
Reference in New Issue
Block a user