From b62910a7c49e7b716a864c45b501d26f0554e43e Mon Sep 17 00:00:00 2001 From: GeekCornerGH <45696571+GeekCornerGH@users.noreply.github.com> Date: Sun, 24 Oct 2021 08:38:09 +0200 Subject: [PATCH] feat: New Mojang Statuses --- app/assets/js/mojang.js | 113 +++++++++++++++--------------- app/assets/js/scripts/landing.js | 9 ++- app/assets/js/scripts/uibinder.js | 32 ++++----- 3 files changed, 75 insertions(+), 79 deletions(-) diff --git a/app/assets/js/mojang.js b/app/assets/js/mojang.js index 75143836..2d20f74b 100644 --- a/app/assets/js/mojang.js +++ b/app/assets/js/mojang.js @@ -7,7 +7,7 @@ */ // Requirements const request = require('request') -const logger = require('./loggerutil')('%c[Mojang]', 'color: #a02d2a; font-weight: bold') +const logger = require('./loggerutil')('%c[Mojang]', 'color: #a02d2a; font-weight: bold') // Constants const minecraftAgent = { @@ -15,44 +15,46 @@ const minecraftAgent = { version: 1 } const authpath = 'https://authserver.mojang.com' +// Service name comes from https://github.com/GeekcornerGH/helios-status-page/tree/master/api const statuses = [ { - service: 'sessionserver.mojang.com', + service: 'mojang-multiplayer-session-service', status: 'grey', name: 'Multiplayer Session Service', essential: true }, { - service: 'authserver.mojang.com', + service: 'mojang-authserver', status: 'grey', name: 'Authentication Service', essential: true }, { - service: 'textures.minecraft.net', + service: 'minecraft-skins', status: 'grey', name: 'Minecraft Skins', essential: false }, { - service: 'api.mojang.com', + service: 'mojang-s-public-api', status: 'grey', name: 'Public API', essential: false }, { - service: 'minecraft.net', + service: 'minecraft-net-website', status: 'grey', name: 'Minecraft.net', essential: false }, { - service: 'account.mojang.com', + service: 'mojang-accounts-website', status: 'grey', name: 'Mojang Accounts Website', essential: false } ] +const requestURL = function (serviceURL) { return `https://raw.githubusercontent.com/GeekCornerGH/helios-status-page/master/api/${serviceURL.service}/uptime.json`} // Functions @@ -64,8 +66,8 @@ const statuses = [ * @param {string} status A valid status code. * @returns {string} The hex color of the status code. */ -exports.statusToHex = function(status){ - switch(status.toLowerCase()){ +exports.statusToHex = function (status) { + switch (status.toLowerCase()) { case 'green': return '#a5c325' case 'yellow': @@ -86,37 +88,32 @@ exports.statusToHex = function(status){ * * @see http://wiki.vg/Mojang_API#API_Status */ -exports.status = function(){ - return new Promise((resolve, reject) => { - request.get('https://status.mojang.com/check', - { - json: true, - timeout: 2500 - }, - function(error, response, body){ +exports.status = async function () { + return new Promise(async (resolve, reject) => { + let data = [] + for(let i=0; i { - const body = { agent, username, password, requestUser } - if(clientToken != null){ + if (clientToken != null) { body.clientToken = clientToken } @@ -149,18 +145,19 @@ exports.authenticate = function(username, password, clientToken, requestUser = t json: true, body }, - function(error, response, body){ - if(error){ + function (error, response, body) { + if (error) { logger.error('Error during authentication.', error) reject(error) } else { - if(response.statusCode === 200){ + if (response.statusCode === 200) { resolve(body) } else { - reject(body || {code: 'ENOTFOUND'}) + reject(body || { code: 'ENOTFOUND' }) } } }) + setTimeout(resolve, 15000) }) } @@ -173,7 +170,7 @@ exports.authenticate = function(username, password, clientToken, requestUser = t * * @see http://wiki.vg/Authentication#Validate */ -exports.validate = function(accessToken, clientToken){ +exports.validate = function (accessToken, clientToken) { return new Promise((resolve, reject) => { request.post(authpath + '/validate', { @@ -183,15 +180,15 @@ exports.validate = function(accessToken, clientToken){ clientToken } }, - function(error, response, body){ - if(error){ + function (error, response, body) { + if (error) { logger.error('Error during validation.', error) reject(error) } else { - if(response.statusCode === 403){ + if (response.statusCode === 403) { resolve(false) } else { - // 204 if valid + // 204 if valid resolve(true) } } @@ -208,7 +205,7 @@ exports.validate = function(accessToken, clientToken){ * * @see http://wiki.vg/Authentication#Invalidate */ -exports.invalidate = function(accessToken, clientToken){ +exports.invalidate = function (accessToken, clientToken) { return new Promise((resolve, reject) => { request.post(authpath + '/invalidate', { @@ -218,12 +215,12 @@ exports.invalidate = function(accessToken, clientToken){ clientToken } }, - function(error, response, body){ - if(error){ + function (error, response, body) { + if (error) { logger.error('Error during invalidation.', error) reject(error) } else { - if(response.statusCode === 204){ + if (response.statusCode === 204) { resolve() } else { reject(body) @@ -244,7 +241,7 @@ exports.invalidate = function(accessToken, clientToken){ * * @see http://wiki.vg/Authentication#Refresh */ -exports.refresh = function(accessToken, clientToken, requestUser = true){ +exports.refresh = function (accessToken, clientToken, requestUser = true) { return new Promise((resolve, reject) => { request.post(authpath + '/refresh', { @@ -255,12 +252,12 @@ exports.refresh = function(accessToken, clientToken, requestUser = true){ requestUser } }, - function(error, response, body){ - if(error){ + function (error, response, body) { + if (error) { logger.error('Error during refresh.', error) reject(error) } else { - if(response.statusCode === 200){ + if (response.statusCode === 200) { resolve(body) } else { reject(body) diff --git a/app/assets/js/scripts/landing.js b/app/assets/js/scripts/landing.js index bd00f090..373337dd 100644 --- a/app/assets/js/scripts/landing.js +++ b/app/assets/js/scripts/landing.js @@ -173,11 +173,6 @@ const refreshMojangStatuses = async function(){ for(let i=0; i @@ -221,6 +216,7 @@ const refreshMojangStatuses = async function(){ document.getElementById('mojang_status_icon').style.color = Mojang.statusToHex(status) } + const refreshServerStatus = async function(fade = false){ loggerLanding.log('Refreshing Server Status') const serv = DistroManager.getDistribution().getServer(ConfigManager.getSelectedServer()) @@ -260,6 +256,9 @@ refreshMojangStatuses() let mojangStatusListener = setInterval(() => refreshMojangStatuses(true), 300000) let serverStatusListener = setInterval(() => refreshServerStatus(true), 300000) + +setTimeout(() => refreshMojangStatuses(true), 1000) //workaround to make sure statuses are correctly shown, else its a kinda broken + /** * Shows an error overlay, toggles off the launch area. * diff --git a/app/assets/js/scripts/uibinder.js b/app/assets/js/scripts/uibinder.js index 0b080d1b..55e47ce1 100644 --- a/app/assets/js/scripts/uibinder.js +++ b/app/assets/js/scripts/uibinder.js @@ -55,45 +55,45 @@ function getCurrentView(){ return currentView } -function showMainUI(data){ - +async function showMainUI(data){ + await require("./assets/js/mojang").status if(!isDev){ - loggerAutoUpdater.log('Initializing..') - ipcRenderer.send('autoUpdateAction', 'initAutoUpdater', ConfigManager.getAllowPrerelease()) + await loggerAutoUpdater.log('Initializing..') + await ipcRenderer.send('autoUpdateAction', 'initAutoUpdater', ConfigManager.getAllowPrerelease()) } - prepareSettings(true) - updateSelectedServer(data.getServer(ConfigManager.getSelectedServer())) - refreshServerStatus() - setTimeout(() => { + await prepareSettings(true) + await updateSelectedServer(data.getServer(ConfigManager.getSelectedServer())) + await refreshServerStatus() + setTimeout(async () => { document.getElementById('frameBar').style.backgroundColor = 'rgba(0, 0, 0, 0.5)' document.body.style.backgroundImage = `url('assets/images/backgrounds/${document.body.getAttribute('bkid')}.jpg')` - $('#main').show() + await $('#main').show() const isLoggedIn = Object.keys(ConfigManager.getAuthAccounts()).length > 0 // If this is enabled in a development environment we'll get ratelimited. // The relaunch frequency is usually far too high. if(!isDev && isLoggedIn){ - validateSelectedAccount() + await validateSelectedAccount() } if(ConfigManager.isFirstLaunch()){ currentView = VIEWS.welcome - $(VIEWS.welcome).fadeIn(1000) + await $(VIEWS.welcome).fadeIn(1000) } else { if(isLoggedIn){ currentView = VIEWS.landing - $(VIEWS.landing).fadeIn(1000) + await $(VIEWS.landing).fadeIn(1000) } else { currentView = VIEWS.login - $(VIEWS.login).fadeIn(1000) + await $(VIEWS.login).fadeIn(1000) } } - setTimeout(() => { - $('#loadingContainer').fadeOut(500, () => { - $('#loadSpinnerImage').removeClass('rotating') + setTimeout(async () => { + await $('#loadingContainer').fadeOut(500, async () => { + await $('#loadSpinnerImage').removeClass('rotating') }) }, 250)