From 45f8155d5fe48e90561f93f70bc0fbb18a8cb7c9 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Fri, 21 Feb 2025 16:28:51 +0100 Subject: [PATCH] fix: wipe local storages on log out Signed-off-by: Maksim Sukharev [skip ci] --- core/src/utils/xhr-request.js | 20 ++++++++++++++++++++ core/src/views/Login.vue | 8 +------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/core/src/utils/xhr-request.js b/core/src/utils/xhr-request.js index 68641ebc0069d..c256313df314b 100644 --- a/core/src/utils/xhr-request.js +++ b/core/src/utils/xhr-request.js @@ -5,6 +5,7 @@ import { getCurrentUser } from '@nextcloud/auth' import { generateUrl, getRootUrl } from '@nextcloud/router' +import logger from '../logger.js' /** * @@ -51,6 +52,7 @@ async function checkLoginStatus() { const { status } = await window.fetch(generateUrl('/apps/files')) if (status === 401) { console.warn('User session was terminated, forwarding to login page.') + await wipeBrowserStorages() window.location = generateUrl('/login?redirect_url={url}', { url: window.location.pathname + window.location.search + window.location.hash, }) @@ -62,6 +64,24 @@ async function checkLoginStatus() { } } +/** + * Clear all Browser storages connected to current origin. + * @returns {Promise} + */ +export async function wipeBrowserStorages() { + try { + window.localStorage.clear() + window.sessionStorage.clear() + const indexedDBList = await window.indexedDB.databases() + for (const indexedDB of indexedDBList) { + await window.indexedDB.deleteDatabase(indexedDB.name) + } + logger.debug('Browser storages cleared') + } catch (error) { + logger.error('Could not clear browser storages', { error }) + } +} + /** * Intercept XMLHttpRequest and fetch API calls to add X-Requested-With header * diff --git a/core/src/views/Login.vue b/core/src/views/Login.vue index d6c88d607ad78..b01e16408d2f2 100644 --- a/core/src/views/Login.vue +++ b/core/src/views/Login.vue @@ -116,13 +116,7 @@ import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js' const query = queryString.parse(location.search) if (query.clear === '1') { - try { - window.localStorage.clear() - window.sessionStorage.clear() - console.debug('Browser storage cleared') - } catch (e) { - console.error('Could not clear browser storage', e) - } + wipeBrowserStorages() } export default {