require authentication for backup password change
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run

This commit is contained in:
otsmr 2026-06-20 15:38:06 +02:00
parent e7dab1102d
commit e000b7c41d
5 changed files with 47 additions and 7 deletions

View file

@ -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:

View file

@ -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';

View file

@ -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';

@ -1 +1 @@
Subproject commit 80b21d7e566a12d105f573cb7224b6cdfe37048b
Subproject commit aa2ac144d3663f476f19ba28ced318b1a64c7a73

View file

@ -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<SetupBackupView> {
bool _isLoading = false;
final TextEditingController _passwordController = TextEditingController();
final TextEditingController _repeadedController = TextEditingController();
final TextEditingController _repeatedController = TextEditingController();
Future<void> _updateBackupPassword() async {
setState(() {
@ -52,6 +53,19 @@ class _SetupBackupViewState extends State<SetupBackupView> {
}
}
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<SetupBackupView> {
),
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<SetupBackupView> {
onPressed:
(!_isLoading &&
(_passwordController.text ==
_repeadedController.text &&
_repeatedController.text &&
_passwordController.text.length >= 8 ||
!kReleaseMode))
? _updateBackupPassword