diff --git a/lib/src/localization/generated/app_localizations.dart b/lib/src/localization/generated/app_localizations.dart index efc85060..8dca21c8 100644 --- a/lib/src/localization/generated/app_localizations.dart +++ b/lib/src/localization/generated/app_localizations.dart @@ -1604,6 +1604,18 @@ abstract class AppLocalizations { /// **'Change password'** String get backupChangePassword; + /// No description provided for @backupChangePasswordAuthReason. + /// + /// In en, this message translates to: + /// **'Changing backup password'** + String get backupChangePasswordAuthReason; + + /// No description provided for @backupChangePasswordAuthFailed. + /// + /// In en, this message translates to: + /// **'You can only change your password after you have authenticated!'** + String get backupChangePasswordAuthFailed; + /// No description provided for @twonlySafeRecoverTitle. /// /// In en, this message translates to: diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index 1c5f4270..f4ce319e 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -841,7 +841,14 @@ class AppLocalizationsDe extends AppLocalizations { String get backupTwonlySaveNow => 'Jetzt speichern'; @override - String get backupChangePassword => 'Password ändern'; + String get backupChangePassword => 'Passwort ändern'; + + @override + String get backupChangePasswordAuthReason => 'Backup-Passwort ändern'; + + @override + String get backupChangePasswordAuthFailed => + 'Du kannst dein Passwort nur ändern, wenn du dich authentifiziert hast!'; @override String get twonlySafeRecoverTitle => 'Backup wiederherstellen'; diff --git a/lib/src/localization/generated/app_localizations_en.dart b/lib/src/localization/generated/app_localizations_en.dart index 6674af20..e214c88c 100644 --- a/lib/src/localization/generated/app_localizations_en.dart +++ b/lib/src/localization/generated/app_localizations_en.dart @@ -838,6 +838,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String get backupChangePassword => 'Change password'; + @override + String get backupChangePasswordAuthReason => 'Changing backup password'; + + @override + String get backupChangePasswordAuthFailed => + 'You can only change your password after you have authenticated!'; + @override String get twonlySafeRecoverTitle => 'Restore backup'; diff --git a/lib/src/localization/translations b/lib/src/localization/translations index 80b21d7e..aa2ac144 160000 --- a/lib/src/localization/translations +++ b/lib/src/localization/translations @@ -1 +1 @@ -Subproject commit 80b21d7e566a12d105f573cb7224b6cdfe37048b +Subproject commit aa2ac144d3663f476f19ba28ced318b1a64c7a73 diff --git a/lib/src/visual/views/settings/backup/backup_setup.view.dart b/lib/src/visual/views/settings/backup/backup_setup.view.dart index 5dab3c22..ff6aa9bf 100644 --- a/lib/src/visual/views/settings/backup/backup_setup.view.dart +++ b/lib/src/visual/views/settings/backup/backup_setup.view.dart @@ -6,6 +6,7 @@ import 'package:twonly/src/services/backup.service.dart'; import 'package:twonly/src/services/user.service.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/visual/components/alert.dialog.dart'; +import 'package:twonly/src/visual/components/snackbar.dart'; import 'package:twonly/src/visual/elements/my_button.element.dart'; import 'package:twonly/src/visual/views/settings/backup/components/backup_setup.comp.dart'; @@ -26,7 +27,7 @@ class SetupBackupView extends StatefulWidget { class _SetupBackupViewState extends State { bool _isLoading = false; final TextEditingController _passwordController = TextEditingController(); - final TextEditingController _repeadedController = TextEditingController(); + final TextEditingController _repeatedController = TextEditingController(); Future _updateBackupPassword() async { setState(() { @@ -52,6 +53,19 @@ class _SetupBackupViewState extends State { } } + if (!mounted) return; + final verified = await authenticateUser( + context.lang.backupChangePasswordAuthReason, + ); + if (!mounted) return; + if (!verified) { + showSnackbar( + context, + context.lang.backupChangePasswordAuthFailed, + ); + return; + } + await Future.delayed(const Duration(milliseconds: 100)); await BackupService.updateBackupPassword(_passwordController.text); await UserService.update((u) => u.isBackupEnabled = true); @@ -108,15 +122,15 @@ class _SetupBackupViewState extends State { ), const SizedBox(height: 5), BackupPasswordTextField( - controller: _repeadedController, + controller: _repeatedController, labelText: context.lang.passwordRepeated, onChanged: (value) => setState(() {}), ), PasswordRequirementText( text: context.lang.passwordRepeatedNotEqual, showError: - _passwordController.text != _repeadedController.text && - _repeadedController.text.isNotEmpty, + _passwordController.text != _repeatedController.text && + _repeatedController.text.isNotEmpty, ), const SizedBox(height: 10), Text( @@ -131,7 +145,7 @@ class _SetupBackupViewState extends State { onPressed: (!_isLoading && (_passwordController.text == - _repeadedController.text && + _repeatedController.text && _passwordController.text.length >= 8 || !kReleaseMode)) ? _updateBackupPassword