mirror of
https://github.com/PrismarineJS/node-minecraft-protocol.git
synced 2024-11-30 03:05:37 -05:00
bcbcf5ef7f
This fixes a crash that occurs on line 310 of index.js where it tries to read the value of client.session.selectedProfile.id which doesn't exist if the session was acquired by a refresh with old auth details.
104 lines
2.9 KiB
JavaScript
104 lines
2.9 KiB
JavaScript
/*
|
|
* To change this template, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
var superagent = require("superagent");
|
|
|
|
var loginSrv = "https://authserver.mojang.com";
|
|
|
|
function getSession(username, password, clientToken, refresh, cb) {
|
|
if (refresh) {
|
|
var accessToken = password;
|
|
superagent.post(loginSrv + "/refresh")
|
|
.type("json")
|
|
.send({
|
|
"accessToken": accessToken,
|
|
"clientToken": clientToken
|
|
})
|
|
.end(function (resp) {
|
|
if (resp.ok) {
|
|
var session = {
|
|
accessToken: resp.body.accessToken,
|
|
clientToken: resp.body.clientToken,
|
|
username: resp.body.selectedProfile.name,
|
|
selectedProfile: resp.body.selectedProfile
|
|
};
|
|
cb(null, session);
|
|
} else {
|
|
var myErr = new Error(resp.body.error);
|
|
myErr.errorMessage = resp.body.errorMessage;
|
|
myErr.cause = resp.body.cause;
|
|
cb(myErr);
|
|
}
|
|
});
|
|
} else {
|
|
superagent.post(loginSrv + "/authenticate")
|
|
.type("json")
|
|
.send({
|
|
"agent": {
|
|
"name": "Minecraft",
|
|
"version": 1
|
|
},
|
|
"username": username,
|
|
"password": password,
|
|
"clientToken": clientToken
|
|
})
|
|
.end(function (resp) {
|
|
if (resp.ok) {
|
|
var session = resp.body;
|
|
session.username = resp.body.selectedProfile.name;
|
|
cb(null, session);
|
|
} else {
|
|
var myErr = new Error(resp.body.error);
|
|
myErr.errorMessage = resp.body.errorMessage;
|
|
myErr.cause = resp.body.cause;
|
|
cb(myErr);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function joinServer(username, serverId, accessToken, selectedProfile, cb) {
|
|
superagent.post("https://sessionserver.mojang.com/session/minecraft/join")
|
|
.type("json")
|
|
.send({
|
|
"accessToken": accessToken,
|
|
"selectedProfile": selectedProfile,
|
|
"serverId": serverId
|
|
})
|
|
.end(function(resp) {
|
|
if (resp.ok) {
|
|
cb(null);
|
|
} else {
|
|
var myErr = new Error(resp.body.error);
|
|
myErr.errorMessage = resp.body.errorMessage;
|
|
myErr.cause = resp.body.cause;
|
|
cb(myErr);
|
|
}
|
|
});
|
|
}
|
|
|
|
function validateSession(username, serverId, cb) {
|
|
superagent.get("https://sessionserver.mojang.com/session/minecraft/hasJoined?username=" + username + "&serverId=" + serverId)
|
|
.end(function(resp) {
|
|
if (resp.ok) {
|
|
if ("id" in resp.body) {
|
|
cb(null, resp.body.id);
|
|
} else {
|
|
var myErr = new Error("Failed to verify username!");
|
|
cb(myErr);
|
|
}
|
|
} else {
|
|
var myErr = new Error(resp.body.error);
|
|
myErr.errorMessage = resp.body.errorMessage;
|
|
myErr.cause = resp.body.cause;
|
|
cb(myErr);
|
|
}
|
|
});
|
|
}
|
|
|
|
exports.getSession = getSession;
|
|
exports.joinServer = joinServer;
|
|
exports.validateSession = validateSession;
|
|
exports.generateUUID = require("node-uuid").v4;
|
|
exports.loginType = "yggdrasil";
|