feat: add delete all local data option in settings with keypair destruction
This commit is contained in:
@@ -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 -->
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -278,7 +278,11 @@
|
||||
"searchCleared": "История поиска удалена",
|
||||
"about": "О приложении",
|
||||
"currency": "Валюта",
|
||||
"currencyChanged": "Валюта изменена"
|
||||
"currencyChanged": "Валюта изменена",
|
||||
"deleteAllData": "Удалить все локальные данные",
|
||||
"deleteAllDataHint": "Удаляет все сохранённые данные из этого браузера, включая ключи шифрования, избранное и настройки. История чата не может быть восстановлена.",
|
||||
"deleteAll": "Удалить всё",
|
||||
"confirmDeleteAll": "Удалить все локальные данные? Ключи шифрования будут утеряны, а сообщения чата невозможно будет восстановить."
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Уведомления",
|
||||
|
||||
Reference in New Issue
Block a user