mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 12:29:51 +00:00
feat(reset-service): Remove PIN persistence for app reinstall
This commit is contained in:
parent
da56ed8f52
commit
b5b4878d62
1 changed files with 45 additions and 8 deletions
|
@ -36,15 +36,20 @@ class ResetService {
|
||||||
'PIN_CODE_PASSWORD',
|
'PIN_CODE_PASSWORD',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
static const List<String> _walletPreferencesKeys = [
|
||||||
|
PreferencesKey.currentWalletName,
|
||||||
|
PreferencesKey.currentWalletType,
|
||||||
|
];
|
||||||
|
|
||||||
bool _isAuthKey(String key) => _authKeys.contains(key);
|
bool _isAuthKey(String key) => _authKeys.contains(key);
|
||||||
|
|
||||||
/// Checks if this is a new install and clears any existing auth data from Keychain
|
/// Checks if this is a new install and clears any existing auth data from Storage
|
||||||
Future<void> resetAuthDataOnNewInstall(SharedPreferences sharedPreferences) async {
|
Future<void> resetAuthDataOnNewInstall(SharedPreferences sharedPreferences) async {
|
||||||
try {
|
try {
|
||||||
final isNewInstall = sharedPreferences.getBool(PreferencesKey.isNewInstall) ?? false;
|
final isNewInstall = sharedPreferences.getBool(PreferencesKey.isNewInstall) ?? false;
|
||||||
|
|
||||||
if (isNewInstall) {
|
if (isNewInstall) {
|
||||||
await _clearExistingAuthDataOnNewInstall();
|
await _clearExistingAuthDataOnNewInstall(sharedPreferences);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
printV('Error during new install auth reset: $e');
|
printV('Error during new install auth reset: $e');
|
||||||
|
@ -52,9 +57,10 @@ class ResetService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks if there's existing auth data that should be cleared on new install
|
/// Checks if there's existing auth data that should be cleared on new install
|
||||||
Future<void> _clearExistingAuthDataOnNewInstall() async {
|
Future<void> _clearExistingAuthDataOnNewInstall(SharedPreferences sharedPreferences) async {
|
||||||
final allKeys = await secureStorage.readAll();
|
final allKeys = await secureStorage.readAll();
|
||||||
final authKeysFound = <String>[];
|
final authKeysFound = <String>[];
|
||||||
|
final walletPrefsFound = <String>[];
|
||||||
|
|
||||||
for (final key in allKeys.keys) {
|
for (final key in allKeys.keys) {
|
||||||
if (_isAuthKey(key)) {
|
if (_isAuthKey(key)) {
|
||||||
|
@ -62,21 +68,33 @@ class ResetService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authKeysFound.isNotEmpty) {
|
for (final key in _walletPreferencesKeys) {
|
||||||
|
if (sharedPreferences.containsKey(key)) {
|
||||||
|
walletPrefsFound.add(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (authKeysFound.isNotEmpty || walletPrefsFound.isNotEmpty) {
|
||||||
printV(
|
printV(
|
||||||
'Found ${authKeysFound.length} existing auth keys in storage: ${authKeysFound.join(', ')}',
|
'Found ${authKeysFound.length} existing auth keys in storage: ${authKeysFound.join(', ')}',
|
||||||
);
|
);
|
||||||
|
printV(
|
||||||
|
'Found ${walletPrefsFound.length} existing wallet preferences: ${walletPrefsFound.join(', ')}',
|
||||||
|
);
|
||||||
|
|
||||||
await resetAuthenticationData();
|
await resetAuthenticationData(sharedPreferences);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Resets authentication data from both secure storage and settings store
|
/// Resets authentication data auth store, storage and settings store
|
||||||
Future<void> resetAuthenticationData() async {
|
Future<void> resetAuthenticationData(SharedPreferences sharedPreferences) async {
|
||||||
try {
|
try {
|
||||||
|
authenticationStore.state = AuthenticationState.uninitialized;
|
||||||
|
|
||||||
await Future.wait([
|
await Future.wait([
|
||||||
_deleteAuthenticationKeys(),
|
_deleteAuthenticationKeys(),
|
||||||
_resetSettingsStoreAuthData(),
|
_resetSettingsStoreAuthData(),
|
||||||
|
_clearWalletPreferences(sharedPreferences),
|
||||||
]);
|
]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
printV('An error occurred during authentication reset: $e');
|
printV('An error occurred during authentication reset: $e');
|
||||||
|
@ -100,7 +118,26 @@ class ResetService {
|
||||||
settingsStore.allowBiometricalAuthentication = false;
|
settingsStore.allowBiometricalAuthentication = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Deletes authentication keys from secure storage
|
Future<void> _clearWalletPreferences(SharedPreferences sharedPreferences) async {
|
||||||
|
final failedDeletions = <String>[];
|
||||||
|
|
||||||
|
for (final key in _walletPreferencesKeys) {
|
||||||
|
try {
|
||||||
|
await sharedPreferences.remove(key);
|
||||||
|
} catch (e) {
|
||||||
|
failedDeletions.add(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (failedDeletions.isNotEmpty) {
|
||||||
|
printV(
|
||||||
|
'Warning: Failed to delete ${failedDeletions.length} wallet preferences: ${failedDeletions.join(', ')}',
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
printV('All wallet preferences deleted successfully');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _deleteAuthenticationKeys() async {
|
Future<void> _deleteAuthenticationKeys() async {
|
||||||
final failedDeletions = <String>[];
|
final failedDeletions = <String>[];
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue