mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 20:39:51 +00:00
Add aditional check if wallet exists with special name
This commit is contained in:
parent
52b8bafac9
commit
a63c099f26
7 changed files with 45 additions and 28 deletions
|
@ -1,6 +1,8 @@
|
||||||
import 'package:cake_wallet/di.dart';
|
import 'package:cake_wallet/di.dart';
|
||||||
|
import 'package:cw_core/wallet_info.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||||
|
import 'package:hive/hive.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:cake_wallet/core/key_service.dart';
|
import 'package:cake_wallet/core/key_service.dart';
|
||||||
import 'package:cw_core/wallet_base.dart';
|
import 'package:cw_core/wallet_base.dart';
|
||||||
|
@ -14,7 +16,8 @@ class WalletCreationService {
|
||||||
{WalletType initialType,
|
{WalletType initialType,
|
||||||
this.secureStorage,
|
this.secureStorage,
|
||||||
this.keyService,
|
this.keyService,
|
||||||
this.sharedPreferences})
|
this.sharedPreferences,
|
||||||
|
this.walletInfoSource})
|
||||||
: type = initialType {
|
: type = initialType {
|
||||||
if (type != null) {
|
if (type != null) {
|
||||||
changeWalletType(type: type);
|
changeWalletType(type: type);
|
||||||
|
@ -25,6 +28,7 @@ class WalletCreationService {
|
||||||
final FlutterSecureStorage secureStorage;
|
final FlutterSecureStorage secureStorage;
|
||||||
final SharedPreferences sharedPreferences;
|
final SharedPreferences sharedPreferences;
|
||||||
final KeyService keyService;
|
final KeyService keyService;
|
||||||
|
final Box<WalletInfo> walletInfoSource;
|
||||||
WalletService _service;
|
WalletService _service;
|
||||||
|
|
||||||
void changeWalletType({@required WalletType type}) {
|
void changeWalletType({@required WalletType type}) {
|
||||||
|
@ -32,7 +36,21 @@ class WalletCreationService {
|
||||||
_service = getIt.get<WalletService>(param1: type);
|
_service = getIt.get<WalletService>(param1: type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool exists(String name) {
|
||||||
|
final walletName = name.toLowerCase();
|
||||||
|
return walletInfoSource
|
||||||
|
.values
|
||||||
|
.any((walletInfo) => walletInfo.name.toLowerCase() == walletName);
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkIfExists(String name) {
|
||||||
|
if (exists(name)) {
|
||||||
|
throw Exception('Wallet with name ${name} already exists!');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<WalletBase> create(WalletCredentials credentials) async {
|
Future<WalletBase> create(WalletCredentials credentials) async {
|
||||||
|
checkIfExists(credentials.name);
|
||||||
final password = generateWalletPassword(type);
|
final password = generateWalletPassword(type);
|
||||||
credentials.password = password;
|
credentials.password = password;
|
||||||
await keyService.saveWalletPassword(
|
await keyService.saveWalletPassword(
|
||||||
|
@ -41,6 +59,7 @@ class WalletCreationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<WalletBase> restoreFromKeys(WalletCredentials credentials) async {
|
Future<WalletBase> restoreFromKeys(WalletCredentials credentials) async {
|
||||||
|
checkIfExists(credentials.name);
|
||||||
final password = generateWalletPassword(type);
|
final password = generateWalletPassword(type);
|
||||||
credentials.password = password;
|
credentials.password = password;
|
||||||
await keyService.saveWalletPassword(
|
await keyService.saveWalletPassword(
|
||||||
|
@ -49,6 +68,7 @@ class WalletCreationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<WalletBase> restoreFromSeed(WalletCredentials credentials) async {
|
Future<WalletBase> restoreFromSeed(WalletCredentials credentials) async {
|
||||||
|
checkIfExists(credentials.name);
|
||||||
final password = generateWalletPassword(type);
|
final password = generateWalletPassword(type);
|
||||||
credentials.password = password;
|
credentials.password = password;
|
||||||
await keyService.saveWalletPassword(
|
await keyService.saveWalletPassword(
|
||||||
|
|
|
@ -215,7 +215,8 @@ Future setup(
|
||||||
initialType: type,
|
initialType: type,
|
||||||
keyService: getIt.get<KeyService>(),
|
keyService: getIt.get<KeyService>(),
|
||||||
secureStorage: getIt.get<FlutterSecureStorage>(),
|
secureStorage: getIt.get<FlutterSecureStorage>(),
|
||||||
sharedPreferences: getIt.get<SharedPreferences>()));
|
sharedPreferences: getIt.get<SharedPreferences>(),
|
||||||
|
walletInfoSource: _walletInfoSource));
|
||||||
|
|
||||||
getIt.registerFactoryParam<WalletNewVM, WalletType, void>((type, _) =>
|
getIt.registerFactoryParam<WalletNewVM, WalletType, void>((type, _) =>
|
||||||
WalletNewVM(getIt.get<AppStore>(),
|
WalletNewVM(getIt.get<AppStore>(),
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/core/wallet_creation_service.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
@ -15,7 +16,7 @@ part 'wallet_creation_vm.g.dart';
|
||||||
class WalletCreationVM = WalletCreationVMBase with _$WalletCreationVM;
|
class WalletCreationVM = WalletCreationVMBase with _$WalletCreationVM;
|
||||||
|
|
||||||
abstract class WalletCreationVMBase with Store {
|
abstract class WalletCreationVMBase with Store {
|
||||||
WalletCreationVMBase(this._appStore, this._walletInfoSource,
|
WalletCreationVMBase(this._appStore, this._walletInfoSource, this.walletCreationService,
|
||||||
{@required this.type, @required this.isRecovery}) {
|
{@required this.type, @required this.isRecovery}) {
|
||||||
state = InitialExecutionState();
|
state = InitialExecutionState();
|
||||||
name = '';
|
name = '';
|
||||||
|
@ -29,14 +30,12 @@ abstract class WalletCreationVMBase with Store {
|
||||||
|
|
||||||
WalletType type;
|
WalletType type;
|
||||||
final bool isRecovery;
|
final bool isRecovery;
|
||||||
|
final WalletCreationService walletCreationService;
|
||||||
final Box<WalletInfo> _walletInfoSource;
|
final Box<WalletInfo> _walletInfoSource;
|
||||||
final AppStore _appStore;
|
final AppStore _appStore;
|
||||||
|
|
||||||
bool nameExists(String name) {
|
bool nameExists(String name)
|
||||||
final walletNameList = _walletInfoSource.values.map((e) => e.name.toLowerCase()).toList();
|
=> walletCreationService.exists(name);
|
||||||
|
|
||||||
return walletNameList.contains(name.toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> create({dynamic options}) async {
|
Future<void> create({dynamic options}) async {
|
||||||
try {
|
try {
|
||||||
|
@ -44,6 +43,8 @@ abstract class WalletCreationVMBase with Store {
|
||||||
if (name?.isEmpty ?? true) {
|
if (name?.isEmpty ?? true) {
|
||||||
name = await generateName();
|
name = await generateName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
walletCreationService.checkIfExists(name);
|
||||||
final dirPath = await pathForWalletDir(name: name, type: type);
|
final dirPath = await pathForWalletDir(name: name, type: type);
|
||||||
final path = await pathForWallet(name: name, type: type);
|
final path = await pathForWallet(name: name, type: type);
|
||||||
final credentials = getCredentials(options);
|
final credentials = getCredentials(options);
|
||||||
|
|
|
@ -17,19 +17,17 @@ part 'wallet_new_vm.g.dart';
|
||||||
class WalletNewVM = WalletNewVMBase with _$WalletNewVM;
|
class WalletNewVM = WalletNewVMBase with _$WalletNewVM;
|
||||||
|
|
||||||
abstract class WalletNewVMBase extends WalletCreationVM with Store {
|
abstract class WalletNewVMBase extends WalletCreationVM with Store {
|
||||||
WalletNewVMBase(AppStore appStore, this._walletCreationService,
|
WalletNewVMBase(AppStore appStore, WalletCreationService walletCreationService,
|
||||||
Box<WalletInfo> walletInfoSource,
|
Box<WalletInfo> walletInfoSource,
|
||||||
{@required WalletType type})
|
{@required WalletType type})
|
||||||
: selectedMnemonicLanguage = '',
|
: selectedMnemonicLanguage = '',
|
||||||
super(appStore, walletInfoSource, type: type, isRecovery: false);
|
super(appStore, walletInfoSource, walletCreationService, type: type, isRecovery: false);
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
String selectedMnemonicLanguage;
|
String selectedMnemonicLanguage;
|
||||||
|
|
||||||
bool get hasLanguageSelector => type == WalletType.monero || type == WalletType.haven;
|
bool get hasLanguageSelector => type == WalletType.monero || type == WalletType.haven;
|
||||||
|
|
||||||
final WalletCreationService _walletCreationService;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
WalletCredentials getCredentials(dynamic options) {
|
WalletCredentials getCredentials(dynamic options) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -50,7 +48,7 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<WalletBase> process(WalletCredentials credentials) async {
|
Future<WalletBase> process(WalletCredentials credentials) async {
|
||||||
_walletCreationService.changeWalletType(type: type);
|
walletCreationService.changeWalletType(type: type);
|
||||||
return _walletCreationService.create(credentials);
|
return walletCreationService.create(credentials);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,9 @@ class WalletRestorationFromKeysVM = WalletRestorationFromKeysVMBase
|
||||||
abstract class WalletRestorationFromKeysVMBase extends WalletCreationVM
|
abstract class WalletRestorationFromKeysVMBase extends WalletCreationVM
|
||||||
with Store {
|
with Store {
|
||||||
WalletRestorationFromKeysVMBase(AppStore appStore,
|
WalletRestorationFromKeysVMBase(AppStore appStore,
|
||||||
this._walletCreationService, Box<WalletInfo> walletInfoSource,
|
WalletCreationService walletCreationService, Box<WalletInfo> walletInfoSource,
|
||||||
{@required WalletType type, @required this.language})
|
{@required WalletType type, @required this.language})
|
||||||
: super(appStore, walletInfoSource, type: type, isRecovery: true);
|
: super(appStore, walletInfoSource, walletCreationService, type: type, isRecovery: true);
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
int height;
|
int height;
|
||||||
|
@ -42,7 +42,6 @@ abstract class WalletRestorationFromKeysVMBase extends WalletCreationVM
|
||||||
bool get hasRestorationHeight => type == WalletType.monero;
|
bool get hasRestorationHeight => type == WalletType.monero;
|
||||||
|
|
||||||
final String language;
|
final String language;
|
||||||
final WalletCreationService _walletCreationService;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
WalletCredentials getCredentials(dynamic options) {
|
WalletCredentials getCredentials(dynamic options) {
|
||||||
|
@ -68,5 +67,5 @@ abstract class WalletRestorationFromKeysVMBase extends WalletCreationVM
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<WalletBase> process(WalletCredentials credentials) async =>
|
Future<WalletBase> process(WalletCredentials credentials) async =>
|
||||||
_walletCreationService.restoreFromKeys(credentials);
|
walletCreationService.restoreFromKeys(credentials);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,9 @@ class WalletRestorationFromSeedVM = WalletRestorationFromSeedVMBase
|
||||||
abstract class WalletRestorationFromSeedVMBase extends WalletCreationVM
|
abstract class WalletRestorationFromSeedVMBase extends WalletCreationVM
|
||||||
with Store {
|
with Store {
|
||||||
WalletRestorationFromSeedVMBase(AppStore appStore,
|
WalletRestorationFromSeedVMBase(AppStore appStore,
|
||||||
this._walletCreationService, Box<WalletInfo> walletInfoSource,
|
WalletCreationService walletCreationService, Box<WalletInfo> walletInfoSource,
|
||||||
{@required WalletType type, @required this.language, this.seed})
|
{@required WalletType type, @required this.language, this.seed})
|
||||||
: super(appStore, walletInfoSource, type: type, isRecovery: true);
|
: super(appStore, walletInfoSource, walletCreationService, type: type, isRecovery: true);
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
String seed;
|
String seed;
|
||||||
|
@ -33,7 +33,6 @@ abstract class WalletRestorationFromSeedVMBase extends WalletCreationVM
|
||||||
bool get hasRestorationHeight => type == WalletType.monero;
|
bool get hasRestorationHeight => type == WalletType.monero;
|
||||||
|
|
||||||
final String language;
|
final String language;
|
||||||
final WalletCreationService _walletCreationService;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
WalletCredentials getCredentials(dynamic options) {
|
WalletCredentials getCredentials(dynamic options) {
|
||||||
|
@ -53,5 +52,5 @@ abstract class WalletRestorationFromSeedVMBase extends WalletCreationVM
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<WalletBase> process(WalletCredentials credentials) async =>
|
Future<WalletBase> process(WalletCredentials credentials) async =>
|
||||||
_walletCreationService.restoreFromSeed(credentials);
|
walletCreationService.restoreFromSeed(credentials);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ class WalletRestoreViewModel = WalletRestoreViewModelBase
|
||||||
with _$WalletRestoreViewModel;
|
with _$WalletRestoreViewModel;
|
||||||
|
|
||||||
abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
|
abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
|
||||||
WalletRestoreViewModelBase(AppStore appStore, this._walletCreationService,
|
WalletRestoreViewModelBase(AppStore appStore, WalletCreationService walletCreationService,
|
||||||
Box<WalletInfo> walletInfoSource,
|
Box<WalletInfo> walletInfoSource,
|
||||||
{@required WalletType type})
|
{@required WalletType type})
|
||||||
: availableModes = (type == WalletType.monero || type == WalletType.haven)
|
: availableModes = (type == WalletType.monero || type == WalletType.haven)
|
||||||
|
@ -30,11 +30,11 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
|
||||||
: [WalletRestoreMode.seed],
|
: [WalletRestoreMode.seed],
|
||||||
hasSeedLanguageSelector = type == WalletType.monero || type == WalletType.haven,
|
hasSeedLanguageSelector = type == WalletType.monero || type == WalletType.haven,
|
||||||
hasBlockchainHeightLanguageSelector = type == WalletType.monero || type == WalletType.haven,
|
hasBlockchainHeightLanguageSelector = type == WalletType.monero || type == WalletType.haven,
|
||||||
super(appStore, walletInfoSource, type: type, isRecovery: true) {
|
super(appStore, walletInfoSource, walletCreationService, type: type, isRecovery: true) {
|
||||||
isButtonEnabled =
|
isButtonEnabled =
|
||||||
!hasSeedLanguageSelector && !hasBlockchainHeightLanguageSelector;
|
!hasSeedLanguageSelector && !hasBlockchainHeightLanguageSelector;
|
||||||
mode = WalletRestoreMode.seed;
|
mode = WalletRestoreMode.seed;
|
||||||
_walletCreationService.changeWalletType(type: type);
|
walletCreationService.changeWalletType(type: type);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const moneroSeedMnemonicLength = 25;
|
static const moneroSeedMnemonicLength = 25;
|
||||||
|
@ -44,7 +44,6 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
|
||||||
final List<WalletRestoreMode> availableModes;
|
final List<WalletRestoreMode> availableModes;
|
||||||
final bool hasSeedLanguageSelector;
|
final bool hasSeedLanguageSelector;
|
||||||
final bool hasBlockchainHeightLanguageSelector;
|
final bool hasBlockchainHeightLanguageSelector;
|
||||||
final WalletCreationService _walletCreationService;
|
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
WalletRestoreMode mode;
|
WalletRestoreMode mode;
|
||||||
|
@ -123,9 +122,9 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
|
||||||
@override
|
@override
|
||||||
Future<WalletBase> process(WalletCredentials credentials) async {
|
Future<WalletBase> process(WalletCredentials credentials) async {
|
||||||
if (mode == WalletRestoreMode.keys) {
|
if (mode == WalletRestoreMode.keys) {
|
||||||
return _walletCreationService.restoreFromKeys(credentials);
|
return walletCreationService.restoreFromKeys(credentials);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _walletCreationService.restoreFromSeed(credentials);
|
return walletCreationService.restoreFromSeed(credentials);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue