diff options
author | Maksim Sukharev <antreesy.web@gmail.com> | 2025-02-21 16:57:59 +0100 |
---|---|---|
committer | Maksim Sukharev <antreesy.web@gmail.com> | 2025-02-21 16:57:59 +0100 |
commit | 745bcafe59b493b2a059c83cc4d02c193e5c5246 (patch) | |
tree | 4f8a410637a9c1f8f726de4b3a143e7b763d0dc8 | |
parent | 0fdc214896a6f15f71f8e8e6c07ab009c18cf263 (diff) | |
download | nextcloud-server-fix/noid/wipe-local-storage.tar.gz nextcloud-server-fix/noid/wipe-local-storage.zip |
fixup!: fix: wipe local storages on log outfix/noid/wipe-local-storage
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
-rw-r--r-- | core/src/utils/xhr-request.js | 28 | ||||
-rw-r--r-- | core/src/views/Login.vue | 9 |
2 files changed, 22 insertions, 15 deletions
diff --git a/core/src/utils/xhr-request.js b/core/src/utils/xhr-request.js index baed0dc78e9..2ffe2434fad 100644 --- a/core/src/utils/xhr-request.js +++ b/core/src/utils/xhr-request.js @@ -33,7 +33,7 @@ const isNextcloudUrl = (url) => { * @returns {Promise<void>} */ async function checkLoginStatus() { - // skip if no logged-in user + // skip if no logged in user if (getCurrentUser() === null) { return } @@ -51,13 +51,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.') - // Clear all storages and redirect to login page - window.localStorage.clear() - window.sessionStorage.clear() - const indexedDBList = await window.indexedDB.databases() - for (const indexedDB of indexedDBList) { - await window.indexedDB.deleteDatabase(indexedDB.name) - } + await wipeBrowserStorages() window.location = generateUrl('/login?redirect_url={url}', { url: window.location.pathname + window.location.search + window.location.hash, }) @@ -70,6 +64,24 @@ async function checkLoginStatus() { } /** + * Clear all Browser storages connected to current origin. + * @returns {Promise<void>} + */ +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) + } + console.debug('Browser storages cleared') + } catch (e) { + console.error('Could not clear browser storages', e) + } +} + +/** * Intercept XMLHttpRequest and fetch API calls to add X-Requested-With header * * This is also done in @nextcloud/axios but not all requests pass through that diff --git a/core/src/views/Login.vue b/core/src/views/Login.vue index 318e72f89a8..7a35331b090 100644 --- a/core/src/views/Login.vue +++ b/core/src/views/Login.vue @@ -113,16 +113,11 @@ import ResetPassword from '../components/login/ResetPassword.vue' import UpdatePassword from '../components/login/UpdatePassword.vue' import NcButton from '@nextcloud/vue/components/NcButton' import NcNoteCard from '@nextcloud/vue/components/NcNoteCard' +import { wipeBrowserStorages } from '../utils/xhr-request.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 { |