|
|
@@ -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 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){
|
|
|
try{
|
|
|
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(){
|
|
|
const current = ConfigManager.getSelectedAccount()
|
|
|
const isValid = await Mojang.validate(current.accessToken, ConfigManager.getClientToken())
|