| 1 | import 'package:cake_wallet/core/secure_storage.dart'; |
| 2 | import 'package:cake_wallet/entities/default_settings_migration.dart' show generateBackupPassword; |
| 3 | import 'package:mobx/mobx.dart'; |
| 4 | import 'package:cake_wallet/entities/secret_store_key.dart'; |
| 5 | |
| 6 | part 'edit_backup_password_view_model.g.dart'; |
| 7 | |
| 8 | class EditBackupPasswordViewModel = EditBackupPasswordViewModelBase |
| 9 | with _$EditBackupPasswordViewModel; |
| 10 | |
| 11 | abstract class EditBackupPasswordViewModelBase with Store { |
| 12 | EditBackupPasswordViewModelBase( |
| 13 | this.secureStorage, |
| 14 | ) : backupPassword = "", |
| 15 | _originalPassword = '' { |
| 16 | init(); |
| 17 | } |
| 18 | |
| 19 | final SecureStorage secureStorage; |
| 20 | |
| 21 | @observable |
| 22 | String backupPassword; |
| 23 | |
| 24 | @computed |
| 25 | bool get canSave { |
| 26 | return !(_originalPassword == backupPassword); |
| 27 | } |
| 28 | |
| 29 | String _originalPassword; |
| 30 | |
| 31 | @action |
| 32 | Future<void> init() async { |
| 33 | final key = generateStoreKeyFor(key: SecretStoreKey.backupPassword); |
| 34 | final password = (await secureStorage.read(key: key)) ?? ''; |
| 35 | if (backupPassword.isEmpty) { |
| 36 | generateBackupPassword(secureStorage); |
| 37 | } |
| 38 | _originalPassword = password; |
| 39 | backupPassword = password; |
| 40 | } |
| 41 | |
| 42 | @action |
| 43 | Future<void> save() async { |
| 44 | final key = generateStoreKeyFor(key: SecretStoreKey.backupPassword); |
| 45 | await secureStorage.write(key: key, value: backupPassword); |
| 46 | } |
| 47 | } |