feat(dev): add secrets dev screen (used to recover corrupted wallet) (#2234)

* feat(dev): add secrets dev screen (used to recover corrupted wallet)

* fix(dev): decode only password fields
This commit is contained in:
cyan
2025-04-30 09:29:08 +03:00
committed by GitHub
parent e527083871
commit da8a82a10f
7 changed files with 173 additions and 0 deletions
@@ -0,0 +1,75 @@
import 'package:cake_wallet/core/secure_storage.dart';
import 'package:cake_wallet/entities/encrypt.dart';
import 'package:mobx/mobx.dart';
part 'secure_preferences.g.dart';
class DevSecurePreferences = DevSecurePreferencesBase with _$DevSecurePreferences;
enum PreferenceType {
unknown,
string,
int,
double,
bool,
listString
}
abstract class DevSecurePreferencesBase with Store {
DevSecurePreferencesBase() {
secureStorageShared.readAll().then((value) {
values = value;
});
}
@observable
Map<String, String> values = {};
@computed
List<String> get keys => values.keys.toList()..sort();
@action
Future<void> delete(String key) async {
}
dynamic get(String key) {
if (!values.containsKey(key)) {
return null;
}
if (!key.startsWith("MONERO_WALLET_")) return values[key]!;
try {
final decodedPassword = decodeWalletPassword(password: values[key]!);
return values[key]! + "\n\nDecoded: $decodedPassword";
} catch (e) {
return values[key]! +"\n$e";
}
}
Future<void> set(String key, PreferenceType type, dynamic value) async {
}
PreferenceType getPreferenceType(String key) {
if (!values.containsKey(key)) {
return PreferenceType.unknown;
}
final value = values[key];
if (value is String) {
return PreferenceType.string;
}
if (value is bool) {
return PreferenceType.bool;
}
if (value is int) {
return PreferenceType.int;
}
if (value is double) {
return PreferenceType.double;
}
if (value is List<String>) {
return PreferenceType.listString;
}
return PreferenceType.unknown;
}
}