From eae3a5b11465c5d71fe5c8d0200dbb6025645d0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=C2=A0Koby=C5=82ko?= Date: Sat, 11 Nov 2023 17:37:49 +0100 Subject: [PATCH 1/3] Improve error handling when importing invalid backup files --- .../twofasapp/designsystem/dialog/Dialog.kt | 10 +++- .../main/java/com/twofasapp/locale/Strings.kt | 1 + .../src/main/res/values-de-rDE/strings.xml | 47 ++++++++++--------- .../src/main/res/values-es-rES/strings.xml | 3 +- .../src/main/res/values-fr-rFR/strings.xml | 3 +- .../locale/src/main/res/values-in/strings.xml | 3 +- .../src/main/res/values-it-rIT/strings.xml | 3 +- .../src/main/res/values-nl-rNL/strings.xml | 3 +- .../src/main/res/values-pl-rPL/strings.xml | 3 +- .../src/main/res/values-pt-rBR/strings.xml | 3 +- .../src/main/res/values-pt-rPT/strings.xml | 3 +- .../src/main/res/values-uk-rUA/strings.xml | 3 +- core/locale/src/main/res/values/strings.xml | 7 +-- .../data/services/BackupRepositoryImpl.kt | 6 +++ .../data/services/ServicesRepository.kt | 1 + .../data/services/ServicesRepositoryImpl.kt | 6 ++- .../backup/ui/import/BackupImportScreen.kt | 30 +++++++++--- .../backup/ui/import/BackupImportUiState.kt | 1 + .../backup/ui/import/BackupImportViewModel.kt | 13 ++++- gradle/libs.versions.toml | 2 +- 20 files changed, 106 insertions(+), 45 deletions(-) diff --git a/core/designsystem/src/main/java/com/twofasapp/designsystem/dialog/Dialog.kt b/core/designsystem/src/main/java/com/twofasapp/designsystem/dialog/Dialog.kt index 72747902..9422942f 100644 --- a/core/designsystem/src/main/java/com/twofasapp/designsystem/dialog/Dialog.kt +++ b/core/designsystem/src/main/java/com/twofasapp/designsystem/dialog/Dialog.kt @@ -2,13 +2,18 @@ package com.twofasapp.designsystem.dialog import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -67,6 +72,7 @@ fun BaseDialog( ) { Column( modifier = Modifier + .height(IntrinsicSize.Min) .sizeIn(minWidth = MinWidth, maxWidth = MaxWidth) .padding( top = DialogPadding, @@ -130,7 +136,7 @@ private fun Title( } @Composable -private fun Body( +private fun ColumnScope.Body( text: String?, textAnnotated: AnnotatedString?, ) { @@ -142,6 +148,8 @@ private fun Body( modifier = Modifier .padding(horizontal = DialogPadding) .padding(TitlePadding) + .verticalScroll(rememberScrollState()) + ) } else if (textAnnotated != null) { Text( diff --git a/core/locale/src/main/java/com/twofasapp/locale/Strings.kt b/core/locale/src/main/java/com/twofasapp/locale/Strings.kt index 7cf4aa58..ed5c01a5 100644 --- a/core/locale/src/main/java/com/twofasapp/locale/Strings.kt +++ b/core/locale/src/main/java/com/twofasapp/locale/Strings.kt @@ -334,6 +334,7 @@ class Strings(c: Context) { val backupImportErrorMsg = c.getString(R.string.backup__import_error_file_invalid) val backupImportErrorMsgSize = c.getString(R.string.backup__import_error_file_size) val backupImportErrorDecryptError = c.getString(R.string.backup_error_decrypt_unknown) + val backupImportErrorInvalidSchema = c.getString(R.string.backup__import_invalid_version) val backupImportSuccess = c.getString(R.string.import_ga_success) val backupTurnOffTitle = c.getString(R.string.backup_turn_off_title) diff --git a/core/locale/src/main/res/values-de-rDE/strings.xml b/core/locale/src/main/res/values-de-rDE/strings.xml index 77e799d9..34ccf386 100644 --- a/core/locale/src/main/res/values-de-rDE/strings.xml +++ b/core/locale/src/main/res/values-de-rDE/strings.xml @@ -5,7 +5,7 @@ Release: Working copy Locale: de-DE, German (Germany) Exported by: rafakob - Exported at: Fri, 27 Oct 2023 12:02:50 -0700 + Exported at: Sat, 11 Nov 2023 08:12:03 -0800 --> Verwendung von 2FAS beginnen - Bedingungen für den Service + Allgemeine Geschäftsbedingungen Kopple dein Online-Service-Konto mit 2FAS oder importiere deine Tokens Neuen Dienst koppeln @@ -119,11 +119,11 @@ Bitte bestätige deine neue PIN PIN erstellen - Bitte gebe deine aktuelle PIN ein + Bitte gib deine aktuelle PIN ein - Bitte gebe deine neue PIN ein + Bitte gib deine neue PIN ein - Bitte gebe deine PIN ein + Bitte gib deine PIN ein Zu viele Versuche. Bitte versuche es erneut %s Zu viele Versuche. Bitte versuche es nach %s Minuten erneut. @@ -452,7 +452,7 @@ Token erfolgreich gesendet! Fehler beim Senden des Codes. %s - Gekoppelte Gerät löschen + Gekoppeltes Gerät löschen Möchtest du wirklich dieses gekoppelte Gerät löschen? Datum verbunden Diesen Webbrowser vergessen @@ -488,26 +488,26 @@ Wir benötigen die Google Drive-Berechtigung, um die Sicherungsdateien in den App-Daten zu speichern. Internetverbindung benötigt Um mit Google Drive zu synchronisieren, musst du deine Internetverbindung aktivieren. - Um Zugriff auf Google Drive zu entfernen, musst du deine Internetverbindung aktivieren. + Um den Zugriff auf Google Drive zu entfernen, musst du deine Internetverbindung aktivieren. Speichere und synchronisiere deine Sicherungsdatei automatisch in einem versteckten Ordner auf Google Drive. Dieser Ordner ist nur durch die 2FAS App zugänglich. Bei der Synchronisierung des Backups ist ein Fehler aufgetreten. Bitte starte die App nach ein paar Minuten neu und versuche es erneut. - Bei der Verschlüsselung des Backups ist ein Fehler aufgetreten. Bitte gebe dein Passwort erneut ein. - Bei der Entschlüsselung des Backups ist ein Fehler aufgetreten. Bitte gebe dein Passwort erneut ein. + Bei der Verschlüsselung des Backups ist ein Fehler aufgetreten. Bitte gib dein Passwort erneut ein. + Bei der Entschlüsselung des Backups ist ein Fehler aufgetreten. Bitte gib dein Passwort erneut ein. Es existiert ein Problem mit iCloud. Überprüfen die Systemeinstellungen Es gab ein Problem mit den Berechtigungen deines Google Drive-Kontos. Versuche die Synchronisierung ein- und auszuschalten. - Dein Backup ist durch ein Passwort geschützt. Schalte es an und gebe dein Passwort ein. - Dein Backup ist durch ein Passwort geschützt aber ein falsches Passwort wurde verwendet. Schalte es wieder an und gebe dein Passwort ein. + Dein Backup ist passwortgeschützt. Schalte es ein und gib dein Passwort ein. + Dein Backup ist passwortgeschützt, aber das eingegebene Passwort ist falsch. Schalte es ein und gib dein Passwort ein. Dienstzuweisung Personalisierung Marke ändern Erweitert Icon beantragen Kennzeichnung bearbeiten - Bist du dir sicher, das du diese Gruppe löschen möchtest? + Bist du dir sicher, dass du diese Gruppe löschen möchtest? Deine Sicherungsdatei ist zum Exportieren bereit Exportiere diese Datei, um deine 2FAS-Tokens zu sichern. Du kannst die Datei später auf anderen Geräten mit der 2FAS Anwendung importieren. Datei ohne Passwort exportieren\n(nicht empfohlen) - Die Datei wird mit der Dienstleiste der App synchronisiert. + Die Datei wird mit der Dienstliste der App synchronisiert. Vielleicht später Einschalten Keine Dienste hinzugefügt @@ -536,9 +536,9 @@ Suchen Keine Anwendung die diesen Link unterstützt Kamera-Berechtigung - Zum Scannen von QR-Codes ist eine Kamerazulassung erforderlich. Wenn du diese Funktion verwenden möchtest, gehe zu Anwendungsinformationen und Berechtigungen und aktiviere die Kamera. + Zum Scannen von QR-Codes ist die Kamera-Berechtigung erforderlich. Wenn du diese Funktion verwenden möchtest, gehe zu Anwendungsinformationen und Berechtigungen und aktiviere die Kamera. PIN deaktivieren - Bitte gebe deine neue %s PIN ein + Bitte gib deine neue %s PIN ein Falsche PIN! Bitte versuche es erneut Biometrie 2FAS Support @@ -556,7 +556,7 @@ Dieser QR Code funktioniert nicht! Der QR-Code konnte nicht gelesen werden! - Versuche eine andere Sprache auszuwählen. + Versuche ein anderes Bild auszuwählen. Dienst endgültig löschen Dienst konnte nicht hinzugefügt werden, denn der Geheimschlüssel ist ungültig. Bitte versuche es nochmal. @@ -575,7 +575,7 @@ App aktualisieren Bitte aktualisiere auf die neuste 2FAS Version, um alle Funktionen zu erhalten und die Aufrechterhaltung eines hohen Sicherheitsniveaus zu gewährleisten - Du löscht gerade + Du löschst gerade aus deiner 2FAS-Dienstenliste.\n\nDenke daran, solange du Zwei-Faktor-Authentifizierung aktiviert hast, kannst du dich ohne diesen Token nicht in %s Konto anmelden. Löschen @@ -639,13 +639,13 @@ Es ist ein Fehler mit unseren Servern aufgetreten. Bitte melde dich bei unserem Support-Team, falls der Fehler weiterhin auftritt. Vorgang fehlgeschlagen Protokolle gesendet - Danke für die Anfrage. Wir werden es uns anschauen, gebe uns ein wenig Zeit. + Danke für die Anfrage. Wir werden es uns anschauen, gib uns ein wenig Zeit. Senden Protokolle werden gesendet Der von dem Support-Team bereitgestellte Code wurde automatisch ausgefüllt. Protokolle senden? - Bitte gebe oder füge den von unserem Support-Team bereitgestellten Code ein + Bitte gib oder füge den von unserem Support-Team bereitgestellten Code ein Protokolle senden - Sehe dir diese großartige Zwei-Faktor-Authentifizierungs-App von 2FAS an: https://2fas.com + Sieh dir diese großartige Zwei-Faktor-Authentifizierungs-App von 2FAS an: https://2fas.com Danksagungen Aus externer Anwendung Importieren @@ -745,12 +745,12 @@ Verbinde den Dienst mit 2FAS Richte die Kamera auf den Bildschirm, um den QR-Code zu erfassen. Andere Methoden - Gebe den Geheimschlüssel ein + Gib den Geheimschlüssel manuell ein Bild mit dem QR-Code hochladen Fast fertig! Um die Verbindung des Dienstes abzuschließen, musst du den Token erneut eingeben. Verbinde den Dienst mit 2FAS - Gebe den Dienst und den Geheimschlüssel ein. + Gib den Dienst und Geheimschlüssel ein. Dienstname Geheimschlüssel Andere Einstellungen @@ -802,7 +802,7 @@ 2FAS Hilfewerk 2FAS für %s\n Universelles 2FAS Hilfewerk\u0020 - Meine Wahl speichern\u0020 + Meine Wahl speichern andOTP 2FA Tokens aus andOTP importieren Diese JSON-Datei erlaubt es Tokens von andOTP zu importieren. @@ -811,4 +811,5 @@ Im nächsten Schritt wirst du gefragt auf welchem Google Account du deine Tokens sichern willst.\u0020 Ich gehe das Risiko ein und erstelle kein Backup Die Google Drive Synchronisation wurde erfolgreich aktiviert. + The backup file you\'re attempting to import is not supported in this application version. The application only supports backup format versions up to %d, while the file you\'re importing is version %d. diff --git a/core/locale/src/main/res/values-es-rES/strings.xml b/core/locale/src/main/res/values-es-rES/strings.xml index 3a5b903b..e9293d69 100644 --- a/core/locale/src/main/res/values-es-rES/strings.xml +++ b/core/locale/src/main/res/values-es-rES/strings.xml @@ -5,7 +5,7 @@ Release: Working copy Locale: es-ES, Spanish (Spain) Exported by: rafakob - Exported at: Fri, 27 Oct 2023 12:02:50 -0700 + Exported at: Sat, 11 Nov 2023 08:12:03 -0800 -->