pimi-launcher-core/components/authenticator.js

140 lines
4.1 KiB
JavaScript
Raw Normal View History

2018-10-30 01:13:58 +03:00
const request = require('request');
const uuid = require('uuid/v1');
const api_url = "https://authserver.mojang.com";
module.exports.getAuth = function (username, password) {
return new Promise((resolve, reject) => {
if (!password) {
const user = {
access_token: uuid(),
client_token: uuid(),
uuid: uuid(),
name: username,
user_properties: JSON.stringify({})
};
resolve(user);
return;
}
2018-10-30 01:13:58 +03:00
const requestObject = {
url: api_url + "/authenticate",
json: {
agent: {
name: "Minecraft",
version: 1
},
username: username,
password: password,
2019-08-12 19:34:28 +03:00
clientToken: uuid(),
2018-10-30 01:13:58 +03:00
requestUser: true
}
};
request.post(requestObject, function (error, response, body) {
if (error) return reject(error);
if (!body || !body.selectedProfile) {
return reject("Validation error: " + response.statusMessage);
2018-10-30 01:13:58 +03:00
}
const userProfile = {
access_token: body.accessToken,
2019-08-12 19:34:28 +03:00
client_token: body.clientToken,
2018-10-30 01:13:58 +03:00
uuid: body.selectedProfile.id,
name: body.selectedProfile.name,
selected_profile: body.selectedProfile,
user_properties: JSON.stringify(body.user.properties || {})
2018-10-30 01:13:58 +03:00
};
resolve(userProfile);
});
});
};
2018-10-30 01:13:58 +03:00
2019-08-12 19:34:28 +03:00
module.exports.validate = function (access_token, client_token) {
return new Promise((resolve, reject) => {
const requestObject = {
url: api_url + "/validate",
json: {
2019-08-12 19:34:28 +03:00
"accessToken": access_token,
"clientToken": client_token
}
};
request.post(requestObject, async function (error, response, body) {
if (error) return reject(error);
if (!body) resolve(true);
else reject(body);
});
});
};
module.exports.refreshAuth = function (accessToken, clientToken, selectedProfile) {
return new Promise((resolve, reject) => {
const requestObject = {
url: api_url + "/refresh",
json: {
"accessToken": accessToken,
"clientToken": clientToken,
"selectedProfile": selectedProfile,
"requestUser": true
}
};
request.post(requestObject, function (error, response, body) {
if (error) return reject(error);
if (!body || !body.selectedProfile) {
return reject("Validation error: " + response.statusMessage);
}
const userProfile = {
access_token: body.accessToken,
client_token: uuid(),
uuid: body.selectedProfile.id,
name: body.selectedProfile.name,
2019-03-11 04:29:42 +03:00
user_properties: JSON.stringify(body.user.properties || {})
};
resolve(userProfile);
});
});
2019-05-23 01:28:48 +03:00
};
module.exports.invalidate = function (accessToken, clientToken) {
return new Promise((resolve, reject) => {
2019-05-23 01:28:48 +03:00
const requestObject = {
url: api_url + "/invalidate",
json: {
"accessToken": accessToken,
"clientToken": clientToken
}
};
request.post(requestObject, function (error, response, body) {
if (error) return reject(error);
2019-05-23 01:28:48 +03:00
if (!body) resolve(true);
else reject(body);
2019-05-23 01:28:48 +03:00
});
});
};
module.exports.signOut = function (username, password) {
return new Promise((resolve, reject) => {
2019-05-23 01:28:48 +03:00
const requestObject = {
url: api_url + "/signout",
2019-05-23 01:28:48 +03:00
json: {
"username": username,
"password": password
}
};
request.post(requestObject, function (error, response, body) {
if (error) return reject(error);
2019-05-23 01:28:48 +03:00
if (!body) resolve(true);
else reject(body);
2019-05-23 01:28:48 +03:00
});
});
};