Better error handling with Mojang REST api.
Added handling for when there is no internet connection or Mojang's auth server is unreachable to both the login and status modules.
This commit is contained in:
parent
b5386c0257
commit
66a3854a24
@ -62,8 +62,8 @@ document.addEventListener('readystatechange', function(){
|
|||||||
// Update Mojang Status Color
|
// Update Mojang Status Color
|
||||||
const refreshMojangStatuses = async function(){
|
const refreshMojangStatuses = async function(){
|
||||||
console.log('Refreshing Mojang Statuses..')
|
console.log('Refreshing Mojang Statuses..')
|
||||||
|
let status = 'grey'
|
||||||
try {
|
try {
|
||||||
let status = 'grey'
|
|
||||||
const statuses = await Mojang.status()
|
const statuses = await Mojang.status()
|
||||||
greenCount = 0
|
greenCount = 0
|
||||||
for(let i=0; i<statuses.length; i++){
|
for(let i=0; i<statuses.length; i++){
|
||||||
@ -79,12 +79,11 @@ document.addEventListener('readystatechange', function(){
|
|||||||
if(greenCount == statuses.length){
|
if(greenCount == statuses.length){
|
||||||
status = 'green'
|
status = 'green'
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById('mojang_status_icon').style.color = Mojang.statusToHex(status)
|
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Unable to refresh Mojang service status..', err)
|
console.warn('Unable to refresh Mojang service status.')
|
||||||
|
console.debug(err)
|
||||||
}
|
}
|
||||||
|
document.getElementById('mojang_status_icon').style.color = Mojang.statusToHex(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshMojangStatuses()
|
refreshMojangStatuses()
|
||||||
|
@ -75,7 +75,12 @@ exports.status = function(){
|
|||||||
json: true
|
json: true
|
||||||
},
|
},
|
||||||
function(error, response, body){
|
function(error, response, body){
|
||||||
if(response.statusCode === 200){
|
|
||||||
|
if(error || response.statusCode !== 200){
|
||||||
|
console.warn('Unable to retrieve Mojang status.')
|
||||||
|
console.debug('Error while retrieving Mojang statuses:', error)
|
||||||
|
reject(error || response.statusCode)
|
||||||
|
} else {
|
||||||
for(let i=0; i<body.length; i++){
|
for(let i=0; i<body.length; i++){
|
||||||
const key = Object.keys(body[i])[0]
|
const key = Object.keys(body[i])[0]
|
||||||
inner:
|
inner:
|
||||||
@ -87,8 +92,6 @@ exports.status = function(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fulfill(statuses)
|
fulfill(statuses)
|
||||||
} else {
|
|
||||||
reject()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -119,10 +122,15 @@ exports.authenticate = function(username, password, clientToken, requestUser = t
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
function(error, response, body){
|
function(error, response, body){
|
||||||
if(response.statusCode === 200){
|
if(error){
|
||||||
fulfill(body)
|
console.error('Error during authentication.', error)
|
||||||
|
reject(error)
|
||||||
} else {
|
} else {
|
||||||
reject(body)
|
if(response.statusCode === 200){
|
||||||
|
fulfill(body)
|
||||||
|
} else {
|
||||||
|
reject(body || {code: 'ENOTFOUND'})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -148,11 +156,16 @@ exports.validate = function(accessToken, clientToken){
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
function(error, response, body){
|
function(error, response, body){
|
||||||
if(response.statusCode === 403){
|
if(error){
|
||||||
fulfill(false)
|
console.error('Error during validation.', error)
|
||||||
|
reject(error)
|
||||||
} else {
|
} else {
|
||||||
// 204 if valid
|
if(response.statusCode === 403){
|
||||||
fulfill(true)
|
fulfill(false)
|
||||||
|
} else {
|
||||||
|
// 204 if valid
|
||||||
|
fulfill(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -178,10 +191,15 @@ exports.invalidate = function(accessToken, clientToken){
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
function(error, response, body){
|
function(error, response, body){
|
||||||
if(response.statusCode === 200){
|
if(error){
|
||||||
fulfill()
|
console.error('Error during invalidation.', error)
|
||||||
|
reject(error)
|
||||||
} else {
|
} else {
|
||||||
reject()
|
if(response.statusCode === 204){
|
||||||
|
fulfill()
|
||||||
|
} else {
|
||||||
|
reject(body)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -210,10 +228,15 @@ exports.refresh = function(accessToken, clientToken, requestUser = true){
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
function(error, response, body){
|
function(error, response, body){
|
||||||
if(response.statusCode === 200){
|
if(error){
|
||||||
fulfill(body)
|
console.error('Error during refresh.', error)
|
||||||
|
reject(error)
|
||||||
} else {
|
} else {
|
||||||
reject(response.body)
|
if(response.statusCode === 200){
|
||||||
|
fulfill(body)
|
||||||
|
} else {
|
||||||
|
reject(body)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -180,6 +180,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function resolveError(err){
|
function resolveError(err){
|
||||||
|
// Mojang Response => err.cause | err.error | err.errorMessage
|
||||||
|
// Node error => err.code | err.message
|
||||||
if(err.cause != null && err.cause === 'UserMigratedException') {
|
if(err.cause != null && err.cause === 'UserMigratedException') {
|
||||||
return {
|
return {
|
||||||
title: 'Error During Login:<br>Invalid Credentials',
|
title: 'Error During Login:<br>Invalid Credentials',
|
||||||
@ -202,11 +204,37 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// Request errors (from Node).
|
||||||
|
if(err.code != null){
|
||||||
|
if(err.code === 'ENOENT'){
|
||||||
|
// No Internet.
|
||||||
|
return {
|
||||||
|
title: 'Error During Login:<br>No Internet Connection',
|
||||||
|
desc: 'You must be connected to the internet in order to login. Please connect and try again.'
|
||||||
|
}
|
||||||
|
} else if(err.code === 'ENOTFOUND'){
|
||||||
|
// Could not reach server.
|
||||||
|
return {
|
||||||
|
title: 'Error During Login:<br>Authentication Server Offline',
|
||||||
|
desc: 'Mojang\'s authentication server is currently offline or unreachable. Please wait a bit and try again. You can check the status of the server on <a href="https://help.mojang.com/">Mojang\'s help portal</a>.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
if(err.message != null){
|
||||||
title: err.error,
|
// Unknown error with request.
|
||||||
desc: err.errorMessage
|
return {
|
||||||
|
title: 'Error During Login:<br>Unknown Error',
|
||||||
|
desc: err.message
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Unknown Mojang error.
|
||||||
|
return {
|
||||||
|
title: err.error,
|
||||||
|
desc: err.errorMessage
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user