mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 11:39: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) {
|
||||
getIt.registerSingletonAsync<SharedPreferences>(() => SharedPreferences.getInstance());
|
||||
getIt.registerSingleton<FlutterSecureStorage>(secureStorage);
|
||||
}
|
||||
if (!_isSetupFinished) {
|
||||
getIt.registerFactory(() => BackgroundTasks());
|
||||
|
@ -332,8 +331,6 @@ Future<void> setup({
|
|||
|
||||
getIt.registerSingleton<SecretStore>(secretStore);
|
||||
|
||||
getIt.registerFactory<KeyService>(() => KeyService(getIt.get<FlutterSecureStorage>()));
|
||||
|
||||
getIt.registerFactoryParam<WalletCreationService, WalletType, void>((type, _) =>
|
||||
WalletCreationService(
|
||||
initialType: type,
|
||||
|
|
|
@ -20,6 +20,7 @@ import 'package:cw_core/wallet_info.dart';
|
|||
import 'package:cake_wallet/exchange/trade.dart';
|
||||
import 'package:encrypt/encrypt.dart' as encrypt;
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:cake_wallet/core/key_service.dart';
|
||||
|
||||
const newCakeWalletMoneroUri = 'xmr-node.cakewallet.com:18081';
|
||||
const cakeWalletBitcoinElectrumUri = 'electrum.cakewallet.com:50002';
|
||||
|
@ -31,15 +32,17 @@ const cakeWalletBitcoinCashDefaultNodeUri = 'bitcoincash.stackwallet.com:50002';
|
|||
const nanoDefaultNodeUri = 'rpc.nano.to';
|
||||
const nanoDefaultPowNodeUri = 'rpc.nano.to';
|
||||
|
||||
Future<void> defaultSettingsMigration(
|
||||
{required int version,
|
||||
required SharedPreferences sharedPreferences,
|
||||
required FlutterSecureStorage secureStorage,
|
||||
required Box<Node> nodes,
|
||||
required Box<Node> powNodes,
|
||||
required Box<WalletInfo> walletInfoSource,
|
||||
required Box<Trade> tradeSource,
|
||||
required Box<Contact> contactSource}) async {
|
||||
Future<void> defaultSettingsMigration({
|
||||
required int version,
|
||||
required SharedPreferences sharedPreferences,
|
||||
required FlutterSecureStorage secureStorage,
|
||||
required Box<Node> nodes,
|
||||
required Box<Node> powNodes,
|
||||
required Box<WalletInfo> walletInfoSource,
|
||||
required Box<Trade> tradeSource,
|
||||
required Box<Contact> contactSource,
|
||||
required KeyService keyService,
|
||||
}) async {
|
||||
if (Platform.isIOS) {
|
||||
await ios_migrate_v1(walletInfoSource, tradeSource, contactSource);
|
||||
}
|
||||
|
@ -50,7 +53,7 @@ Future<void> defaultSettingsMigration(
|
|||
final isNewInstall =
|
||||
sharedPreferences.getInt(PreferencesKey.currentDefaultSettingsMigrationVersion) == null;
|
||||
|
||||
await _validateWalletInfoBoxData(walletInfoSource);
|
||||
await _validateWalletInfoBoxData(keyService, walletInfoSource);
|
||||
|
||||
await sharedPreferences.setBool(PreferencesKey.isNewInstall, isNewInstall);
|
||||
|
||||
|
@ -186,6 +189,7 @@ Future<void> defaultSettingsMigration(
|
|||
await rewriteSecureStoragePin(secureStorage: secureStorage);
|
||||
break;
|
||||
case 26:
|
||||
|
||||
/// 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
|
||||
/// or long await time on start of the app
|
||||
|
@ -205,7 +209,8 @@ Future<void> defaultSettingsMigration(
|
|||
await sharedPreferences.setInt(PreferencesKey.currentDefaultSettingsMigrationVersion, version);
|
||||
}
|
||||
|
||||
Future<void> _validateWalletInfoBoxData(Box<WalletInfo> walletInfoSource) async {
|
||||
Future<void> _validateWalletInfoBoxData(
|
||||
KeyService keyService, Box<WalletInfo> walletInfoSource) async {
|
||||
try {
|
||||
final root = await getApplicationDocumentsDirectory();
|
||||
|
||||
|
@ -232,17 +237,66 @@ Future<void> _validateWalletInfoBoxData(Box<WalletInfo> walletInfoSource) async
|
|||
}
|
||||
|
||||
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) {
|
||||
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) {
|
||||
final hasKeysFile = walletFiles.any((element) => element.path.contains(".keys"));
|
||||
final hasKeysFile =
|
||||
walletFiles.any((element) => element.path == "${dir.path}/$name.keys");
|
||||
|
||||
if (!hasKeysFile) {
|
||||
continue;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'package:cake_wallet/anonpay/anonpay_invoice_info.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/buy/order.dart';
|
||||
import 'package:cake_wallet/locales/locale.dart';
|
||||
|
@ -183,15 +184,19 @@ Future<void> initialSetup(
|
|||
required Box<UnspentCoinsInfo> unspentCoinsInfoSource,
|
||||
int initialMigrationVersion = 15}) async {
|
||||
LanguageService.loadLocaleList();
|
||||
getIt.registerSingleton<FlutterSecureStorage>(secureStorage);
|
||||
getIt.registerFactory<KeyService>(() => KeyService(getIt.get<FlutterSecureStorage>()));
|
||||
await defaultSettingsMigration(
|
||||
secureStorage: secureStorage,
|
||||
version: initialMigrationVersion,
|
||||
sharedPreferences: sharedPreferences,
|
||||
walletInfoSource: walletInfoSource,
|
||||
contactSource: contactSource,
|
||||
tradeSource: tradesSource,
|
||||
nodes: nodes,
|
||||
powNodes: powNodes);
|
||||
secureStorage: secureStorage,
|
||||
version: initialMigrationVersion,
|
||||
sharedPreferences: sharedPreferences,
|
||||
walletInfoSource: walletInfoSource,
|
||||
contactSource: contactSource,
|
||||
tradeSource: tradesSource,
|
||||
nodes: nodes,
|
||||
powNodes: powNodes,
|
||||
keyService: getIt.get<KeyService>(),
|
||||
);
|
||||
await setup(
|
||||
walletInfoSource: walletInfoSource,
|
||||
nodeSource: nodes,
|
||||
|
|
Loading…
Reference in a new issue