changeset 61598dd887d9 in sao:default
details: https://hg.tryton.org/sao?cmd=changeset;node=61598dd887d9
description:
        Restore stored session after first login dialog

        If we find a session once the user has filled the database and login, 
we should
        try it first. If it does not work the first request will trigger the 
renewal
        process.

        issue8948
        review262701002
diffstat:

 src/session.js |  36 +++++++++++++++++++++---------------
 1 files changed, 21 insertions(+), 15 deletions(-)

diffs (75 lines):

diff -r c60a4c38e2af -r 61598dd887d9 src/session.js
--- a/src/session.js    Tue Jan 21 00:34:55 2020 +0100
+++ b/src/session.js    Tue Jan 21 00:42:15 2020 +0100
@@ -16,18 +16,7 @@
             this.prm = jQuery.when();  // renew promise
             this.database = database;
             this.login = login;
-            if (this.database) {
-                var session_data = localStorage.getItem(
-                    'sao_session_' + database);
-                if (session_data !== null) {
-                    session_data = JSON.parse(session_data);
-                    if (!this.login || this.login == session_data.login) {
-                        this.login = session_data.login;
-                        this.user_id = session_data.user_id;
-                        this.session = session_data.session;
-                    }
-                }
-            }
+            this.restore();
             this.context = {
                 client: Sao.Bus.id,
             };
@@ -38,8 +27,9 @@
         get_auth: function() {
             return utoa(this.login + ':' + this.user_id + ':' + this.session);
         },
-        do_login: function(login, parameters) {
+        do_login: function(parameters) {
             var dfd = jQuery.Deferred();
+            var login = this.login;
             var func = function(parameters) {
                 return {
                     'method': 'common.db.login',
@@ -102,6 +92,20 @@
                 jQuery.extend(this.context, context);
             }.bind(this));
         },
+        restore: function() {
+            if (this.database && !this.session) {
+                var session_data = localStorage.getItem(
+                    'sao_session_' + this.database);
+                if (session_data !== null) {
+                    session_data = JSON.parse(session_data);
+                    if (!this.login || this.login == session_data.login) {
+                        this.login = session_data.login;
+                        this.user_id = session_data.user_id;
+                        this.session = session_data.session;
+                    }
+                }
+            }
+        },
         store: function() {
             var session = {
                 'login': this.login,
@@ -189,7 +193,9 @@
             dialog.button.prop('disabled', true);
             dialog.modal.modal('hide');
             session.database = database;
-            session.do_login(login)
+            session.login = login;
+            session.restore();
+            (session.session ? jQuery.when() : session.do_login())
                 .then(function() {
                     dfd.resolve(session);
                     dialog.modal.remove();
@@ -246,7 +252,7 @@
         }
         var dfd = jQuery.Deferred();
         session.prm = dfd.promise();
-        session.do_login(session.login).then(dfd.resolve, function() {
+        session.do_login().then(dfd.resolve, function() {
             Sao.logout();
             dfd.reject();
         }).done(function () {

Reply via email to