summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2015-11-06 10:18:13 -0500
committerChristopher Speller <crspeller@gmail.com>2015-11-06 10:18:13 -0500
commit982162ab0df0fc84032d61009b27b92283b1a242 (patch)
tree5efe0242f0d61f11b4d16718f9cd913db85bcab3 /web
parent51da1b1ca1ff92fcfcdb70c46236f10ee3d20a3f (diff)
parent17cd95ae054b68a0f6816c6038f67a8901ac94d5 (diff)
downloadchat-982162ab0df0fc84032d61009b27b92283b1a242.tar.gz
chat-982162ab0df0fc84032d61009b27b92283b1a242.tar.bz2
chat-982162ab0df0fc84032d61009b27b92283b1a242.zip
Merge pull request #1328 from mattermost/PLT-1016
PLT-1016 force logout on other browsers
Diffstat (limited to 'web')
-rw-r--r--web/react/stores/browser_store.jsx37
-rw-r--r--web/react/utils/client.jsx1
-rw-r--r--web/templates/head.html9
3 files changed, 38 insertions, 9 deletions
diff --git a/web/react/stores/browser_store.jsx b/web/react/stores/browser_store.jsx
index 75fb8aa3c..8e86ce32f 100644
--- a/web/react/stores/browser_store.jsx
+++ b/web/react/stores/browser_store.jsx
@@ -24,11 +24,17 @@ class BrowserStoreClass {
this.setLastServerVersion = this.setLastServerVersion.bind(this);
this.clear = this.clear.bind(this);
this.clearAll = this.clearAll.bind(this);
+ this.checkedLocalStorageSupported = '';
+ this.signalLogout = this.signalLogout.bind(this);
var currentVersion = sessionStorage.getItem('storage_version');
if (currentVersion !== global.window.mm_config.Version) {
sessionStorage.clear();
- sessionStorage.setItem('storage_version', global.window.mm_config.Version);
+ try {
+ sessionStorage.setItem('storage_version', global.window.mm_config.Version);
+ } catch (e) {
+ // Do nothing
+ }
}
}
@@ -105,6 +111,13 @@ class BrowserStoreClass {
sessionStorage.setItem('last_server_version', version);
}
+ signalLogout() {
+ if (this.isLocalStorageSupported()) {
+ localStorage.setItem('__logout__', 'yes');
+ localStorage.removeItem('__logout__');
+ }
+ }
+
/**
* Preforms the given action on each item that has the given prefix
* Signature for action is action(key, value)
@@ -147,20 +160,26 @@ class BrowserStoreClass {
}
isLocalStorageSupported() {
+ if (this.checkedLocalStorageSupported !== '') {
+ return this.checkedLocalStorageSupported;
+ }
+
try {
- sessionStorage.setItem('testSession', '1');
- sessionStorage.removeItem('testSession');
+ sessionStorage.setItem('__testSession__', '1');
+ sessionStorage.removeItem('__testSession__');
- localStorage.setItem('testLocal', '1');
- if (localStorage.getItem('testLocal') !== '1') {
- return false;
+ localStorage.setItem('__testLocal__', '1');
+ if (localStorage.getItem('__testLocal__') !== '1') {
+ this.checkedLocalStorageSupported = false;
}
- localStorage.removeItem('testLocal', '1');
+ localStorage.removeItem('__testLocal__', '1');
- return true;
+ this.checkedLocalStorageSupported = true;
} catch (e) {
- return false;
+ this.checkedLocalStorageSupported = false;
}
+
+ return this.checkedLocalStorageSupported;
}
}
diff --git a/web/react/utils/client.jsx b/web/react/utils/client.jsx
index 003e24d33..d27fe16cf 100644
--- a/web/react/utils/client.jsx
+++ b/web/react/utils/client.jsx
@@ -231,6 +231,7 @@ export function resetPassword(data, success, error) {
export function logout() {
track('api', 'api_users_logout');
var currentTeamUrl = TeamStore.getCurrentTeamUrl();
+ BrowserStore.signalLogout();
BrowserStore.clear();
ErrorStore.storeLastError(null);
window.location.href = currentTeamUrl + '/logout';
diff --git a/web/templates/head.html b/web/templates/head.html
index a73e809a7..2bbf921ee 100644
--- a/web/templates/head.html
+++ b/web/templates/head.html
@@ -52,6 +52,15 @@
headers: { 'X-MM-TokenIndex': mm_session_token_index }
});
}
+
+ $(function () {
+ $(window).bind('storage', function (e) {
+ if (e.originalEvent.key === '__logout__') {
+ console.log('detected logout from a different tab');
+ window.location.href = '/' + window.mm_team.name;
+ }
+ });
+ });
</script>
<script>