fix(#106): [SECURITY] scope recent files and favorites per user

Root cause: localStorage keys 'oxicloud_recent_files' and
'oxicloud_favorites' were global — shared across all users on the same
browser. When user A logged out and user B logged in, user B could see
(and access) user A's recent files and favorites.

Fixes applied:

recent.js:
- Storage key now user-specific: 'oxicloud_recent_files_{username}'
- getStorageKey() derives key from current user in localStorage
- migrateFromLegacyKey() moves data from old global key on init
- Legacy global key is always removed after migration

favorites.js:
- Same pattern: 'oxicloud_favorites_{username}'
- getStorageKey() + migrateFromLegacyKey() added

auth.js (logout):
- Clears user-specific recent and favorites keys before removing
  user data, plus removes any legacy global keys

Bumps service worker cache to v13.
This commit is contained in:
Dionisio
2026-02-14 12:50:44 +01:00
parent ebb0aee84e
commit f25987e553
4 changed files with 105 additions and 13 deletions
+14
View File
@@ -1211,6 +1211,20 @@ function redirectToMainApp() {
* Logout - clear tokens and redirect to login
*/
function logout() {
// Clear user-specific recent files and favorites before removing user data
try {
const userData = JSON.parse(localStorage.getItem(USER_DATA_KEY) || '{}');
if (userData.username) {
localStorage.removeItem(`oxicloud_recent_files_${userData.username}`);
localStorage.removeItem(`oxicloud_favorites_${userData.username}`);
}
} catch (e) {
// Ignore parse errors during cleanup
}
// Also remove any legacy global keys
localStorage.removeItem('oxicloud_recent_files');
localStorage.removeItem('oxicloud_favorites');
localStorage.removeItem(TOKEN_KEY);
localStorage.removeItem(REFRESH_TOKEN_KEY);
localStorage.removeItem(TOKEN_EXPIRY_KEY);