Skip to content

Commit 9b8028e

Browse files
committed
feat: Better handling of cases where the user is not logged in.
1 parent d1b7a6f commit 9b8028e

File tree

10 files changed

+224
-53
lines changed

10 files changed

+224
-53
lines changed

lib/i18n/de/home.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,13 @@
1515
"noCryptoStore": {
1616
"message": "Beim Laden Ihres Kryptospeichers ist ein Fehler aufgetreten. Das bedeutet, dass keine Verschlüsselungs- oder Entschlüsselungsvorgänge durchgeführt werden können. Bitte starten Sie die App neu oder legen Sie ein neues Master-Passwort über die Schaltfläche unten fest.",
1717
"resetButton": "Master-Passwort zurücksetzen"
18+
},
19+
"logInFailed": {
20+
"message": "Anmeldung fehlgeschlagen. Versuchen Sie es erneut, melden Sie sich erneut an oder ändern Sie den Speichertyp.",
21+
"button": {
22+
"retry": "Erneut versuchen",
23+
"relogIn": "Erneut anmelden",
24+
"changeStorageType": "Speichertyp ändern"
25+
}
1826
}
1927
}

lib/i18n/en/home.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,13 @@
1515
"noCryptoStore": {
1616
"message": "An error occurred while loading your crypto store. This means that we cannot do any encryption / decryption operation. Please restart the app or enter a new master password using the button below.",
1717
"resetButton": "Reset master password"
18+
},
19+
"logInFailed": {
20+
"message": "Failed to log in. Either retry, relogin or change storage type.",
21+
"button": {
22+
"retry": "Retry",
23+
"relogIn": "Relog-in",
24+
"changeStorageType": "Change storage type"
25+
}
1826
}
1927
}

lib/i18n/fr/home.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,13 @@
1515
"noCryptoStore": {
1616
"message": "Une erreur est survenue durant la lecture du crypto store. Cela veut dire qu'aucune opération de chiffrement / déchiffrement n'est possible. Veuillez redémarrer l'application ou entrer un nouveau mot de passe maître en utilisant le bouton ci-dessous.",
1717
"resetButton": "Réinitialiser le mot de passe maître"
18+
},
19+
"logInFailed": {
20+
"message": "Impossible de se connecter. Veuillez réessayer, vous reconnecter ou changer le type de stockage.",
21+
"button": {
22+
"retry": "Réessayer",
23+
"relogIn": "Se reconnecter",
24+
"changeStorageType": "Changer le type de stockage"
25+
}
1826
}
1927
}

lib/i18n/it/home.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,13 @@
1515
"noCryptoStore": {
1616
"message": "Si è verificato un errore durante il caricamento del tuo archivio crittografico. Ciò significa che non è possibile leggerlo. Riavvia l'app o inserisci una nuova password principale utilizzando il pulsante qui sotto.",
1717
"resetButton": "Reimposta password principale"
18+
},
19+
"logInFailed": {
20+
"message": "Accesso non riuscito. Riprova, effettua nuovamente l'accesso o cambia il tipo di archiviazione.",
21+
"button": {
22+
"retry": "Riprova",
23+
"relogIn": "Accedi di nuovo",
24+
"changeStorageType": "Cambia tipo di archiviazione"
25+
}
1826
}
1927
}

lib/i18n/pt/home.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,13 @@
1515
"noCryptoStore": {
1616
"message": "Ocorreu um erro ao carregar seu armazenamento criptográfico. Isso significa que não podemos realizar nenhuma operação de criptografia/descriptografia. Reinicie o aplicativo ou defina uma nova senha mestra usando o botão abaixo.",
1717
"resetButton": "Redefinir senha mestra"
18+
},
19+
"logInFailed": {
20+
"message": "Falha ao fazer login. Tente novamente, faça login novamente ou altere o tipo de armazenamento.",
21+
"button": {
22+
"retry": "Tentar novamente",
23+
"relogIn": "Fazer login novamente",
24+
"changeStorageType": "Alterar tipo de armazenamento"
25+
}
1826
}
1927
}

lib/main.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import 'package:open_authenticator/model/authentication/providers/provider.dart'
1616
import 'package:open_authenticator/model/crypto.dart';
1717
import 'package:open_authenticator/model/settings/show_intro.dart';
1818
import 'package:open_authenticator/model/settings/theme.dart';
19+
import 'package:open_authenticator/model/storage/online.dart';
1920
import 'package:open_authenticator/model/totp/repository.dart';
2021
import 'package:open_authenticator/pages/contributor_plan_paywall/page.dart';
2122
import 'package:open_authenticator/pages/home.dart';
@@ -70,6 +71,13 @@ Future<void> main() async {
7071
await LocaleSettings.useDeviceLocale();
7172
runApp(
7273
ProviderScope(
74+
retry: (retryCount, error) {
75+
if (error is NotLoggedInException) {
76+
return null;
77+
}
78+
79+
return ProviderContainer.defaultRetry(retryCount, error);
80+
},
7381
child: TranslationProvider(
7482
child: const OpenAuthenticatorApp(),
7583
),

lib/model/storage/storage.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:open_authenticator/model/totp/decrypted.dart';
1111
import 'package:open_authenticator/model/totp/deleted_totps.dart';
1212
import 'package:open_authenticator/model/totp/totp.dart';
1313
import 'package:open_authenticator/utils/result.dart';
14+
import 'package:open_authenticator/utils/utils.dart';
1415

1516
/// The provider instance.
1617
final storageProvider = AsyncNotifierProvider.autoDispose<StorageNotifier, Storage>(StorageNotifier.new);
@@ -31,6 +32,7 @@ class StorageNotifier extends AsyncNotifier<Storage> {
3132
StorageType newType, {
3233
String? backupPassword,
3334
StorageMigrationDeletedTotpPolicy storageMigrationDeletedTotpPolicy = StorageMigrationDeletedTotpPolicy.ask,
35+
bool ignoreCurrentStorage = false,
3436
}) async {
3537
try {
3638
Result<bool> passwordCheckResult = await (await ref.read(passwordVerificationProvider.future)).isPasswordValid(masterPassword);
@@ -69,7 +71,16 @@ class StorageNotifier extends AsyncNotifier<Storage> {
6971
}
7072
}
7173

72-
List<Totp> currentStorageTotps = await currentStorage.listTotps();
74+
List<Totp> currentStorageTotps = [];
75+
try {
76+
currentStorageTotps = await currentStorage.listTotps();
77+
} catch (ex, stacktrace) {
78+
if (ignoreCurrentStorage) {
79+
handleException(ex, stacktrace);
80+
} else {
81+
rethrow;
82+
}
83+
}
7384
List<Totp> newStorageTotps = await newStorage.listTotps();
7485
List<Totp> toAdd = [];
7586
if (newStorageTotps.isEmpty) {

0 commit comments

Comments
 (0)