2020-05-28 22:39:13 -04:00
|
|
|
const request = require('request')
|
|
|
|
const uuid = require('uuid/v1')
|
|
|
|
let api_url = 'https://authserver.mojang.com'
|
2018-10-29 18:13:58 -04:00
|
|
|
|
2019-04-18 17:35:39 -04:00
|
|
|
module.exports.getAuth = function (username, password) {
|
2020-05-28 22:39:13 -04:00
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
if (!password) {
|
|
|
|
const user = {
|
|
|
|
access_token: uuid(),
|
|
|
|
client_token: uuid(),
|
|
|
|
uuid: uuid(),
|
|
|
|
name: username,
|
2021-05-05 10:48:52 -07:00
|
|
|
user_properties: '{}'
|
2020-05-28 22:39:13 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return resolve(user)
|
|
|
|
}
|
|
|
|
|
|
|
|
const requestObject = {
|
|
|
|
url: api_url + '/authenticate',
|
|
|
|
json: {
|
|
|
|
agent: {
|
|
|
|
name: 'Minecraft',
|
|
|
|
version: 1
|
|
|
|
},
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
clientToken: uuid(),
|
|
|
|
requestUser: true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
request.post(requestObject, function (error, response, body) {
|
|
|
|
if (error) return reject(error)
|
|
|
|
if (!body || !body.selectedProfile) {
|
|
|
|
return reject(new Error('Validation error: ' + response.statusMessage))
|
|
|
|
}
|
|
|
|
|
|
|
|
const userProfile = {
|
|
|
|
access_token: body.accessToken,
|
|
|
|
client_token: body.clientToken,
|
|
|
|
uuid: body.selectedProfile.id,
|
|
|
|
name: body.selectedProfile.name,
|
|
|
|
selected_profile: body.selectedProfile,
|
2021-05-05 10:48:52 -07:00
|
|
|
user_properties: parsePropts(body.user.properties)
|
2020-05-28 22:39:13 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
resolve(userProfile)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2018-10-29 18:13:58 -04:00
|
|
|
|
2019-08-12 12:34:28 -04:00
|
|
|
module.exports.validate = function (access_token, client_token) {
|
2020-05-28 22:39:13 -04:00
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const requestObject = {
|
|
|
|
url: api_url + '/validate',
|
|
|
|
json: {
|
|
|
|
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)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2018-11-30 19:33:08 -05:00
|
|
|
|
2019-04-18 17:35:39 -04:00
|
|
|
module.exports.refreshAuth = function (accessToken, clientToken, selectedProfile) {
|
2020-05-28 22:39:13 -04:00
|
|
|
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(new Error('Validation error: ' + response.statusMessage))
|
|
|
|
}
|
|
|
|
|
|
|
|
const userProfile = {
|
|
|
|
access_token: body.accessToken,
|
|
|
|
client_token: uuid(),
|
|
|
|
uuid: body.selectedProfile.id,
|
|
|
|
name: body.selectedProfile.name,
|
2021-05-05 10:48:52 -07:00
|
|
|
user_properties: parsePropts(body.user.properties)
|
2020-05-28 22:39:13 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
resolve(userProfile)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2019-05-22 18:28:48 -04:00
|
|
|
|
2019-08-27 20:07:33 +02:00
|
|
|
module.exports.invalidate = function (accessToken, clientToken) {
|
2020-05-28 22:39:13 -04:00
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const requestObject = {
|
|
|
|
url: api_url + '/invalidate',
|
|
|
|
json: {
|
|
|
|
accessToken: accessToken,
|
|
|
|
clientToken: clientToken
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
request.post(requestObject, function (error, response, body) {
|
|
|
|
if (error) return reject(error)
|
|
|
|
|
|
|
|
if (!body) resolve(true)
|
|
|
|
else reject(body)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2019-05-22 18:28:48 -04:00
|
|
|
|
2019-08-27 20:07:33 +02:00
|
|
|
module.exports.signOut = function (username, password) {
|
2020-05-28 22:39:13 -04:00
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const requestObject = {
|
|
|
|
url: api_url + '/signout',
|
|
|
|
json: {
|
|
|
|
username: username,
|
|
|
|
password: password
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
request.post(requestObject, function (error, response, body) {
|
|
|
|
if (error) return reject(error)
|
|
|
|
|
|
|
|
if (!body) resolve(true)
|
|
|
|
else reject(body)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports.changeApiUrl = function (url) {
|
|
|
|
api_url = url
|
|
|
|
}
|
2021-05-05 10:48:52 -07:00
|
|
|
|
|
|
|
function parsePropts (array) {
|
|
|
|
if (array) {
|
|
|
|
const newObj = {}
|
|
|
|
for (const entry of array) {
|
|
|
|
if (newObj[entry.name]) {
|
|
|
|
newObj[entry.name].push(entry.value)
|
|
|
|
} else {
|
|
|
|
newObj[entry.name] = [entry.value]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return JSON.stringify(newObj)
|
|
|
|
} else {
|
|
|
|
return '{}'
|
|
|
|
}
|
|
|
|
}
|