mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-26 06:08:40 +01:00
CW-1615: Harden walletconnect auth (#3547)
* fix android CI * fix: harden walletconnect auth so a connected session won't transfer on dApp when wallet is switched within the app * refactor: improve session mgmt and better error handling, also added a loader to the listing page * feat: switch to newer id for solana dapps connections and fix requests not triggering
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
import "dart:async";
|
||||
|
||||
import "package:cake_wallet/core/amount_parsing_proxy.dart";
|
||||
import "package:cake_wallet/di.dart";
|
||||
import "package:cake_wallet/entities/preferences_key.dart";
|
||||
@@ -60,13 +58,17 @@ abstract class AppStoreBase with Store {
|
||||
Future<void> changeCurrentWallet(
|
||||
WalletBase<Balance, TransactionHistoryBase<TransactionInfo>, TransactionInfo> wallet) async {
|
||||
final changingToSameWalletType = this.wallet?.type == wallet.type;
|
||||
final previousWalletType = this.wallet?.type;
|
||||
|
||||
await this.wallet?.close(shouldCleanup: !changingToSameWalletType);
|
||||
this.wallet = wallet;
|
||||
this.wallet!.setExceptionHandler(ExceptionHandler.onError);
|
||||
|
||||
if (isWalletConnectCompatibleChain(wallet.type)) {
|
||||
unawaited(_setupWalletConnect());
|
||||
getIt.get<WalletKitService>().resetConnectionsState();
|
||||
_queueWalletConnectAction(_setupWalletConnect);
|
||||
} else if (previousWalletType != null && isWalletConnectCompatibleChain(previousWalletType)) {
|
||||
_queueWalletConnectAction(_disposeWalletConnect);
|
||||
}
|
||||
await getIt.get<SharedPreferences>().setString(PreferencesKey.currentWalletName, wallet.name);
|
||||
await getIt
|
||||
@@ -74,6 +76,12 @@ abstract class AppStoreBase with Store {
|
||||
.setInt(PreferencesKey.currentWalletType, serializeToInt(wallet.type));
|
||||
}
|
||||
|
||||
Future<void> _lastWalletConnectAction = Future.value();
|
||||
|
||||
void _queueWalletConnectAction(Future<void> Function() action) {
|
||||
_lastWalletConnectAction = _lastWalletConnectAction.then((_) => action());
|
||||
}
|
||||
|
||||
Future<void> _setupWalletConnect() async {
|
||||
try {
|
||||
final wcService = getIt.get<WalletKitService>();
|
||||
@@ -84,4 +92,12 @@ abstract class AppStoreBase with Store {
|
||||
printV("WalletConnect setup failed: $e\n$s");
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _disposeWalletConnect() async {
|
||||
try {
|
||||
await getIt.get<WalletKitService>().onDispose();
|
||||
} catch (e) {
|
||||
printV("WalletConnect teardown failed: $e");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user