From effdd6b91f2d28a99f357eae11da628bfbff1181 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Tue, 2 Jul 2019 17:49:37 +0200 Subject: [PATCH] force logout in all tabs when user is logged out in any tab --- CHANGELOG | 2 ++ frontend-js/src/main/js/ServerConnector.js | 28 +++++++++++++++++-- .../src/test/js/ServerConnector-mock.js | 4 +++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index e7624beee3..58d54e527f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,8 @@ minerva (13.1.1) stable; urgency=medium inside compartment (#856) * Bug fix: searching for some drugs in chembl didn't provide any results even though that data exists, for instance 'DORLIMOMAB ARITOX' (#842) + * Bug fix: user wasn't logged out in all tabs when the log out event appeard + in only one of them (#847) -- Piotr Gawron <piotr.gawron@uni.lu> Fri, 28 Jun 2019 17:00:00 +0200 diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index 85501f0bf4..6ee653204b 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -99,6 +99,30 @@ ServerConnector.getMinOverlayColorInt = function () { }); }; +ServerConnector.checkIfUserLogoutFromDifferentTab = function () { + var self = this; + var sessionLogin = self.getSessionData(null).getLogin(); + var tabLogin = self._currentTabLogin; + if (tabLogin === undefined) { + self._currentTabLogin = ServerConnector.getSessionData(null).getLogin(); + tabLogin = self._currentTabLogin; + } + if (tabLogin !== sessionLogin) { + setTimeout(function () { + var sessionLogin = self.getSessionData(null).getLogin(); + var tabLogin = self._currentTabLogin; + if (tabLogin !== sessionLogin) { + logger.warn("User was log out in different tab. Reloading page"); + window.location.reload(false); + } + }, 100); + } +}; + +setInterval(function () { + ServerConnector.checkIfUserLogoutFromDifferentTab(); +}, 1000); + ServerConnector.returnUserOrSystemColor = function (userColor, systemPromisedColor) { return systemPromisedColor.then(function (systemColor) { var color = userColor; @@ -1884,9 +1908,10 @@ ServerConnector.login = function (login, password) { if (data["login"] !== undefined) { params.login = data["login"]; } + self._currentTabLogin = params.login; self.getSessionData().setLogin(params.login); return Promise.resolve(self.getSessionData().getToken()); - }, function (error) { + }).catch(function (error) { if (error instanceof NetworkError && error.statusCode === HttpStatus.FORBIDDEN) { throw new InvalidCredentialsError("Invalid credentials"); } else { @@ -2815,5 +2840,4 @@ ServerConnector.submitErrorToMinervaNet = function (report, callback) { }, callback); }; - module.exports = ServerConnector; diff --git a/frontend-js/src/test/js/ServerConnector-mock.js b/frontend-js/src/test/js/ServerConnector-mock.js index ca183829e0..2690d77827 100644 --- a/frontend-js/src/test/js/ServerConnector-mock.js +++ b/frontend-js/src/test/js/ServerConnector-mock.js @@ -43,6 +43,10 @@ function encodeParams(params) { return result; } +ServerConnectorMock.checkIfUserLogoutFromDifferentTab = function () { + logger.debug("checkIfUserLogoutFromDifferentTab is ignored"); +}; + ServerConnectorMock._sendRequest = function (params) { var self = this; var url = params.url; -- GitLab