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)

View File

@@ -278,7 +278,11 @@
"searchCleared": "Suchverlauf gelöscht",
"about": "Über",
"currency": "Währung",
"currencyChanged": "Währung geändert"
"currencyChanged": "Währung geändert",
"deleteAllData": "Alle lokalen Daten löschen",
"deleteAllDataHint": "Entfernt alle gespeicherten Daten aus diesem Browser, einschließlich Verschlüsselungsschlüssel, Favoriten und Einstellungen. Chat-Verläufe können nicht wiederhergestellt werden.",
"deleteAll": "Alles löschen",
"confirmDeleteAll": "Alle lokalen Daten löschen? Verschlüsselungsschlüssel gehen verloren und Chat-Nachrichten können nicht wiederhergestellt werden."
},
"notifications": {
"title": "Benachrichtigungen",

View File

@@ -278,7 +278,11 @@
"searchCleared": "Search history deleted",
"about": "About",
"currency": "Currency",
"currencyChanged": "Currency changed"
"currencyChanged": "Currency changed",
"deleteAllData": "Delete all local data",
"deleteAllDataHint": "Removes all saved data from this browser including encryption keys, favorites, and preferences. Chat history cannot be recovered.",
"deleteAll": "Delete all",
"confirmDeleteAll": "Delete all local data? Encryption keys will be lost and chat messages cannot be recovered."
},
"notifications": {
"title": "Notifications",

View File

@@ -278,7 +278,11 @@
"searchCleared": "Historial de búsqueda eliminado",
"about": "Acerca de",
"currency": "Moneda",
"currencyChanged": "Moneda cambiada"
"currencyChanged": "Moneda cambiada",
"deleteAllData": "Eliminar todos los datos locales",
"deleteAllDataHint": "Elimina todos los datos guardados de este navegador, incluidas las claves de cifrado, favoritos y preferencias. El historial de chat no se puede recuperar.",
"deleteAll": "Eliminar todo",
"confirmDeleteAll": "¿Eliminar todos los datos locales? Las claves de cifrado se perderán y los mensajes no se podrán recuperar."
},
"notifications": {
"title": "Notificaciones",

View File

@@ -278,7 +278,11 @@
"searchCleared": "Historique de recherche supprimé",
"about": "À propos",
"currency": "Devise",
"currencyChanged": "Devise modifiée"
"currencyChanged": "Devise modifiée",
"deleteAllData": "Supprimer toutes les données locales",
"deleteAllDataHint": "Supprime toutes les données enregistrées de ce navigateur, y compris les clés de chiffrement, les favoris et les préférences. L'historique des conversations ne peut pas être récupéré.",
"deleteAll": "Tout supprimer",
"confirmDeleteAll": "Supprimer toutes les données locales ? Les clés de chiffrement seront perdues et les messages ne pourront pas être récupérés."
},
"notifications": {
"title": "Notifications",

View File

@@ -278,7 +278,11 @@
"searchCleared": "Cronologia ricerche eliminata",
"about": "Informazioni",
"currency": "Valuta",
"currencyChanged": "Valuta cambiata"
"currencyChanged": "Valuta cambiata",
"deleteAllData": "Elimina tutti i dati locali",
"deleteAllDataHint": "Rimuove tutti i dati salvati da questo browser, incluse le chiavi di crittografia, i preferiti e le impostazioni. La cronologia delle chat non può essere recuperata.",
"deleteAll": "Elimina tutto",
"confirmDeleteAll": "Eliminare tutti i dati locali? Le chiavi di crittografia andranno perse e i messaggi non potranno essere recuperati."
},
"notifications": {
"title": "Notifiche",

View File

@@ -278,7 +278,11 @@
"searchCleared": "Histórico de busca excluído",
"about": "Sobre",
"currency": "Moeda",
"currencyChanged": "Moeda alterada"
"currencyChanged": "Moeda alterada",
"deleteAllData": "Excluir todos os dados locais",
"deleteAllDataHint": "Remove todos os dados salvos deste navegador, incluindo chaves de criptografia, favoritos e preferências. O histórico de conversas não pode ser recuperado.",
"deleteAll": "Excluir tudo",
"confirmDeleteAll": "Excluir todos os dados locais? As chaves de criptografia serão perdidas e as mensagens não poderão ser recuperadas."
},
"notifications": {
"title": "Notificações",

View File

@@ -278,7 +278,11 @@
"searchCleared": "История поиска удалена",
"about": "О приложении",
"currency": "Валюта",
"currencyChanged": "Валюта изменена"
"currencyChanged": "Валюта изменена",
"deleteAllData": "Удалить все локальные данные",
"deleteAllDataHint": "Удаляет все сохранённые данные из этого браузера, включая ключи шифрования, избранное и настройки. История чата не может быть восстановлена.",
"deleteAll": "Удалить всё",
"confirmDeleteAll": "Удалить все локальные данные? Ключи шифрования будут утеряны, а сообщения чата невозможно будет восстановить."
},
"notifications": {
"title": "Уведомления",