From 9dfe0e39ebe9dacee7445cba855579e1883aa5a1 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Sat, 13 Feb 2021 15:14:45 +0100 Subject: [PATCH] Update login page --- assets/js/common/functionsSchema.js | 48 ------- assets/js/common/system.js | 41 +++--- assets/js/pages/login.js | 7 +- assets/js/user/userLogin.js | 205 ++++++++++------------------ 4 files changed, 93 insertions(+), 208 deletions(-) diff --git a/assets/js/common/functionsSchema.js b/assets/js/common/functionsSchema.js index b6c451bc..a0f98e4c 100644 --- a/assets/js/common/functionsSchema.js +++ b/assets/js/common/functionsSchema.js @@ -364,54 +364,6 @@ var ComunicWeb = { */ deleteLoginTokens: function(){}, }, - - /** - * Manage user login - */ - userLogin: { - /** - * @var {Boolean} Store user login state (true by default) - */ - __userLogin: true, - - /** - * @var {Integer} Store the current user ID - */ - __userID: 0, - - - /** - * Tell if user is logged in or not - */ - getUserLoginState: function(){}, - - /** - * Get user ID (if logged in) - */ - getUserID: function(){}, - - /** - * Try to get and store current user ID - */ - getCurrentUserId: function(afterGetCurrentUserID){}, - - /** - * Refresh the user login state - */ - refreshLoginState: function(afterLogin){}, - - /** - * Try to login user - */ - loginUser: function(usermail, userpassword, permanentLogin, afterLogin){}, - - /** - * Logout user - */ - logoutUser: function(afterLogout){}, - - //TODO : implement - }, /** * Get user infos diff --git a/assets/js/common/system.js b/assets/js/common/system.js index 8e45be76..e4711507 100644 --- a/assets/js/common/system.js +++ b/assets/js/common/system.js @@ -59,38 +59,29 @@ ComunicWeb.common.system = { ComunicWeb.components.darkTheme.refresh(); /** - * What to do after login refresh + * Get login state */ - var afterLoginRefresh = async function(){ - - // Initialize Websocket if user is connected - if(signed_in()) { - await UserWebSocket.Connect(); - await UserWebSocket.WaitForConnected(); - } + await UserLogin.refreshLoginState(); - /** - * Open a page - */ - if(!openPage){ - //Refresh current page - ComunicWeb.common.page.refresh_current_page(); - } - else - //Open specified page - ComunicWeb.common.page.openPage(openPage); - - //End of init - ComunicWeb.debug.logMessage("Application is ready !"); + // Initialize Websocket if user is connected + if(signed_in()) { + await UserWebSocket.Connect(); + await UserWebSocket.WaitForConnected(); } /** - * Get login state + * Open a page */ - ComunicWeb.user.userLogin.refreshLoginState(afterLoginRefresh); + if(!openPage){ + //Refresh current page + ComunicWeb.common.page.refresh_current_page(); + } + else + //Open specified page + ComunicWeb.common.page.openPage(openPage); - //Success - return true; + //End of init + ComunicWeb.debug.logMessage("Application is ready !"); }, /** diff --git a/assets/js/pages/login.js b/assets/js/pages/login.js index 509afa28..d04bcd4e 100644 --- a/assets/js/pages/login.js +++ b/assets/js/pages/login.js @@ -67,7 +67,6 @@ ComunicWeb.pages.login = { var loginButton = loginBody.getElementsByClassName("btn-login")[0]; //Make the login action accessible - //loginButton.onclick = ComunicWeb.pages.login.loginSubmit; loginBody.onsubmit = ComunicWeb.pages.login.loginSubmit; @@ -103,9 +102,7 @@ ComunicWeb.pages.login = { )){ //Error notification ComunicWeb.common.notificationSystem.showNotification(lang("_login_page_bad_input"), "error"); - - //Stop function execution - return false; + return; } //Enable overlay (use .remove() to remove) @@ -117,7 +114,7 @@ ComunicWeb.pages.login = { var permanentLogin = rememberLoginInput.checked; //What to do once user is logged in (or not) - var afterTryLogin = function(loginResult){ + var afterTryLogin = (loginResult) => { //First, remove overlay screenOverlay.remove(); diff --git a/assets/js/user/userLogin.js b/assets/js/user/userLogin.js index 6438a394..eb3d36b4 100644 --- a/assets/js/user/userLogin.js +++ b/assets/js/user/userLogin.js @@ -4,7 +4,7 @@ * @author Pierre HUBERT */ -ComunicWeb.user.userLogin = { +const UserLogin = { /** * @var {Boolean} Store user login state (true by default) @@ -28,8 +28,7 @@ ComunicWeb.user.userLogin = { * * @return {Boolean} Depend of the result */ - getUserLoginState: function(){ - //Return login state + getUserLoginState: function() { return this.__userLogin; }, @@ -38,100 +37,66 @@ ComunicWeb.user.userLogin = { * * @return {String.Boolean} User ID or false if not logged in */ - getUserID: function(){ + getUserID: function() { //If user is logged in if(this.getUserLoginState() === true){ - //Return user ID return this.__userID; } }, /** * Try to get and store current user ID - * - * @param {function} afterGetCurrentUserID What to do next - * @return {Integer} 0 if it fails */ - getCurrentUserId: function(afterGetCurrentUserID){ - //Prepare and make an API request - var apiURI = "user/getCurrentUserID"; - var params = {}; - var requireLoginTokens = true; + async getCurrentUserId(){ + try { + const result = await api("account/id", {}, true); - //What to do after the request is completed - var afterAPIrequest = function(result){ - //Check if we got any error - if(result.error){ - //Set user ID to 0 (security purpose) - ComunicWeb.user.userLogin.__userID = 0; + // Update user ID + ComunicWeb.user.userLogin.__userID = result.userID; - //If error is 412, make user as logged out - if(result.error.code == 412){ - ComunicWeb.user.userLogin.__userLogin = false; - ComunicWeb.user.loginTokens.deleteLoginTokens(); - - //Restart the application - ComunicWeb.common.system.restart(); - } + //Notify about the event + SendEvent("got_user_id", { + userID: result.userID + }); - //Perform next action - afterGetCurrentUserID(0); - } - else - { - //Update user ID - ComunicWeb.user.userLogin.__userID = result.userID; + } catch(e) { - //Perform next action - afterGetCurrentUserID(result.userID); + //Set user ID to 0 (security purpose) + ComunicWeb.user.userLogin.__userID = 0; - //Notify about the event - SendEvent("got_user_id", { - userID: result.userID - }); + //If error is 412, make user as logged out + if(result.error.code == 412) { + ComunicWeb.user.userLogin.__userLogin = false; + ComunicWeb.user.loginTokens.deleteLoginTokens(); + + //Restart the application + ComunicWeb.common.system.restart(); } - }; - - //Perform request - ComunicWeb.common.api.makeAPIrequest(apiURI, params, requireLoginTokens, afterAPIrequest); + } }, /** * Refresh the user login state - * - * @param {Function} afterRefresh Optionnal, what to do after refreshing login */ - refreshLoginState: function(afterRefresh){ - //First, check if we have login tokens - if(ComunicWeb.user.loginTokens.checkLoginTokens() !== true){ + refreshLoginState: async function() { + // First, check if we have login tokens + if(ComunicWeb.user.loginTokens.checkLoginTokens() !== true) { //Specify the user isn't logged in this.__userLogin = false; this.__userID = 0; - //If there is a next action, do it (even if user isn't logged in) - if(afterRefresh){ - afterRefresh(); - } - - //User not logged in - return false; + return; } - //Try to use tokens to get user infos - var nextStep = function(userID){ - //We check received data - if(userID == 0){ - //We consider user is not logged in - ComunicWeb.user.userLogin.__userLogin = false; - } + // Try to use tokens to get user infos + await UserLogin.getCurrentUserId(); - //If there is a next action, do it - if(afterRefresh){ - afterRefresh(); - } - }; - this.getCurrentUserId(nextStep); + //We check received data + if(this.__userID == 0){ + // We consider user is not logged in + ComunicWeb.user.userLogin.__userLogin = false; + } }, /** @@ -142,74 +107,52 @@ ComunicWeb.user.userLogin = { * @param {Boolean} permanentLogin Specify wether the login is permanent or not * @param {function} afterLogin What to do next */ - loginUser: function(usermail, userpassword, permanentLogin, afterLogin){ - //Prepare and make an API request - var apiURI = "user/connectUSER"; - var params = { - userMail: usermail, - userPassword: userpassword, - }; + loginUser: async function(usermail, userpassword, permanentLogin, afterLogin) { + try { + const result = await api("account/login", { + mail: usermail, + password: userpassword, + }) - //What to do after the request is completed - const afterAPIrequest = async function(result){ - //Prepare data return - var loginstate = false; + //Log + ComunicWeb.debug.logMessage("User login " + usermail + " successful !"); + + //Indicates user is logged in + ComunicWeb.user.userLogin.__userLogin = true; - //Check if there is a success message - if(result.success){ - loginstate = true; + //Store tokens + if(permanentLogin){ + var storageType = "local"; + } + else { + storageType = "session"; + } + ComunicWeb.user.loginTokens.setUserTokens(result.tokens, storageType); - //Log - ComunicWeb.debug.logMessage("User login " + usermail + " successful !"); + // Save email address + ComunicWeb.components.mailCaching.set(usermail); - //Indicates user is logged in - ComunicWeb.user.userLogin.__userLogin = true; + // Initialize websocket + await UserWebSocket.Connect(); + await UserWebSocket.WaitForConnected(); + + // Else refresh login state to get user ID + await this.refreshLoginState(); + + //Then get and apply user language settings + ComunicWeb.components.settings.interface.getLanguage(function(lang){ + + if(!lang.error) + ComunicWeb.common.langs.setLang(lang.lang); - //Store tokens - if(permanentLogin){ - var storageType = "local"; - } - else { - storageType = "session"; - } - ComunicWeb.user.loginTokens.setUserTokens(result.tokens, storageType); - - //Save email address - ComunicWeb.components.mailCaching.set(usermail); - - // Initialize websocket - await UserWebSocket.Connect(); - await UserWebSocket.WaitForConnected(); - } - - //Perform next action if login failed - if(!loginstate) { - ComunicWeb.user.userLogin._last_attempt_response_code = result.error.code; - afterLogin(loginstate); - return false; - } - - //Else refresh login state to get user ID - ComunicWeb.user.userLogin.refreshLoginState(function(){ - - //Then get and apply user language settings - ComunicWeb.components.settings.interface.getLanguage(function(lang){ - - if(!lang.error) - ComunicWeb.common.langs.setLang(lang.lang); - - //And then we'll be able to perform next action - afterLogin(true); - - }); - + afterLogin(true); }); - - }; - //Perform request - ComunicWeb.common.api.makeAPIrequest(apiURI, params, false, afterAPIrequest); + } catch(e) { + UserLogin._last_attempt_response_code = e.code; + afterLogin(false); + } }, /** @@ -258,4 +201,6 @@ ComunicWeb.user.userLogin = { get_last_attempt_response_code: function(){ return this._last_attempt_response_code; } -} \ No newline at end of file +} + +ComunicWeb.user.userLogin = UserLogin; \ No newline at end of file