Added function to remove an authenticated account to authmanager.js.

This commit is contained in:
Daniel Scalzi 2018-04-14 22:43:58 -04:00
parent 631c3cd6d4
commit 5475ac0c69
No known key found for this signature in database
GPG Key ID: 5CA2F145B63535F9
3 changed files with 62 additions and 3 deletions

View File

@ -1,6 +1,28 @@
/**
* AuthManager
*
* This module aims to abstract login procedures. Results from Mojang's REST api
* are retrieved through our Mojang module. These results are processed and stored,
* if applicable, in the config using the ConfigManager. All login procedures should
* be made through this module.
*
* @module authmanager
*/
// Requirements
const ConfigManager = require('./configmanager.js') const ConfigManager = require('./configmanager.js')
const Mojang = require('./mojang.js') const Mojang = require('./mojang.js')
// Functions
/**
* Add an account. This will authenticate the given credentials with Mojang's
* authserver. The resultant data will be stored as an auth account in the
* configuration database.
*
* @param {string} username The account username (email if migrated).
* @param {string} password The account password.
* @returns {Promise.<Object>} Promise which resolves to the Mojang authentication response.
*/
exports.addAccount = async function(username, password){ exports.addAccount = async function(username, password){
try{ try{
const session = await Mojang.authenticate(username, password, ConfigManager.getClientToken) const session = await Mojang.authenticate(username, password, ConfigManager.getClientToken)
@ -12,6 +34,35 @@ exports.addAccount = async function(username, password){
} }
} }
/**
* Remove an account. This will invalidate the access token associated
* with the account and then remove it from the database.
*
* @param {string} uuid The UUID of the account to be removed.
* @returns {Promise.<void>} Promise which resolves to void when the action is complete.
*/
exports.removeAccount = async function(uuid){
try {
const authAcc = ConfigManager.getAuthAccount(uuid)
await Mojang.invalidate(authAcc.accessToken, ConfigManager.getClientToken())
ConfigManager.removeAuthAccount(uuid)
ConfigManager.save()
return Promise.resolve()
} catch (err){
return Promise.reject(err)
}
}
/**
* Validate the selected account with Mojang's authserver. If the account is not valid,
* we will attempt to refresh the access token and update that value. If that fails, a
* new login will be required.
*
* **Function is WIP**
*
* @returns {Promise.<boolean>} Promise which resolves to true if the access token is valid,
* otherwise false.
*/
exports.validateSelected = async function(){ exports.validateSelected = async function(){
const current = ConfigManager.getSelectedAccount() const current = ConfigManager.getSelectedAccount()
const isValid = await Mojang.validate(current.accessToken, ConfigManager.getClientToken()) const isValid = await Mojang.validate(current.accessToken, ConfigManager.getClientToken())

View File

@ -1,5 +1,14 @@
/**
* Mojang
*
* This module serves as a minimal wrapper for Mojang's REST api.
*
* @module mojang
*/
// Requirements
const request = require('request') const request = require('request')
// Constants
const minecraftAgent = { const minecraftAgent = {
name: 'Minecraft', name: 'Minecraft',
version: 1 version: 1
@ -38,6 +47,8 @@ const statuses = [
} }
] ]
// Functions
/** /**
* Converts a Mojang status color to a hex value. Valid statuses * Converts a Mojang status color to a hex value. Valid statuses
* are 'green', 'yellow', 'red', and 'grey'. Grey is a custom status * are 'green', 'yellow', 'red', and 'grey'. Grey is a custom status

View File

@ -1,9 +1,6 @@
/** /**
* The initial iteration of this file will not support optional submodules. * The initial iteration of this file will not support optional submodules.
* Support will be added down the line, only top-level modules will recieve optional support. * Support will be added down the line, only top-level modules will recieve optional support.
*
*
* TODO why are logs not working??????
*/ */
const AdmZip = require('adm-zip') const AdmZip = require('adm-zip')
const {AssetGuard, Library} = require('./assetguard.js') const {AssetGuard, Library} = require('./assetguard.js')