diff --git a/src/server.js b/src/server.js index 0f51bae..245f522 100644 --- a/src/server.js +++ b/src/server.js @@ -33,7 +33,8 @@ class Server extends EventEmitter { try { const mcData = require('minecraft-data')('bedrock_' + version) this.features = { - compressorInHeader: mcData.supportFeature('compressorInPacketHeader') + compressorInHeader: mcData.supportFeature('compressorInPacketHeader'), + legacyCertificateChain: mcData.supportFeature('legacyCertificateChain') } } catch (e) { throw new Error(`Unsupported version: '${version}', no data available`) diff --git a/src/serverPlayer.js b/src/serverPlayer.js index b7ef02d..8c43e5d 100644 --- a/src/serverPlayer.js +++ b/src/serverPlayer.js @@ -82,7 +82,13 @@ class Player extends Connection { const skinChain = tokens.client try { - var { key, userData, skinData } = this.decodeLoginJWT(authChain.chain, skinChain) // eslint-disable-line + if (this.features.legacyCertificateChain) { + var { key, userData, skinData } = this.decodeLoginJWT(authChain.chain, skinChain) // eslint-disable-line + } else { + // TODO: Migrate this from the legacy "Certificate" auth to the new auth system (Validate the token in the "Token" field) + const { chain } = JSON.parse(authChain.Certificate) + var { key, userData, skinData } = this.decodeLoginJWT(chain, skinChain) // eslint-disable-line + } } catch (e) { debug(this.address, e) this.disconnect('Server authentication error')