Bungeecord support added x17
This commit is contained in:
parent
24ced9531f
commit
57f23a5adb
@ -14,15 +14,18 @@ import net.md_5.bungee.netty.ChannelWrapper;
|
||||
import net.md_5.bungee.netty.cipher.CipherDecoder;
|
||||
import net.md_5.bungee.netty.cipher.CipherEncoder;
|
||||
import net.md_5.bungee.protocol.AbstractPacketHandler;
|
||||
import net.md_5.bungee.protocol.DefinedPacket;
|
||||
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||
import net.md_5.bungee.protocol.packet.EncryptionRequest;
|
||||
import net.md_5.bungee.protocol.packet.EncryptionResponse;
|
||||
|
||||
import javax.crypto.SecretKey;
|
||||
import java.beans.ConstructorProperties;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.Arrays;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@ -31,7 +34,24 @@ import static net.md_5.bungee.BungeeCord.getInstance;
|
||||
import static com.alterdekim.xcraft.auth.bungee.XCraft.INTERNAL_PORT;
|
||||
|
||||
|
||||
public class EncryptionResponsePacket extends EncryptionResponse {
|
||||
public class EncryptionResponsePacket extends DefinedPacket {
|
||||
|
||||
private byte[] sharedSecret;
|
||||
private byte[] verifyToken;
|
||||
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
|
||||
this.sharedSecret = readArray(buf, 128);
|
||||
this.verifyToken = readArray(buf, 128);
|
||||
}
|
||||
|
||||
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
|
||||
writeArray(this.sharedSecret, buf);
|
||||
writeArray(this.verifyToken, buf);
|
||||
}
|
||||
|
||||
private EncryptionResponse getDummyResponse() {
|
||||
return new EncryptionResponse(this.getSharedSecret(), this.getVerifyToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(AbstractPacketHandler handler) throws Exception {
|
||||
@ -61,7 +81,7 @@ public class EncryptionResponsePacket extends EncryptionResponse {
|
||||
|
||||
Preconditions.checkState( thisState.get(handler).toString().equals("ENCRYPT"), "Not expecting ENCRYPT" );
|
||||
|
||||
SecretKey sharedKey = EncryptionUtil.getSecret(this, (EncryptionRequest) request.get(initialHandler));
|
||||
SecretKey sharedKey = EncryptionUtil.getSecret(this.getDummyResponse(), (EncryptionRequest) request.get(initialHandler));
|
||||
BungeeCipher decrypt = EncryptionUtil.getCipher(false, sharedKey);
|
||||
((ChannelWrapper)ch.get(initialHandler)).addBefore("frame-decoder", "decrypt", new CipherDecoder(decrypt));
|
||||
BungeeCipher encrypt = EncryptionUtil.getCipher(true, sharedKey);
|
||||
@ -98,4 +118,61 @@ public class EncryptionResponsePacket extends EncryptionResponse {
|
||||
};
|
||||
HttpClient.get(authURL, ((ChannelWrapper)ch.get(initialHandler)).getHandle().eventLoop(), callback_handler);
|
||||
}
|
||||
|
||||
public byte[] getSharedSecret() {
|
||||
return this.sharedSecret;
|
||||
}
|
||||
|
||||
public byte[] getVerifyToken() {
|
||||
return this.verifyToken;
|
||||
}
|
||||
|
||||
public void setSharedSecret(byte[] sharedSecret) {
|
||||
this.sharedSecret = sharedSecret;
|
||||
}
|
||||
|
||||
public void setVerifyToken(byte[] verifyToken) {
|
||||
this.verifyToken = verifyToken;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "EncryptionResponsePacket(sharedSecret=" + Arrays.toString(this.getSharedSecret()) + ", verifyToken=" + Arrays.toString(this.getVerifyToken()) + ")";
|
||||
}
|
||||
|
||||
public EncryptionResponsePacket() {
|
||||
}
|
||||
|
||||
@ConstructorProperties({"sharedSecret", "verifyToken"})
|
||||
public EncryptionResponsePacket(byte[] sharedSecret, byte[] verifyToken) {
|
||||
this.sharedSecret = sharedSecret;
|
||||
this.verifyToken = verifyToken;
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (o == this) {
|
||||
return true;
|
||||
} else if (!(o instanceof EncryptionResponsePacket)) {
|
||||
return false;
|
||||
} else {
|
||||
EncryptionResponsePacket other = (EncryptionResponsePacket)o;
|
||||
if (!other.canEqual(this)) {
|
||||
return false;
|
||||
} else if (!Arrays.equals(this.getSharedSecret(), other.getSharedSecret())) {
|
||||
return false;
|
||||
} else {
|
||||
return Arrays.equals(this.getVerifyToken(), other.getVerifyToken());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean canEqual(Object other) {
|
||||
return other instanceof EncryptionResponsePacket;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
result = result * 59 + Arrays.hashCode(this.getSharedSecret());
|
||||
result = result * 59 + Arrays.hashCode(this.getVerifyToken());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user