Replace mojang.js with helios-core implementation.
Updated: Mojang Auth, status check (pending rework).
This commit is contained in:
@@ -5,13 +5,12 @@
|
||||
const cp = require('child_process')
|
||||
const crypto = require('crypto')
|
||||
const { URL } = require('url')
|
||||
const { getServerStatus } = require('helios-core')
|
||||
const { MojangRestAPI, getServerStatus } = require('helios-core/mojang')
|
||||
|
||||
// Internal Requirements
|
||||
const DiscordWrapper = require('./assets/js/discordwrapper')
|
||||
const Mojang = require('./assets/js/mojang')
|
||||
const ProcessBuilder = require('./assets/js/processbuilder')
|
||||
const ServerStatus = require('./assets/js/serverstatus')
|
||||
const { RestResponseStatus } = require('helios-core/common')
|
||||
|
||||
// Launch Elements
|
||||
const launch_content = document.getElementById('launch_content')
|
||||
@@ -166,55 +165,57 @@ const refreshMojangStatuses = async function(){
|
||||
let tooltipEssentialHTML = ''
|
||||
let tooltipNonEssentialHTML = ''
|
||||
|
||||
try {
|
||||
const statuses = await Mojang.status()
|
||||
greenCount = 0
|
||||
greyCount = 0
|
||||
|
||||
for(let i=0; i<statuses.length; i++){
|
||||
const service = statuses[i]
|
||||
|
||||
if(service.essential){
|
||||
tooltipEssentialHTML += `<div class="mojangStatusContainer">
|
||||
<span class="mojangStatusIcon" style="color: ${Mojang.statusToHex(service.status)};">•</span>
|
||||
<span class="mojangStatusName">${service.name}</span>
|
||||
</div>`
|
||||
} else {
|
||||
tooltipNonEssentialHTML += `<div class="mojangStatusContainer">
|
||||
<span class="mojangStatusIcon" style="color: ${Mojang.statusToHex(service.status)};">•</span>
|
||||
<span class="mojangStatusName">${service.name}</span>
|
||||
</div>`
|
||||
}
|
||||
|
||||
if(service.status === 'yellow' && status !== 'red'){
|
||||
status = 'yellow'
|
||||
} else if(service.status === 'red'){
|
||||
status = 'red'
|
||||
} else {
|
||||
if(service.status === 'grey'){
|
||||
++greyCount
|
||||
}
|
||||
++greenCount
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(greenCount === statuses.length){
|
||||
if(greyCount === statuses.length){
|
||||
status = 'grey'
|
||||
} else {
|
||||
status = 'green'
|
||||
}
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
const response = await MojangRestAPI.status()
|
||||
let statuses
|
||||
if(response.responseStatus === RestResponseStatus.SUCCESS) {
|
||||
statuses = response.data
|
||||
} else {
|
||||
loggerLanding.warn('Unable to refresh Mojang service status.')
|
||||
loggerLanding.debug(err)
|
||||
statuses = MojangRestAPI.getDefaultStatuses()
|
||||
}
|
||||
|
||||
greenCount = 0
|
||||
greyCount = 0
|
||||
|
||||
for(let i=0; i<statuses.length; i++){
|
||||
const service = statuses[i]
|
||||
|
||||
if(service.essential){
|
||||
tooltipEssentialHTML += `<div class="mojangStatusContainer">
|
||||
<span class="mojangStatusIcon" style="color: ${MojangRestAPI.statusToHex(service.status)};">•</span>
|
||||
<span class="mojangStatusName">${service.name}</span>
|
||||
</div>`
|
||||
} else {
|
||||
tooltipNonEssentialHTML += `<div class="mojangStatusContainer">
|
||||
<span class="mojangStatusIcon" style="color: ${MojangRestAPI.statusToHex(service.status)};">•</span>
|
||||
<span class="mojangStatusName">${service.name}</span>
|
||||
</div>`
|
||||
}
|
||||
|
||||
if(service.status === 'yellow' && status !== 'red'){
|
||||
status = 'yellow'
|
||||
} else if(service.status === 'red'){
|
||||
status = 'red'
|
||||
} else {
|
||||
if(service.status === 'grey'){
|
||||
++greyCount
|
||||
}
|
||||
++greenCount
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(greenCount === statuses.length){
|
||||
if(greyCount === statuses.length){
|
||||
status = 'grey'
|
||||
} else {
|
||||
status = 'green'
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById('mojangStatusEssentialContainer').innerHTML = tooltipEssentialHTML
|
||||
document.getElementById('mojangStatusNonEssentialContainer').innerHTML = tooltipNonEssentialHTML
|
||||
document.getElementById('mojang_status_icon').style.color = Mojang.statusToHex(status)
|
||||
document.getElementById('mojang_status_icon').style.color = MojangRestAPI.statusToHex(status)
|
||||
}
|
||||
|
||||
const refreshServerStatus = async function(fade = false){
|
||||
|
||||
@@ -154,79 +154,6 @@ function formDisabled(v){
|
||||
loginRememberOption.disabled = v
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses an error and returns a user-friendly title and description
|
||||
* for our error overlay.
|
||||
*
|
||||
* @param {Error | {cause: string, error: string, errorMessage: string}} err A Node.js
|
||||
* error or Mojang error response.
|
||||
*/
|
||||
function resolveError(err){
|
||||
// Mojang Response => err.cause | err.error | err.errorMessage
|
||||
// Node error => err.code | err.message
|
||||
if(err.cause != null && err.cause === 'UserMigratedException') {
|
||||
return {
|
||||
title: Lang.queryJS('login.error.userMigrated.title'),
|
||||
desc: Lang.queryJS('login.error.userMigrated.desc')
|
||||
}
|
||||
} else {
|
||||
if(err.error != null){
|
||||
if(err.error === 'ForbiddenOperationException'){
|
||||
if(err.errorMessage != null){
|
||||
if(err.errorMessage === 'Invalid credentials. Invalid username or password.'){
|
||||
return {
|
||||
title: Lang.queryJS('login.error.invalidCredentials.title'),
|
||||
desc: Lang.queryJS('login.error.invalidCredentials.desc')
|
||||
}
|
||||
} else if(err.errorMessage === 'Invalid credentials.'){
|
||||
return {
|
||||
title: Lang.queryJS('login.error.rateLimit.title'),
|
||||
desc: Lang.queryJS('login.error.rateLimit.desc')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Request errors (from Node).
|
||||
if(err.code != null){
|
||||
if(err.code === 'ENOENT'){
|
||||
// No Internet.
|
||||
return {
|
||||
title: Lang.queryJS('login.error.noInternet.title'),
|
||||
desc: Lang.queryJS('login.error.noInternet.desc')
|
||||
}
|
||||
} else if(err.code === 'ENOTFOUND'){
|
||||
// Could not reach server.
|
||||
return {
|
||||
title: Lang.queryJS('login.error.authDown.title'),
|
||||
desc: Lang.queryJS('login.error.authDown.desc')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(err.message != null){
|
||||
if(err.message === 'NotPaidAccount'){
|
||||
return {
|
||||
title: Lang.queryJS('login.error.notPaid.title'),
|
||||
desc: Lang.queryJS('login.error.notPaid.desc')
|
||||
}
|
||||
} else {
|
||||
// Unknown error with request.
|
||||
return {
|
||||
title: Lang.queryJS('login.error.unknown.title'),
|
||||
desc: err.message
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Unknown Mojang error.
|
||||
return {
|
||||
title: err.error,
|
||||
desc: err.errorMessage
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let loginViewOnSuccess = VIEWS.landing
|
||||
let loginViewOnCancel = VIEWS.settings
|
||||
let loginViewCancelHandler
|
||||
@@ -285,16 +212,15 @@ loginButton.addEventListener('click', () => {
|
||||
formDisabled(false)
|
||||
})
|
||||
}, 1000)
|
||||
}).catch((err) => {
|
||||
}).catch((displayableError) => {
|
||||
loginLoading(false)
|
||||
const errF = resolveError(err)
|
||||
setOverlayContent(errF.title, errF.desc, Lang.queryJS('login.tryAgain'))
|
||||
setOverlayContent(displayableError.title, displayableError.desc, Lang.queryJS('login.tryAgain'))
|
||||
setOverlayHandler(() => {
|
||||
formDisabled(false)
|
||||
toggleOverlay(false)
|
||||
})
|
||||
toggleOverlay(true)
|
||||
loggerLogin.log('Error while logging in.', err)
|
||||
loggerLogin.log('Error while logging in.', displayableError)
|
||||
})
|
||||
|
||||
})
|
||||
Reference in New Issue
Block a user