Switches to use internal mojang accessors and removed 'mojang' as a dependency. First attempt at authentication storage, system will be refinded as UI is implemented further. All auth interactions should be made throught authmanager.js

This commit is contained in:
Daniel Scalzi 2017-12-03 08:12:55 -05:00
parent 3c7d7d79af
commit 5afd9815a5
6 changed files with 102 additions and 17 deletions

View File

@ -1,10 +1,10 @@
const mojang = require('mojang')
const path = require('path')
const {AssetGuard} = require(path.join(__dirname, 'assets', 'js', 'assetguard.js'))
const ProcessBuilder = require(path.join(__dirname, 'assets', 'js', 'processbuilder.js'))
const ConfigManager = require(path.join(__dirname, 'assets', 'js', 'configmanager.js'))
const DiscordWrapper = require(path.join(__dirname, 'assets', 'js', 'discordwrapper.js'))
const mojang2 = require(path.join(__dirname, 'assets', 'js', 'mojang.js'))
const Mojang = require(path.join(__dirname, 'assets', 'js', 'mojang.js'))
const AuthManager = require(path.join(__dirname, 'assets', 'js', 'authmanager.js'))
let mojangStatusListener
@ -28,7 +28,7 @@ document.addEventListener('readystatechange', function(){
console.log('Refreshing Mojang Statuses..')
try {
let status = 'grey'
const statuses = await mojang2.status()
const statuses = await Mojang.status()
greenCount = 0
for(let i=0; i<statuses.length; i++){
if(statuses[i].status === 'yellow' && status !== 'red'){
@ -44,7 +44,7 @@ document.addEventListener('readystatechange', function(){
status = 'green'
}
document.getElementById('mojang_status_icon').style.color = mojang2.statusToHex(status)
document.getElementById('mojang_status_icon').style.color = Mojang.statusToHex(status)
} catch (err) {
console.error('Unable to refresh Mojang service status..', err)
@ -62,6 +62,13 @@ document.addEventListener('readystatechange', function(){
let tracker;
testdownloads = async function(){
if(ConfigManager.getSelectedAccount() == null){
console.error('login first.')
//in devtools AuthManager.addAccount(username, pass)
return
}
const content = document.getElementById('launch_content')
const details = document.getElementById('launch_details')
const progress = document.getElementById('launch_progress')
@ -115,10 +122,7 @@ testdownloads = async function(){
det_text.innerHTML = 'Preparing to launch..'
const forgeData = await tracker.loadForgeData(serv.id)
const authUser = await mojang.auth('EMAIL', 'PASS', ConfigManager.getClientToken(), {
name: 'Minecraft',
version: 1
})
const authUser = await AuthManager.validateSelected()
let pb = new ProcessBuilder(ConfigManager.getGameDirectory(), serv, versionData, forgeData, authUser)
det_text.innerHTML = 'Launching game..'
let proc;

View File

@ -0,0 +1,25 @@
const ConfigManager = require('./configmanager.js')
const Mojang = require('./mojang.js')
exports.addAccount = function(username, password){
return new Promise(async function(resolve, reject){
const session = await Mojang.authenticate(username, password, ConfigManager.getClientToken)
const ret = ConfigManager.addAuthAccount(session.selectedProfile.id, session.accessToken, username, session.selectedProfile.name)
ConfigManager.save()
resolve(ret)
})
}
exports.validateSelected = function(){
return new Promise(async function(resolve, reject){
const current = ConfigManager.getSelectedAccount()
if(!await Mojang.validate(current.accessToken, ConfigManager.getClientToken)){
const session = Mojang.refresh(current.accessToken, ConfigManager.getClientToken)
const ret = ConfigManager.updateAuthAccount(current.uuid, session.accessToken)
ConfigManager.save()
resolve(ret)
} else {
resolve(current)
}
})
}

View File

@ -42,7 +42,7 @@ const DEFAULT_CONFIG = {
clientToken: uuidV4(),
selectedServer: null, // Resolved
selectedAccount: null,
authenticationDatabase: []
authenticationDatabase: {}
}
let config = null;
@ -118,7 +118,68 @@ exports.setSelectedServer = function(serverID){
config.selectedServer = serverID
}
//TODO Write Authentication Database/Selected Account accessors here
/**
* Get an array of each account currently authenticated by the launcher.
*
* @returns {Array.<Object>} - an array of each stored authenticated account.
*/
exports.getAuthAccounts = function(){
return config.authenticationDatabase
}
/**
* Returns the authenticated account with the given uuid. Value may
* be null.
*
* @param {String} uuid - the uuid of the authenticated account.
* @returns {Object} - the authenticated account with the given uuid.
*/
exports.getAuthAccount = function(uuid){
return config.authenticationDatabase[uuid]
}
/**
* Update the access token of an authenticated account.
*
* @param {String} uuid - uuid of the authenticated account.
* @param {String} accessToken - the new Access Token.
*
* @returns {Object} - the authenticated account object created by this action.
*/
exports.updateAuthAccount = function(uuid, accessToken){
config.authenticationDatabase[uuid].accessToken = accessToken
return config.authenticationDatabase[uuid]
}
/**
* Adds an authenticated account to the database to be stored.
*
* @param {String} uuid - uuid of the authenticated account.
* @param {String} accessToken - accessToken of the authenticated account.
* @param {String} username - username (usually email) of the authenticated account.
* @param {String} displayName - in game name of the authenticated account.
*
* @returns {Object} - the authenticated account object created by this action.
*/
exports.addAuthAccount = function(uuid, accessToken, username, displayName){
config.selectedAccount = uuid
config.authenticationDatabase[uuid] = {
accessToken,
username,
uuid,
displayName
}
return config.authenticationDatabase[uuid]
}
/**
* Get the currently selected authenticated account.
*
* @returns {Object} - the selected authenticated account.
*/
exports.getSelectedAccount = function(){
return config.authenticationDatabase[config.selectedAccount]
}
// User Configurable Settings

View File

@ -131,7 +131,7 @@ class ProcessBuilder {
let val = null;
switch(identifier){
case 'auth_player_name':
val = this.authUser.selectedProfile.name
val = this.authUser.displayName
break
case 'version_name':
//val = versionData.id
@ -147,7 +147,7 @@ class ProcessBuilder {
val = this.versionData.assets
break
case 'auth_uuid':
val = this.authUser.selectedProfile.id
val = this.authUser.uuid
break
case 'auth_access_token':
val = this.authUser.accessToken

4
package-lock.json generated
View File

@ -1237,10 +1237,6 @@
}
}
},
"mojang": {
"version": "https://registry.npmjs.org/mojang/-/mojang-0.4.1.tgz",
"integrity": "sha1-aWPEL8RlDrwASCSGvdqpB2Mhmi4="
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",

View File

@ -32,7 +32,6 @@
"ejs-electron": "^2.0.1",
"find-java-home": "^0.2.0",
"jquery": "^3.2.1",
"mojang": "^0.4.1",
"request-promise-native": "^1.0.5",
"uuid": "^3.1.0"
},