feat: add delete all local data option in settings with keypair destruction

This commit is contained in:
2026-02-08 14:19:17 +01:00
parent 2f02df4910
commit 04476a0bae
10 changed files with 84 additions and 7 deletions

View File

@@ -85,6 +85,15 @@ class PageSettings extends HTMLElement {
}
})
// Delete all local data
this.querySelector('#clear-all-data')?.addEventListener('click', async () => {
if (confirm(t('settings.confirmDeleteAll'))) {
await auth.clearAllData()
window.location.hash = '#/'
window.location.reload()
}
})
// Toggle UUID visibility
this.querySelector('#toggle-uid-btn')?.addEventListener('click', () => {
this.uidVisible = !this.uidVisible
@@ -292,6 +301,16 @@ class PageSettings extends HTMLElement {
${t('settings.clear')}
</button>
</div>
<div class="setting-item">
<div>
<label>${t('settings.deleteAllData')}</label>
<p class="setting-hint">${t('settings.deleteAllDataHint')}</p>
</div>
<button id="clear-all-data" class="btn btn-outline btn-sm btn-danger">
${t('settings.deleteAll')}
</button>
</div>
</section>
<!-- About -->

View File

@@ -149,6 +149,30 @@ class AuthService {
this.notifyListeners()
}
/**
* Clears all local data (tokens, keys, caches, preferences)
*/
async clearAllData() {
await this.logout()
cryptoService.destroyKeyPair()
const keysToRemove = []
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i)
if (key && key.startsWith('dgray_')) keysToRemove.push(key)
}
keysToRemove.forEach(k => localStorage.removeItem(k))
localStorage.removeItem('searchFilters')
localStorage.removeItem('locale')
localStorage.removeItem('theme')
for (let i = sessionStorage.length - 1; i >= 0; i--) {
const key = sessionStorage.key(i)
if (key && key.startsWith('dgray_')) sessionStorage.removeItem(key)
}
}
/**
* Reset preferences to defaults on logout
*/

View File

@@ -140,6 +140,12 @@ class CryptoService {
this.keyPair = null
}
destroyKeyPair() {
this.keyPair = null
localStorage.removeItem(STORAGE_KEY)
localStorage.removeItem(SALT_KEY)
}
getPublicKey() {
if (!this.keyPair) return null
return this.naclUtil.encodeBase64(this.keyPair.publicKey)