From 34780f3aea78bbf5dd35230ba7ad4a67618b42a0 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Mon, 16 May 2016 19:09:37 -0400 Subject: [PATCH] Refresh login page if server version of client doesn't match browser version of client (#3004) --- webapp/components/login/login.jsx | 3 +++ webapp/root.jsx | 4 +++- webapp/stores/browser_store.jsx | 5 +++++ webapp/utils/async_client.jsx | 30 +++++++++++++++++------------- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/webapp/components/login/login.jsx b/webapp/components/login/login.jsx index 8ae3fdd4d4..8dbcf33ac8 100644 --- a/webapp/components/login/login.jsx +++ b/webapp/components/login/login.jsx @@ -9,6 +9,7 @@ import * as GlobalActions from 'action_creators/global_actions.jsx'; import UserStore from 'stores/user_store.jsx'; import Client from 'utils/web_client.jsx'; +import * as AsyncClient from 'utils/async_client.jsx'; import * as TextFormatting from 'utils/text_formatting.jsx'; import * as Utils from 'utils/utils.jsx'; @@ -44,6 +45,8 @@ export default class Login extends React.Component { if (UserStore.getCurrentUser()) { browserHistory.push('/select_team'); } + + AsyncClient.checkVersion(); } preSubmit(e) { diff --git a/webapp/root.jsx b/webapp/root.jsx index 2b54c2174c..f53109cdd8 100644 --- a/webapp/root.jsx +++ b/webapp/root.jsx @@ -24,6 +24,7 @@ import * as AsyncClient from 'utils/async_client.jsx'; import ChannelStore from 'stores/channel_store.jsx'; import ErrorStore from 'stores/error_store.jsx'; import TeamStore from 'stores/team_store.jsx'; +import BrowserStore from 'stores/browser_store.jsx'; import * as Utils from 'utils/utils.jsx'; import Client from 'utils/web_client.jsx'; @@ -101,9 +102,10 @@ function preRenderSetup(callwhendone) { } ); - // Make sure the websockets close + // Make sure the websockets close and reset version $(window).on('beforeunload', () => { + BrowserStore.setLastServerVersion(''); Websockets.close(); } ); diff --git a/webapp/stores/browser_store.jsx b/webapp/stores/browser_store.jsx index 2dae78f461..11fe50928e 100644 --- a/webapp/stores/browser_store.jsx +++ b/webapp/stores/browser_store.jsx @@ -158,6 +158,7 @@ class BrowserStoreClass { clear() { // don't clear the logout id so IE11 can tell which tab sent a logout request const logoutId = sessionStorage.getItem('__logout__'); + const serverVersion = this.getLastServerVersion(); sessionStorage.clear(); localStorage.clear(); @@ -165,6 +166,10 @@ class BrowserStoreClass { if (logoutId) { sessionStorage.setItem('__logout__', logoutId); } + + if (serverVersion) { + this.setLastServerVersion(serverVersion); + } } clearAll() { diff --git a/webapp/utils/async_client.jsx b/webapp/utils/async_client.jsx index 6535c024d1..7ddf299f64 100644 --- a/webapp/utils/async_client.jsx +++ b/webapp/utils/async_client.jsx @@ -47,7 +47,21 @@ function isCallInProgress(callName) { return true; } -export function getChannels(checkVersion) { +export function checkVersion() { + var serverVersion = Client.getServerVersion(); + + if (serverVersion !== BrowserStore.getLastServerVersion()) { + if (!BrowserStore.getLastServerVersion() || BrowserStore.getLastServerVersion() === '') { + BrowserStore.setLastServerVersion(serverVersion); + } else { + BrowserStore.setLastServerVersion(serverVersion); + window.location.reload(true); + console.log('Detected version update refreshing the page'); //eslint-disable-line no-console + } + } +} + +export function getChannels(doVersionCheck) { if (isCallInProgress('getChannels')) { return null; } @@ -58,18 +72,8 @@ export function getChannels(checkVersion) { (data) => { callTracker.getChannels = 0; - if (checkVersion) { - var serverVersion = Client.getServerVersion(); - - if (serverVersion !== BrowserStore.getLastServerVersion()) { - if (!BrowserStore.getLastServerVersion() || BrowserStore.getLastServerVersion() === '') { - BrowserStore.setLastServerVersion(serverVersion); - } else { - BrowserStore.setLastServerVersion(serverVersion); - window.location.reload(true); - console.log('Detected version update refreshing the page'); //eslint-disable-line no-console - } - } + if (doVersionCheck) { + checkVersion(); } AppDispatcher.handleServerAction({