mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 19:49:22 +00:00
fix: restore wallet not matching renamed file names
This commit is contained in:
parent
d6af37df06
commit
d9c471e4fb
3 changed files with 82 additions and 26 deletions
|
@ -276,7 +276,6 @@ Future<void> setup({
|
||||||
|
|
||||||
if (!_isSetupFinished) {
|
if (!_isSetupFinished) {
|
||||||
getIt.registerSingletonAsync<SharedPreferences>(() => SharedPreferences.getInstance());
|
getIt.registerSingletonAsync<SharedPreferences>(() => SharedPreferences.getInstance());
|
||||||
getIt.registerSingleton<FlutterSecureStorage>(secureStorage);
|
|
||||||
}
|
}
|
||||||
if (!_isSetupFinished) {
|
if (!_isSetupFinished) {
|
||||||
getIt.registerFactory(() => BackgroundTasks());
|
getIt.registerFactory(() => BackgroundTasks());
|
||||||
|
@ -332,8 +331,6 @@ Future<void> setup({
|
||||||
|
|
||||||
getIt.registerSingleton<SecretStore>(secretStore);
|
getIt.registerSingleton<SecretStore>(secretStore);
|
||||||
|
|
||||||
getIt.registerFactory<KeyService>(() => KeyService(getIt.get<FlutterSecureStorage>()));
|
|
||||||
|
|
||||||
getIt.registerFactoryParam<WalletCreationService, WalletType, void>((type, _) =>
|
getIt.registerFactoryParam<WalletCreationService, WalletType, void>((type, _) =>
|
||||||
WalletCreationService(
|
WalletCreationService(
|
||||||
initialType: type,
|
initialType: type,
|
||||||
|
|
|
@ -20,6 +20,7 @@ import 'package:cw_core/wallet_info.dart';
|
||||||
import 'package:cake_wallet/exchange/trade.dart';
|
import 'package:cake_wallet/exchange/trade.dart';
|
||||||
import 'package:encrypt/encrypt.dart' as encrypt;
|
import 'package:encrypt/encrypt.dart' as encrypt;
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:cake_wallet/core/key_service.dart';
|
||||||
|
|
||||||
const newCakeWalletMoneroUri = 'xmr-node.cakewallet.com:18081';
|
const newCakeWalletMoneroUri = 'xmr-node.cakewallet.com:18081';
|
||||||
const cakeWalletBitcoinElectrumUri = 'electrum.cakewallet.com:50002';
|
const cakeWalletBitcoinElectrumUri = 'electrum.cakewallet.com:50002';
|
||||||
|
@ -31,15 +32,17 @@ const cakeWalletBitcoinCashDefaultNodeUri = 'bitcoincash.stackwallet.com:50002';
|
||||||
const nanoDefaultNodeUri = 'rpc.nano.to';
|
const nanoDefaultNodeUri = 'rpc.nano.to';
|
||||||
const nanoDefaultPowNodeUri = 'rpc.nano.to';
|
const nanoDefaultPowNodeUri = 'rpc.nano.to';
|
||||||
|
|
||||||
Future<void> defaultSettingsMigration(
|
Future<void> defaultSettingsMigration({
|
||||||
{required int version,
|
required int version,
|
||||||
required SharedPreferences sharedPreferences,
|
required SharedPreferences sharedPreferences,
|
||||||
required FlutterSecureStorage secureStorage,
|
required FlutterSecureStorage secureStorage,
|
||||||
required Box<Node> nodes,
|
required Box<Node> nodes,
|
||||||
required Box<Node> powNodes,
|
required Box<Node> powNodes,
|
||||||
required Box<WalletInfo> walletInfoSource,
|
required Box<WalletInfo> walletInfoSource,
|
||||||
required Box<Trade> tradeSource,
|
required Box<Trade> tradeSource,
|
||||||
required Box<Contact> contactSource}) async {
|
required Box<Contact> contactSource,
|
||||||
|
required KeyService keyService,
|
||||||
|
}) async {
|
||||||
if (Platform.isIOS) {
|
if (Platform.isIOS) {
|
||||||
await ios_migrate_v1(walletInfoSource, tradeSource, contactSource);
|
await ios_migrate_v1(walletInfoSource, tradeSource, contactSource);
|
||||||
}
|
}
|
||||||
|
@ -50,7 +53,7 @@ Future<void> defaultSettingsMigration(
|
||||||
final isNewInstall =
|
final isNewInstall =
|
||||||
sharedPreferences.getInt(PreferencesKey.currentDefaultSettingsMigrationVersion) == null;
|
sharedPreferences.getInt(PreferencesKey.currentDefaultSettingsMigrationVersion) == null;
|
||||||
|
|
||||||
await _validateWalletInfoBoxData(walletInfoSource);
|
await _validateWalletInfoBoxData(keyService, walletInfoSource);
|
||||||
|
|
||||||
await sharedPreferences.setBool(PreferencesKey.isNewInstall, isNewInstall);
|
await sharedPreferences.setBool(PreferencesKey.isNewInstall, isNewInstall);
|
||||||
|
|
||||||
|
@ -186,6 +189,7 @@ Future<void> defaultSettingsMigration(
|
||||||
await rewriteSecureStoragePin(secureStorage: secureStorage);
|
await rewriteSecureStoragePin(secureStorage: secureStorage);
|
||||||
break;
|
break;
|
||||||
case 26:
|
case 26:
|
||||||
|
|
||||||
/// commented out as it was a probable cause for some users to have white screen issues
|
/// commented out as it was a probable cause for some users to have white screen issues
|
||||||
/// maybe due to multiple access on Secure Storage at once
|
/// maybe due to multiple access on Secure Storage at once
|
||||||
/// or long await time on start of the app
|
/// or long await time on start of the app
|
||||||
|
@ -205,7 +209,8 @@ Future<void> defaultSettingsMigration(
|
||||||
await sharedPreferences.setInt(PreferencesKey.currentDefaultSettingsMigrationVersion, version);
|
await sharedPreferences.setInt(PreferencesKey.currentDefaultSettingsMigrationVersion, version);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _validateWalletInfoBoxData(Box<WalletInfo> walletInfoSource) async {
|
Future<void> _validateWalletInfoBoxData(
|
||||||
|
KeyService keyService, Box<WalletInfo> walletInfoSource) async {
|
||||||
try {
|
try {
|
||||||
final root = await getApplicationDocumentsDirectory();
|
final root = await getApplicationDocumentsDirectory();
|
||||||
|
|
||||||
|
@ -232,19 +237,68 @@ Future<void> _validateWalletInfoBoxData(Box<WalletInfo> walletInfoSource) async
|
||||||
}
|
}
|
||||||
|
|
||||||
final walletFiles = dir.listSync();
|
final walletFiles = dir.listSync();
|
||||||
final hasCacheFile = walletFiles.any((element) => element.path.contains("$name/$name"));
|
final hasCacheFile =
|
||||||
|
walletFiles.any((element) => element.path.endsWith("${dir.path}/#_$name"));
|
||||||
|
String? renamedFileName;
|
||||||
|
|
||||||
if (!hasCacheFile) {
|
if (!hasCacheFile) {
|
||||||
continue;
|
await Future.wait(walletFiles.map((file) async {
|
||||||
|
if (file.path.startsWith("${dir.path}/#_")) {
|
||||||
|
var rightPath = '${dir.path}/#_$name';
|
||||||
|
if (file.path.endsWith(".keys")) {
|
||||||
|
rightPath += ".keys";
|
||||||
|
}
|
||||||
|
// Create the new file with the right wallet name
|
||||||
|
File(file.path).copySync(rightPath);
|
||||||
|
|
||||||
|
renamedFileName = file.path.replaceAll("${dir.path}/#_", "").replaceAll(".keys", "");
|
||||||
|
final rest = file.path.replaceAll("${dir.path}/#_$renamedFileName", "");
|
||||||
|
final renamedFileDirPath =
|
||||||
|
Directory(await pathForWalletDir(name: renamedFileName!, type: type));
|
||||||
|
|
||||||
|
// Move the renamed file to the proper wallet directory
|
||||||
|
File(file.path).copySync('${renamedFileDirPath.path}/#_$renamedFileName$rest');
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == WalletType.monero || type == WalletType.haven) {
|
if (type == WalletType.monero || type == WalletType.haven) {
|
||||||
final hasKeysFile = walletFiles.any((element) => element.path.contains(".keys"));
|
final hasKeysFile =
|
||||||
|
walletFiles.any((element) => element.path == "${dir.path}/$name.keys");
|
||||||
|
|
||||||
if (!hasKeysFile) {
|
if (!hasKeysFile) {
|
||||||
|
final renamedKeysFile = walletFiles.firstWhereOrNull((element) =>
|
||||||
|
!element.path.startsWith("${dir.path}/#_") && element.path.endsWith(".keys"));
|
||||||
|
|
||||||
|
if (renamedKeysFile != null) {
|
||||||
|
renamedFileName =
|
||||||
|
renamedKeysFile.path.replaceAll("${dir.path}/", "").replaceAll(".keys", "");
|
||||||
|
|
||||||
|
await keyService.saveWalletPassword(
|
||||||
|
walletName: renamedFileName!,
|
||||||
|
password: await keyService.getWalletPassword(walletName: name));
|
||||||
|
|
||||||
|
// Create the new files with the right wallet name
|
||||||
|
File("${dir.path}/$renamedFileName").copySync('${dir.path}/$name');
|
||||||
|
File("${dir.path}/$renamedFileName.keys").copySync('${dir.path}/$name.keys');
|
||||||
|
File("${dir.path}/$renamedFileName.address.txt")
|
||||||
|
.copySync('${dir.path}/$name.address.txt');
|
||||||
|
|
||||||
|
final renamedFileDirPath =
|
||||||
|
Directory(await pathForWalletDir(name: renamedFileName!, type: type));
|
||||||
|
|
||||||
|
// Move the renamed files to the proper wallet directory
|
||||||
|
File("${dir.path}/$renamedFileName")
|
||||||
|
.copySync('${renamedFileDirPath.path}/$renamedFileName');
|
||||||
|
File("${dir.path}/$renamedFileName.keys")
|
||||||
|
.copySync('${renamedFileDirPath.path}/$renamedFileName.keys');
|
||||||
|
File("${dir.path}/$renamedFileName.address.txt")
|
||||||
|
.copySync('${renamedFileDirPath.path}/$renamedFileName.address.txt');
|
||||||
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final id = prefix + '_' + name;
|
final id = prefix + '_' + name;
|
||||||
final exist = walletInfoSource.values.any((el) => el.id == id);
|
final exist = walletInfoSource.values.any((el) => el.id == id);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart';
|
import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart';
|
||||||
import 'package:cake_wallet/core/auth_service.dart';
|
import 'package:cake_wallet/core/auth_service.dart';
|
||||||
|
import 'package:cake_wallet/core/key_service.dart';
|
||||||
import 'package:cake_wallet/entities/language_service.dart';
|
import 'package:cake_wallet/entities/language_service.dart';
|
||||||
import 'package:cake_wallet/buy/order.dart';
|
import 'package:cake_wallet/buy/order.dart';
|
||||||
import 'package:cake_wallet/locales/locale.dart';
|
import 'package:cake_wallet/locales/locale.dart';
|
||||||
|
@ -183,6 +184,8 @@ Future<void> initialSetup(
|
||||||
required Box<UnspentCoinsInfo> unspentCoinsInfoSource,
|
required Box<UnspentCoinsInfo> unspentCoinsInfoSource,
|
||||||
int initialMigrationVersion = 15}) async {
|
int initialMigrationVersion = 15}) async {
|
||||||
LanguageService.loadLocaleList();
|
LanguageService.loadLocaleList();
|
||||||
|
getIt.registerSingleton<FlutterSecureStorage>(secureStorage);
|
||||||
|
getIt.registerFactory<KeyService>(() => KeyService(getIt.get<FlutterSecureStorage>()));
|
||||||
await defaultSettingsMigration(
|
await defaultSettingsMigration(
|
||||||
secureStorage: secureStorage,
|
secureStorage: secureStorage,
|
||||||
version: initialMigrationVersion,
|
version: initialMigrationVersion,
|
||||||
|
@ -191,7 +194,9 @@ Future<void> initialSetup(
|
||||||
contactSource: contactSource,
|
contactSource: contactSource,
|
||||||
tradeSource: tradesSource,
|
tradeSource: tradesSource,
|
||||||
nodes: nodes,
|
nodes: nodes,
|
||||||
powNodes: powNodes);
|
powNodes: powNodes,
|
||||||
|
keyService: getIt.get<KeyService>(),
|
||||||
|
);
|
||||||
await setup(
|
await setup(
|
||||||
walletInfoSource: walletInfoSource,
|
walletInfoSource: walletInfoSource,
|
||||||
nodeSource: nodes,
|
nodeSource: nodes,
|
||||||
|
|
Loading…
Reference in a new issue