Merge branch 'main' into dependabot/maven/com.puppycrawl.tools-checkstyle-10.5.0

This commit is contained in:
games647
2022-12-19 09:05:22 +01:00
committed by GitHub
4 changed files with 48 additions and 34 deletions

View File

@ -233,11 +233,7 @@
<scope>provided</scope> <scope>provided</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>io.netty</groupId> <groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.geysermc.cumulus</groupId>
<artifactId>*</artifactId> <artifactId>*</artifactId>
</exclusion> </exclusion>
</exclusions> </exclusions>
@ -263,6 +259,12 @@
<artifactId>api</artifactId> <artifactId>api</artifactId>
<version>${geyser.version}</version> <version>${geyser.version}</version>
<scope>provided</scope> <scope>provided</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!--Provide premium placeholders--> <!--Provide premium placeholders-->

View File

@ -179,7 +179,8 @@ public class ProtocolLibListener extends PacketAdapter {
private boolean verifyNonce(Player sender, PacketContainer packet, private boolean verifyNonce(Player sender, PacketContainer packet,
ClientPublicKey clientPublicKey, byte[] expectedToken) { ClientPublicKey clientPublicKey, byte[] expectedToken) {
try { try {
if (MinecraftVersion.atOrAbove(new MinecraftVersion(1, 19, 0))) { if (MinecraftVersion.atOrAbove(new MinecraftVersion(1, 19, 0))
&& !MinecraftVersion.atOrAbove(new MinecraftVersion(1, 19, 3))) {
Either<byte[], ?> either = packet.getSpecificModifier(Either.class).read(0); Either<byte[], ?> either = packet.getSpecificModifier(Either.class).read(0);
if (clientPublicKey == null) { if (clientPublicKey == null) {
Optional<byte[]> left = either.left(); Optional<byte[]> left = either.left();
@ -222,27 +223,34 @@ public class ProtocolLibListener extends PacketAdapter {
plugin.removeSession(player.getAddress()); plugin.removeSession(player.getAddress());
PacketContainer packet = packetEvent.getPacket(); PacketContainer packet = packetEvent.getPacket();
val profileKey = packet.getOptionals(BukkitConverters.getWrappedPublicKeyDataConverter()) Optional<ClientPublicKey> clientKey = Optional.empty();
.optionRead(0); if (MinecraftVersion.atOrAbove(new MinecraftVersion(1, 19, 3))) {
// public key sent separate
clientKey = Optional.empty();
} else {
val profileKey = packet.getOptionals(BukkitConverters.getWrappedPublicKeyDataConverter())
.optionRead(0);
val clientKey = profileKey.flatMap(Function.identity()).flatMap(data -> { clientKey = profileKey.flatMap(Function.identity()).flatMap(data -> {
Instant expires = data.getExpireTime(); Instant expires = data.getExpireTime();
PublicKey key = data.getKey(); PublicKey key = data.getKey();
byte[] signature = data.getSignature(); byte[] signature = data.getSignature();
return Optional.of(ClientPublicKey.of(expires, key, signature)); return Optional.of(ClientPublicKey.of(expires, key, signature));
}); });
// start reading from index 1, because 0 is already used by the public key // start reading from index 1, because 0 is already used by the public key
Optional<UUID> sessionUUID = packet.getOptionals(Converters.passthrough(UUID.class)).readSafely(1); Optional<UUID> sessionUUID = packet.getOptionals(Converters.passthrough(UUID.class)).readSafely(1);
if (verifyClientKeys && sessionUUID.isPresent() && clientKey.isPresent() if (verifyClientKeys && sessionUUID.isPresent() && clientKey.isPresent()
&& verifyPublicKey(clientKey.get(), sessionUUID.get())) { && verifyPublicKey(clientKey.get(), sessionUUID.get())) {
// missing or incorrect // missing or incorrect
// expired always not allowed // expired always not allowed
player.kickPlayer(plugin.getCore().getMessage("invalid-public-key")); player.kickPlayer(plugin.getCore().getMessage("invalid-public-key"));
plugin.getLog().warn("Invalid public key from player {}", username); plugin.getLog().warn("Invalid public key from player {}", username);
return; return;
}
} }
plugin.getLog().trace("GameProfile {} with {} connecting", sessionKey, username); plugin.getLog().trace("GameProfile {} with {} connecting", sessionKey, username);
packetEvent.getAsyncMarker().incrementProcessingDelay(); packetEvent.getAsyncMarker().incrementProcessingDelay();

View File

@ -174,11 +174,7 @@
<scope>provided</scope> <scope>provided</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>io.netty</groupId> <groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.geysermc.cumulus</groupId>
<artifactId>*</artifactId> <artifactId>*</artifactId>
</exclusion> </exclusion>
</exclusions> </exclusions>
@ -204,6 +200,12 @@
<artifactId>api</artifactId> <artifactId>api</artifactId>
<version>${geyser.version}</version> <version>${geyser.version}</version>
<scope>provided</scope> <scope>provided</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!--Login plugin--> <!--Login plugin-->

View File

@ -85,7 +85,7 @@
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId> <artifactId>slf4j-jdk14</artifactId>
<version>2.0.0</version> <version>2.0.6</version>
</dependency> </dependency>
<!-- snakeyaml is present in Bungee, Spigot, Cauldron, so we could use this independent implementation --> <!-- snakeyaml is present in Bungee, Spigot, Cauldron, so we could use this independent implementation -->
@ -109,11 +109,7 @@
<scope>provided</scope> <scope>provided</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>io.netty</groupId> <groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.geysermc.cumulus</groupId>
<artifactId>*</artifactId> <artifactId>*</artifactId>
</exclusion> </exclusion>
</exclusions> </exclusions>
@ -139,6 +135,12 @@
<artifactId>api</artifactId> <artifactId>api</artifactId>
<version>${geyser.version}</version> <version>${geyser.version}</version>
<scope>provided</scope> <scope>provided</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!--Common component for contacting the Mojang API--> <!--Common component for contacting the Mojang API-->