diff --git a/lib/bloc/trezor_init_bloc/trezor_init_bloc.dart b/lib/bloc/trezor_init_bloc/trezor_init_bloc.dart index 13c9a6123c..28394cfe31 100644 --- a/lib/bloc/trezor_init_bloc/trezor_init_bloc.dart +++ b/lib/bloc/trezor_init_bloc/trezor_init_bloc.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:easy_localization/easy_localization.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:komodo_defi_sdk/komodo_defi_sdk.dart'; import 'package:komodo_defi_types/komodo_defi_types.dart'; import 'package:web_dex/app_config/app_config.dart'; @@ -19,18 +20,24 @@ import 'package:web_dex/model/kdf_auth_metadata_extension.dart'; import 'package:web_dex/model/text_error.dart'; import 'package:web_dex/model/wallet.dart'; import 'package:web_dex/shared/utils/utils.dart'; +import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart' + show PrivateKeyPolicy; part 'trezor_init_event.dart'; part 'trezor_init_state.dart'; +const String _trezorPasswordKey = 'trezor_wallet_password'; + class TrezorInitBloc extends Bloc { TrezorInitBloc({ required KomodoDefiSdk kdfSdk, required TrezorRepo trezorRepo, required CoinsRepo coinsRepository, + FlutterSecureStorage? secureStorage, }) : _trezorRepo = trezorRepo, _kdfSdk = kdfSdk, _coinsRepository = coinsRepository, + _secureStorage = secureStorage ?? const FlutterSecureStorage(), super(TrezorInitState.initial()) { on(_onSubscribeStatus); on(_onInit); @@ -50,6 +57,7 @@ class TrezorInitBloc extends Bloc { final TrezorRepo _trezorRepo; final KomodoDefiSdk _kdfSdk; final CoinsRepo _coinsRepository; + final FlutterSecureStorage _secureStorage; Timer? _statusTimer; void _unsubscribeStatus() { @@ -201,7 +209,6 @@ class TrezorInitBloc extends Bloc { // ignore } _trezorRepo.subscribeOnConnectionStatus(deviceDetails.pubKey); - await _kdfSdk.addActivatedCoins(enabledByDefaultTrezorCoins); emit( state.copyWith( inProgress: () => false, @@ -275,36 +282,65 @@ class TrezorInitBloc extends Bloc { /// into a static 'hidden' wallet to init trezor Future _loginToTrezorWallet({ String walletName = 'My Trezor', - String? password + String? password, + AuthOptions authOptions = const AuthOptions( + derivationMethod: DerivationMethod.hdWallet, + privKeyPolicy: PrivateKeyPolicy.trezor, + ), }) async { - password ??= generatePassword(); + try { + password ??= await _secureStorage.read(key: _trezorPasswordKey); + } catch (e, s) { + log( + 'Failed to read trezor password from secure storage: $e', + path: 'trezor_init_bloc => _loginToTrezorWallet', + isError: true, + trace: s, + ).ignore(); + // If reading fails, password will remain null and a new one will be generated + } + + if (password == null) { + password = generatePassword(); + try { + await _secureStorage.write(key: _trezorPasswordKey, value: password); + } catch (e, s) { + log( + 'Failed to write trezor password to secure storage: $e', + path: 'trezor_init_bloc => _loginToTrezorWallet', + isError: true, + trace: s, + ).ignore(); + // Continue with generated password even if storage write fails + } + } + final bool mm2SignedIn = await _kdfSdk.auth.isSignedIn(); if (state.kdfUser != null && mm2SignedIn) { return; } - // final walletName = state.status?.trezorStatus.name ?? 'My Trezor'; - // final password = - // state.status?.details.deviceDetails?.deviceId ?? 'hidden-login'; final existingWallets = await _kdfSdk.auth.getUsers(); if (existingWallets.any((wallet) => wallet.walletId.name == walletName)) { await _kdfSdk.auth.signIn( walletName: walletName, password: password, - options: const AuthOptions(derivationMethod: DerivationMethod.iguana), + options: authOptions, ); await _kdfSdk.setWalletType(WalletType.trezor); await _kdfSdk.confirmSeedBackup(); + await _kdfSdk.addActivatedCoins(enabledByDefaultTrezorCoins); return; } await _kdfSdk.auth.register( walletName: walletName, password: password, - options: const AuthOptions(derivationMethod: DerivationMethod.iguana), + options: authOptions, ); await _kdfSdk.setWalletType(WalletType.trezor); await _kdfSdk.confirmSeedBackup(); + await _kdfSdk.addActivatedCoins(enabledByDefaultTrezorCoins); } Future _logout() async { diff --git a/packages/komodo_ui_kit/pubspec.lock b/packages/komodo_ui_kit/pubspec.lock index e8ac3a0b35..23b4fe6067 100644 --- a/packages/komodo_ui_kit/pubspec.lock +++ b/packages/komodo_ui_kit/pubspec.lock @@ -95,7 +95,7 @@ packages: description: path: "packages/komodo_defi_rpc_methods" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -104,7 +104,7 @@ packages: description: path: "packages/komodo_defi_types" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -113,7 +113,7 @@ packages: description: path: "packages/komodo_ui" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -145,10 +145,10 @@ packages: dependency: transitive description: name: mobile_scanner - sha256: "9cb9e371ee9b5b548714f9ab5fd33b530d799745c83d5729ecd1e8ab2935dbd1" + sha256: "54005bdea7052d792d35b4fef0f84ec5ddc3a844b250ecd48dc192fb9b4ebc95" url: "https://pub.dev" source: hosted - version: "6.0.7" + version: "7.0.1" path: dependency: transitive description: diff --git a/pubspec.lock b/pubspec.lock index a60797aa1b..a2f28f578e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -337,10 +337,10 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: "1046d719fbdf230330d3443187cc33cc11963d15c9089f6cc56faa42a4c5f0cc" + sha256: cf51747952201a455a1c840f8171d273be009b932c75093020f9af64f2123e38 url: "https://pub.dev" source: hosted - version: "9.1.0" + version: "9.1.1" flutter_driver: dependency: transitive description: flutter @@ -586,10 +586,10 @@ packages: dependency: "direct main" description: name: http - sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" http_multi_server: dependency: transitive description: @@ -648,7 +648,7 @@ packages: description: path: "packages/komodo_cex_market_data" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.0.1" @@ -657,7 +657,7 @@ packages: description: path: "packages/komodo_coins" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -666,7 +666,7 @@ packages: description: path: "packages/komodo_defi_framework" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0" @@ -675,7 +675,7 @@ packages: description: path: "packages/komodo_defi_local_auth" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -684,7 +684,7 @@ packages: description: path: "packages/komodo_defi_rpc_methods" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -693,7 +693,7 @@ packages: description: path: "packages/komodo_defi_sdk" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -702,7 +702,7 @@ packages: description: path: "packages/komodo_defi_types" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -718,7 +718,7 @@ packages: description: path: "packages/komodo_ui" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -734,7 +734,7 @@ packages: description: path: "packages/komodo_wallet_build_transformer" ref: dev - resolved-ref: "41b554d08ed3f42f9f784a488cedf9ab4b3b3313" + resolved-ref: f63bebb0288db26f2a369579109e1fcc93e19b67 url: "https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git" source: git version: "0.2.0+0" @@ -862,10 +862,10 @@ packages: dependency: transitive description: name: mobile_scanner - sha256: "9cb9e371ee9b5b548714f9ab5fd33b530d799745c83d5729ecd1e8ab2935dbd1" + sha256: "54005bdea7052d792d35b4fef0f84ec5ddc3a844b250ecd48dc192fb9b4ebc95" url: "https://pub.dev" source: hosted - version: "6.0.7" + version: "7.0.1" mutex: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b20a5d3723..456667bb7b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,7 +58,7 @@ dependencies: ## ---- Dart.dev, Flutter.dev args: ^2.7.0 # dart.dev flutter_markdown: ^0.7.7 # flutter.dev - http: 1.3.0 # dart.dev + http: 1.4.0 # dart.dev intl: 0.20.2 # dart.dev js: ">=0.6.7 <=0.7.2" # dart.dev url_launcher: 6.3.1 # flutter.dev