2023-06-18 15:07:15 +03:00
|
|
|
const request = require("request");
|
|
|
|
const { v3 } = require("uuid");
|
2022-03-02 05:52:06 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
let uuid;
|
|
|
|
let api_url = "https://authserver.mojang.com";
|
2018-10-30 01:13:58 +03:00
|
|
|
|
2021-08-08 23:05:50 +03:00
|
|
|
module.exports.getAuth = function (username, password, client_token = null) {
|
2020-05-29 05:39:13 +03:00
|
|
|
return new Promise((resolve, reject) => {
|
2023-06-18 15:07:15 +03:00
|
|
|
getUUID(username);
|
2020-05-29 05:39:13 +03:00
|
|
|
if (!password) {
|
|
|
|
const user = {
|
2022-03-02 05:52:06 +03:00
|
|
|
access_token: uuid,
|
|
|
|
client_token: client_token || uuid,
|
|
|
|
uuid,
|
2020-05-29 05:39:13 +03:00
|
|
|
name: username,
|
2023-06-18 15:07:15 +03:00
|
|
|
user_properties: "{}",
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
return resolve(user);
|
2020-05-29 05:39:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
const requestObject = {
|
2023-06-18 15:07:15 +03:00
|
|
|
url: api_url + "/authenticate",
|
2020-05-29 05:39:13 +03:00
|
|
|
json: {
|
|
|
|
agent: {
|
2023-06-18 15:07:15 +03:00
|
|
|
name: "Minecraft",
|
|
|
|
version: 1,
|
2020-05-29 05:39:13 +03:00
|
|
|
},
|
2022-03-02 05:52:06 +03:00
|
|
|
username,
|
|
|
|
password,
|
|
|
|
clientToken: uuid,
|
2023-06-18 15:07:15 +03:00
|
|
|
requestUser: true,
|
|
|
|
},
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
|
|
|
request.post(requestObject, function (error, response, body) {
|
2023-06-18 15:07:15 +03:00
|
|
|
if (error) return reject(error);
|
2020-05-29 05:39:13 +03:00
|
|
|
if (!body || !body.selectedProfile) {
|
2023-06-18 15:07:15 +03:00
|
|
|
return reject(new Error("Validation error: " + response.statusMessage));
|
2020-05-29 05:39:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
const userProfile = {
|
|
|
|
access_token: body.accessToken,
|
|
|
|
client_token: body.clientToken,
|
|
|
|
uuid: body.selectedProfile.id,
|
|
|
|
name: body.selectedProfile.name,
|
|
|
|
selected_profile: body.selectedProfile,
|
2023-06-18 15:07:15 +03:00
|
|
|
user_properties: parsePropts(body.user.properties),
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
resolve(userProfile);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
2018-10-30 01:13:58 +03:00
|
|
|
|
2022-03-02 05:52:06 +03:00
|
|
|
module.exports.validate = function (accessToken, clientToken) {
|
2020-05-29 05:39:13 +03:00
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const requestObject = {
|
2023-06-18 15:07:15 +03:00
|
|
|
url: api_url + "/validate",
|
2020-05-29 05:39:13 +03:00
|
|
|
json: {
|
2022-03-02 05:52:06 +03:00
|
|
|
accessToken,
|
2023-06-18 15:07:15 +03:00
|
|
|
clientToken,
|
|
|
|
},
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
|
|
|
request.post(requestObject, async function (error, response, body) {
|
2023-06-18 15:07:15 +03:00
|
|
|
if (error) return reject(error);
|
2020-05-29 05:39:13 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
if (!body) resolve(true);
|
|
|
|
else reject(body);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
2018-12-01 03:33:08 +03:00
|
|
|
|
2021-08-08 23:05:50 +03:00
|
|
|
module.exports.refreshAuth = function (accessToken, clientToken) {
|
2020-05-29 05:39:13 +03:00
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const requestObject = {
|
2023-06-18 15:07:15 +03:00
|
|
|
url: api_url + "/refresh",
|
2020-05-29 05:39:13 +03:00
|
|
|
json: {
|
2022-03-02 05:52:06 +03:00
|
|
|
accessToken,
|
|
|
|
clientToken,
|
2023-06-18 15:07:15 +03:00
|
|
|
requestUser: true,
|
|
|
|
},
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
|
|
|
request.post(requestObject, function (error, response, body) {
|
2023-06-18 15:07:15 +03:00
|
|
|
if (error) return reject(error);
|
2020-05-29 05:39:13 +03:00
|
|
|
if (!body || !body.selectedProfile) {
|
2023-06-18 15:07:15 +03:00
|
|
|
return reject(new Error("Validation error: " + response.statusMessage));
|
2020-05-29 05:39:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
const userProfile = {
|
|
|
|
access_token: body.accessToken,
|
2022-03-02 05:52:06 +03:00
|
|
|
client_token: getUUID(body.selectedProfile.name),
|
2020-05-29 05:39:13 +03:00
|
|
|
uuid: body.selectedProfile.id,
|
|
|
|
name: body.selectedProfile.name,
|
2023-06-18 15:07:15 +03:00
|
|
|
user_properties: parsePropts(body.user.properties),
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
return resolve(userProfile);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
2019-05-23 01:28:48 +03:00
|
|
|
|
2019-08-27 21:07:33 +03:00
|
|
|
module.exports.invalidate = function (accessToken, clientToken) {
|
2020-05-29 05:39:13 +03:00
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const requestObject = {
|
2023-06-18 15:07:15 +03:00
|
|
|
url: api_url + "/invalidate",
|
2020-05-29 05:39:13 +03:00
|
|
|
json: {
|
2022-03-02 05:52:06 +03:00
|
|
|
accessToken,
|
2023-06-18 15:07:15 +03:00
|
|
|
clientToken,
|
|
|
|
},
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
|
|
|
request.post(requestObject, function (error, response, body) {
|
2023-06-18 15:07:15 +03:00
|
|
|
if (error) return reject(error);
|
2020-05-29 05:39:13 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
if (!body) return resolve(true);
|
|
|
|
else return reject(body);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
2019-05-23 01:28:48 +03:00
|
|
|
|
2019-08-27 21:07:33 +03:00
|
|
|
module.exports.signOut = function (username, password) {
|
2020-05-29 05:39:13 +03:00
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const requestObject = {
|
2023-06-18 15:07:15 +03:00
|
|
|
url: api_url + "/signout",
|
2020-05-29 05:39:13 +03:00
|
|
|
json: {
|
2022-03-02 05:52:06 +03:00
|
|
|
username,
|
2023-06-18 15:07:15 +03:00
|
|
|
password,
|
|
|
|
},
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
|
|
|
request.post(requestObject, function (error, response, body) {
|
2023-06-18 15:07:15 +03:00
|
|
|
if (error) return reject(error);
|
2020-05-29 05:39:13 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
if (!body) return resolve(true);
|
|
|
|
else return reject(body);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
2020-05-29 05:39:13 +03:00
|
|
|
|
|
|
|
module.exports.changeApiUrl = function (url) {
|
2023-06-18 15:07:15 +03:00
|
|
|
api_url = url;
|
|
|
|
};
|
2021-05-05 20:48:52 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
function parsePropts(array) {
|
2021-05-05 20:48:52 +03:00
|
|
|
if (array) {
|
2023-06-18 15:07:15 +03:00
|
|
|
const newObj = {};
|
2021-05-05 20:48:52 +03:00
|
|
|
for (const entry of array) {
|
|
|
|
if (newObj[entry.name]) {
|
2023-06-18 15:07:15 +03:00
|
|
|
newObj[entry.name].push(entry.value);
|
2021-05-05 20:48:52 +03:00
|
|
|
} else {
|
2023-06-18 15:07:15 +03:00
|
|
|
newObj[entry.name] = [entry.value];
|
2021-05-05 20:48:52 +03:00
|
|
|
}
|
|
|
|
}
|
2023-06-18 15:07:15 +03:00
|
|
|
return JSON.stringify(newObj);
|
2021-05-05 20:48:52 +03:00
|
|
|
} else {
|
2023-06-18 15:07:15 +03:00
|
|
|
return "{}";
|
2021-05-05 20:48:52 +03:00
|
|
|
}
|
|
|
|
}
|
2022-03-02 05:52:06 +03:00
|
|
|
|
2023-06-18 15:07:15 +03:00
|
|
|
function getUUID(value) {
|
2022-03-02 05:52:06 +03:00
|
|
|
if (!uuid) {
|
2023-06-18 15:07:15 +03:00
|
|
|
uuid = v3(value, v3.DNS);
|
2022-03-02 05:52:06 +03:00
|
|
|
}
|
2023-06-18 15:07:15 +03:00
|
|
|
return uuid;
|
2022-03-02 05:52:06 +03:00
|
|
|
}
|