138 lines
6.5 KiB
Diff
138 lines
6.5 KiB
Diff
diff --git a/src/client/chat.js b/src/client/chat.js
|
|
index 0021870994fc59a82f0ac8aba0a65a8be43ef2f4..a53fceb843105ea2a1d88722b3fc7c3b43cb102a 100644
|
|
--- a/src/client/chat.js
|
|
+++ b/src/client/chat.js
|
|
@@ -116,7 +116,7 @@ module.exports = function (client, options) {
|
|
for (const player of packet.data) {
|
|
if (player.chatSession) {
|
|
client._players[player.uuid] = {
|
|
- publicKey: crypto.createPublicKey({ key: player.chatSession.publicKey.keyBytes, format: 'der', type: 'spki' }),
|
|
+ // publicKey: crypto.createPublicKey({ key: player.chatSession.publicKey.keyBytes, format: 'der', type: 'spki' }),
|
|
publicKeyDER: player.chatSession.publicKey.keyBytes,
|
|
sessionUuid: player.chatSession.uuid
|
|
}
|
|
@@ -126,7 +126,7 @@ module.exports = function (client, options) {
|
|
|
|
if (player.crypto) {
|
|
client._players[player.uuid] = {
|
|
- publicKey: crypto.createPublicKey({ key: player.crypto.publicKey, format: 'der', type: 'spki' }),
|
|
+ // publicKey: crypto.createPublicKey({ key: player.crypto.publicKey, format: 'der', type: 'spki' }),
|
|
publicKeyDER: player.crypto.publicKey,
|
|
signature: player.crypto.signature,
|
|
displayName: player.displayName || player.name
|
|
@@ -196,7 +196,7 @@ module.exports = function (client, options) {
|
|
if (mcData.supportFeature('useChatSessions')) {
|
|
const tsDelta = BigInt(Date.now()) - packet.timestamp
|
|
const expired = !packet.timestamp || tsDelta > messageExpireTime || tsDelta < 0
|
|
- const verified = !packet.unsignedChatContent && updateAndValidateSession(packet.senderUuid, packet.plainMessage, packet.signature, packet.index, packet.previousMessages, packet.salt, packet.timestamp) && !expired
|
|
+ const verified = false && !packet.unsignedChatContent && updateAndValidateSession(packet.senderUuid, packet.plainMessage, packet.signature, packet.index, packet.previousMessages, packet.salt, packet.timestamp) && !expired
|
|
if (verified) client._signatureCache.push(packet.signature)
|
|
client.emit('playerChat', {
|
|
globalIndex: packet.globalIndex,
|
|
@@ -362,7 +362,7 @@ module.exports = function (client, options) {
|
|
}
|
|
}
|
|
|
|
- client._signedChat = (message, options = {}) => {
|
|
+ client._signedChat = async (message, options = {}) => {
|
|
options.timestamp = options.timestamp || BigInt(Date.now())
|
|
options.salt = options.salt || 1n
|
|
|
|
@@ -407,7 +407,7 @@ module.exports = function (client, options) {
|
|
message,
|
|
timestamp: options.timestamp,
|
|
salt: options.salt,
|
|
- signature: (client.profileKeys && client._session) ? client.signMessage(message, options.timestamp, options.salt, undefined, acknowledgements) : undefined,
|
|
+ signature: (client.profileKeys && client._session) ? await client.signMessage(message, options.timestamp, options.salt, undefined, acknowledgements) : undefined,
|
|
offset: client._lastSeenMessages.pending,
|
|
checksum: computeChatChecksum(client._lastSeenMessages), // 1.21.5+
|
|
acknowledged
|
|
@@ -422,7 +422,7 @@ module.exports = function (client, options) {
|
|
message,
|
|
timestamp: options.timestamp,
|
|
salt: options.salt,
|
|
- signature: client.profileKeys ? client.signMessage(message, options.timestamp, options.salt, options.preview) : Buffer.alloc(0),
|
|
+ signature: client.profileKeys ? await client.signMessage(message, options.timestamp, options.salt, options.preview) : Buffer.alloc(0),
|
|
signedPreview: options.didPreview,
|
|
previousMessages: client._lastSeenMessages.map((e) => ({
|
|
messageSender: e.sender,
|
|
diff --git a/src/client/encrypt.js b/src/client/encrypt.js
|
|
index 63cc2bd9615100bd2fd63dfe14c094aa6b8cd1c9..36df57d1196af9761d920fa285ac48f85410eaef 100644
|
|
--- a/src/client/encrypt.js
|
|
+++ b/src/client/encrypt.js
|
|
@@ -25,7 +25,11 @@ module.exports = function (client, options) {
|
|
if (packet.serverId !== '-') {
|
|
debug('This server appears to be an online server and you are providing no password, the authentication will probably fail')
|
|
}
|
|
- sendEncryptionKeyResponse()
|
|
+ client.end('This server appears to be an online server and you are providing no authentication. Try authenticating first.')
|
|
+ // sendEncryptionKeyResponse()
|
|
+ // client.once('set_compression', () => {
|
|
+ // clearTimeout(loginTimeout)
|
|
+ // })
|
|
}
|
|
|
|
function onJoinServerResponse (err) {
|
|
diff --git a/src/client/pluginChannels.js b/src/client/pluginChannels.js
|
|
index 671eb452f31e6b5fcd57d715f1009d010160c65f..7f69f511c8fb97d431ec5125c851b49be8e2ab76 100644
|
|
--- a/src/client/pluginChannels.js
|
|
+++ b/src/client/pluginChannels.js
|
|
@@ -57,7 +57,7 @@ module.exports = function (client, options) {
|
|
try {
|
|
packet.data = proto.parsePacketBuffer(channel, packet.data).data
|
|
} catch (error) {
|
|
- client.emit('error', error)
|
|
+ client.emit('error', error, { customPayload: packet })
|
|
return
|
|
}
|
|
}
|
|
diff --git a/src/client.js b/src/client.js
|
|
index e369e77d055ba919e8f9da7b8e8b5dc879c74cf4..54bb9e6644388e9b6bd42b3012951875989cdf0c 100644
|
|
--- a/src/client.js
|
|
+++ b/src/client.js
|
|
@@ -111,7 +111,13 @@ class Client extends EventEmitter {
|
|
this._hasBundlePacket = false
|
|
}
|
|
} else {
|
|
- emitPacket(parsed)
|
|
+ try {
|
|
+ emitPacket(parsed)
|
|
+ } catch (err) {
|
|
+ console.log('Client incorrectly handled packet ' + parsed.metadata.name)
|
|
+ console.error(err)
|
|
+ // todo investigate why it doesn't close the stream even if unhandled there
|
|
+ }
|
|
}
|
|
})
|
|
}
|
|
@@ -169,7 +175,10 @@ class Client extends EventEmitter {
|
|
}
|
|
|
|
const onFatalError = (err) => {
|
|
- this.emit('error', err)
|
|
+ // todo find out what is trying to write after client disconnect
|
|
+ if(err.code !== 'ECONNABORTED') {
|
|
+ this.emit('error', err)
|
|
+ }
|
|
endSocket()
|
|
}
|
|
|
|
@@ -198,6 +207,10 @@ class Client extends EventEmitter {
|
|
serializer -> framer -> socket -> splitter -> deserializer */
|
|
if (this.serializer) {
|
|
this.serializer.end()
|
|
+ setTimeout(() => {
|
|
+ this.socket?.end()
|
|
+ this.socket?.emit('end')
|
|
+ }, 2000) // allow the serializer to finish writing
|
|
} else {
|
|
if (this.socket) this.socket.end()
|
|
}
|
|
@@ -243,6 +256,7 @@ class Client extends EventEmitter {
|
|
debug('writing packet ' + this.state + '.' + name)
|
|
debug(params)
|
|
}
|
|
+ this.emit('writePacket', name, params)
|
|
this.serializer.write({ name, params })
|
|
}
|
|
|