login event, jwt decoding
This commit is contained in:
parent
8c06ca5a38
commit
1dc00237fa
3 changed files with 39 additions and 96 deletions
|
|
@ -1,10 +1,16 @@
|
|||
const raknet = require('raknet');
|
||||
const zlib = require('zlib');
|
||||
const ProtoDef = require('protodef').ProtoDef;
|
||||
const batchProto=new ProtoDef();
|
||||
const jwt = require('jwt-simple');
|
||||
const batchProto = new ProtoDef();
|
||||
batchProto.addTypes(require("./datatypes/minecraft"));
|
||||
batchProto.addType("insideBatch",["endOfArray",{"type":["buffer",{"countType":"i32"}]}]);
|
||||
|
||||
const dataProto = new ProtoDef();
|
||||
dataProto.addType("data_chain", [ "container", [ { "name":"chain", "type":[ "pstring", { "countType":"li32" } ] }, { "name":"clientData", "type":[ "pstring", { "countType":"li32" } ] } ] ]);
|
||||
|
||||
const secret = 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8ELkixyLcwlZryUQcu1TvPOmI2B7vX83ndnWRUaXm74wFfa5f/lwQNTfrLVHa2PmenpGI6JhIMUJaWZrjmMj90NoKNFSNBuKdm8rYiXsfaz3K36x/1U26HpG0ZxK/V1V';
|
||||
|
||||
function createServer(options) {
|
||||
options = options || {};
|
||||
var port = options.port != null ?
|
||||
|
|
@ -26,7 +32,33 @@ function createServer(options) {
|
|||
server.on("connection", function (client) {
|
||||
client.on("mcpe",packet => client.emit(packet.name,packet.params));
|
||||
|
||||
client.writeMCPE=(name,packet) => {
|
||||
client.on("game_login", packet => {
|
||||
var body = packet.body;
|
||||
var body2 = zlib.inflateSync(body);
|
||||
var parsed = dataProto.parsePacketBuffer("data_chain", body2);
|
||||
parsed.data.chain = JSON.parse(parsed.data.chain);
|
||||
|
||||
var clientData = parsed.data.clientData;
|
||||
var chain1 = parsed.data.chain.chain[0];
|
||||
var chain2 = parsed.data.chain.chain[1].replace('\n', '');
|
||||
|
||||
var decode1 = jwt.decode(chain1, secret, 'ES384');
|
||||
var nextKey1 = decode1.identityPublicKey;
|
||||
|
||||
var decode2 = jwt.decode(chain2, nextKey1, 'ES384');
|
||||
var nextKey2 = decode2.identityPublicKey;
|
||||
|
||||
var clientDecode = jwt.decode(clientData, nextKey1, 'ES384');
|
||||
client.randomId = clientDecode.ClientRandomId;
|
||||
client.skinData = clientDecode.SkinData;
|
||||
client.skinId = clientDecode.SkinId
|
||||
client.identity = decode2.extraData.identity;
|
||||
client.displayName = decode2.extraData.displayName;
|
||||
client.XUID = decode2.extraData.XUID;
|
||||
client.emit('login', {displayName: client.displayName, randomId: client.randomId, skinData: client.skinData, skinId: client.skinId, identity: client.identity, XUID: client.XUID})
|
||||
});
|
||||
|
||||
client.writeMCPE = (name,packet) => {
|
||||
client.writeEncapsulated("mcpe",{
|
||||
name:name,
|
||||
params:packet
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue