2021-01-13 18:43:34 +02:00
|
|
|
import 'dart:convert';
|
|
|
|
import 'dart:io';
|
2024-05-06 12:55:05 -07:00
|
|
|
import 'package:cake_wallet/core/secure_storage.dart';
|
2024-10-16 19:27:04 +02:00
|
|
|
import 'package:cake_wallet/entities/get_encryption_key.dart';
|
2024-10-05 00:50:36 +03:00
|
|
|
import 'package:cake_wallet/entities/transaction_description.dart';
|
New themes (#2239)
* Add theme base v2
* Initial new theme base files
* Typos
* Fixes
* Update theme files
* feat: Migrate to Material 3 Theming
Foundation, Theme Data Refactor, and First Extension Cleanup Batch.
This commit completes the first major phase of migrating to Material 3 theming by setting up the foundations for material 3 integration and begins the initial migration, removing custom theme extensions, updating theme data, and refactoring all relevant widget and page theming to use Material 3’s built-in color and typography tokens.
These changes:
- Lays the groundwork for Material 3 theming by restructuring the app’s theme configuration to use Material 3’s ColorScheme and TextTheme as the primary sources of color and typography throughout the app.
- Refactors the core theme config files by removing legacy custom color roles ensuring all color definitions now map directly to Material 3’s role.
- Begins the first batch migration of custom theme extensions (InfoTheme, PlaceholderTheme, KeyboardTheme, PinCodeTheme) and updates all affected widgets and pages to use Material 3 color and typography tokens instead of the custom properties.
- Cleans up the codebase by deleting the files of the initial set of migrated extensions and eliminating all related imports and usages.
* feat: Migrate to Material 3 Theming.
This change:
- Updates the themes README.md file to reflect the current structure and give more information based on the first major phase that was completed.
* feat: Migrate to Material 3 Theming
Deleting previous theme extensions
* feat: Migrate to Material 3 Theming
Another batch of migrations from existing extensions
* feat: Migration to Material 3 Theming
Third Migration batch for theme extensions
* fwat: Migration to Material 3 Theming
Final Migration batch for previous theme extensions
* Update onboarding hero
* Update button radius
* Add surfaceContainer to light theme
* feat(themes): Migrate to Material 3 Theming
This change:
- Adds new set of hero images
- Modifies the core structure for the themes
- Add missing color tokens to the theme classes
- Adds a CustomThemeColor class for custom color tokens
- Modifies the themelist to have a fall back for previous theme implementation
- Adds localization for some texts
- Modifies the flow for loading the theme on app start
- Add a WidgetsBindingObserver that listens for changes in the device theme and updates the app theme when there is a change
- Registers the themeStore as a Singleton for codebase wide use
* feat(themes): Migrate to Material 3 theming
This change:
- Migrates UI flows across the app to the new themes
- Confirms styling and typography of components across the app uses the new themes
- Remove instances of Palette use
- Switch TextStyles across the app to use theme text styles
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adjusts bottomsheets styling and removes duplicate close button
- Removes more themedata extensions from the previous implementation
* - Remove outlines from cards and dock
- Update menu colors
- Update padding/divider size for cards
* - Update PIN screen
- Fix navigation dock shadow
- Update wallet screen colors
* Update border radius --skip-ci
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adds gradient backgrounds to the dashbaord and balance cards.
- Migrates the input fields across the app to BaseTextFormFields.
- Removes dependence of input fields on individual styling, focusing instead on using theme defined InputDecoration styling with adjustments on individual components where needed.
- Applies new theme styling to BaseTextFormField, AddressTextField and CurrencyAmountTextField.
* - Switch some hero images to PNG
- Fix nagivation_dock shadow
- Minor fixes
* feat: Add fallback to previous underline styling in central widgets
This change:
- Adds a fallback to CurrencyAmountTextField, AddressTextField, and BaseTextFormField, allowing them use the previous theme styling.
- Adds localization for new texts
* feat(themes): Update warning box colors for dark and light themes
* feat(themes): Relaod themes when user restores from backup, ensuring the user previous theme preference is used.
* feat(themes): Handle themes logic during restore from backup
This change:
- Refactors theme loading logic to handle backup restore edgecase
- Refreshes the theme based on the user saved preference during restore from backup flow
* Fix card gradients and spacing
* Fix even more radiuses
Test new icons for navigation_dock.dart
* Update onboarding flow backgrounds
Fix swap icon clipping
Fix some text colors
Add more hero images
* Fix incorrect color for light theme
* Fix more hero images and cleanup
* Update text field icons
Fix info box CTA colors
Fix sync indicator colors
* Update toggle colors
Update dark theme colors (minor)
Update crypto_balance_widget.dart icon
* Update page transitions in router.dart
Fix some colors
* feat(themes): Display label by default for filled textfields
* feat(themes): Refactor theme handling across various components
This change:
- Fixes issue with themeMode resetting to system mode when app is restarted causing a UI glitch
- Updates theme checks from `currentTheme.type == ThemeType.dark` to `currentTheme.isDark` for consistency
- Adjusts UI components to use the theme directly from the themeStore
* feat(themes): Add animating tagline to the create pin welcome screen
* Revert text fields label temporarily, fix a couple colors, and cleanup some images
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Blazebrain <davidadegoke16@gmail.com>
2025-05-25 20:11:45 +00:00
|
|
|
import 'package:cake_wallet/themes/utils/theme_list.dart';
|
CW-676 Add Linux scripts to build monero_c for linux platform (#1527)
* Revert "Revert btc address types"
This reverts commit a49e57e3
* Re-add Bitcoin Address types
Fix conflicts with main
* fix: label issues, clear spent utxo
* chore: deps
* fix: build
* fix: missing types
* feat: new electrs API & changes, fixes for last block scanning
* Update Monero
* not sure why it's failing
* Enable Exolix
Improve service updates indicator
New versions
* Add exolix Api token to limits api
* Ignore reporting network issues
* Change default bitcoin node
* Merge main and update linux version
* Update app version [skip ci]
* New versions
* Fix conflicts and update linux version
* minor fix
* feat: Scan Silent Payments homepage toggle
* chore: build configure
* feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes
* fix: invalid Object in sendData
* feat: improve addresses page & address book displays
* feat: silent payments labeled addresses disclaimer
* fix: missing i18n
* chore: print
* feat: single block scan, rescan by date working for btc mainnet
* feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert
* feat: delete silent addresses
* fix: red dot in non ssl nodes
* fix: inconsistent connection states, fix tx history
* fix: tx & balance displays, cpfp sending
* feat: new rust lib
* chore: node path
* fix: check node based on network
* fix: missing txcount from addresses
* style: padding in feature page cards
* fix: restore not getting all wallet addresses by type
* fix: auto switch node broken
* fix: silent payment txs not being restored
* update linux version
* feat: change scanning to subscription model, sync improvements
* fix: scan re-subscription
* fix: default nodes
* fix: improve scanning by date, fix single block scan
* refactor: common function for input tx selection
* various fixes for build issues
* initial monero.dart implementation
* ...
* multiple wallets
new lib
minor fixes
* other fixes from monero.dart and monero_c
* fix: nodes & build
* update build scripts
fix polyseed
* remove unnecessary code
* Add windows app, build scripts and build guide for it.
* Minor fix in generated monero configs
* Merge and fix main
* fix: send all with multiple outs
* add missing monero_c command
* add android build script
* update version
* Merge and fix main
* undo android ndk removal
* Fix modified exception_handler.dart
* Temporarily remove haven
* fix build issues
* fix pr script
* Fixes for build monero.dart (monero_c) for windows.
* monero build script
* wip: ios build script
* refactor: unchanged file
* Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script.
* Update monero.dart and monero_c versions.
* Add missed windows build scripts
* Update the application configuration for windows build script.
* Update cw_monero pubspec lock file for monero.dart
* Update pr_test_build.yml
* chore: upgrade
* chore: merge changes
* refactor: unchanged files [skip ci]
* Fix conflicts with main
* fix for multiple wallets
* update app version [skip ci]
* Add tron to windows application configuration.
* Add macOS option for description message in configure_cake_wallet.sh
* fix missing encryption utils in hardware wallet functions [skip ci]
* fix conflicts
* Include missed monero dll for windows.
* reformatting [skip ci]
* fix conflicts with main
* Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with for configuration script. Remove cw_shared configuration for cw_monero.
* fix: scan fixes, add date, allow sending while scanning
* add missing nano secrets file [skip ci]
* ios library
* don't pull prebuilds android
* Add auto generation of manifest file for android project even for iOS, macOS, Windows.
* remove tron
* feat: sync fixes, sp settings
* feat: fix resyncing
* store crash fix
* make init async so it won't lag
disable print starts
* fix monero_c build issues
* libstdc++
* merge main and update version
* Fix MacOS saving wallet file issue
Fix Secure Storage issue (somehow)
* update pubspec.lock
* fix build script
* Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet.
* fix: date from height logic, status disconnected & chain tip get
* fix: params
* feat: electrum migration if using cake electrum
* fix nodes
update versions
* re-enable tron
* update sp_scanner to work on iOS [skip ci]
* bump monero_c hash
* bump monero_c commit
* bump moneroc version
* bump monero_c commit
* Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to .
* fix: wrong socket for old electrum nodes
* update version
* Fix unchecked wallet type call
* get App Dir correctly in default_settings_migration.dart
* handle previous issue with fetching linux documents directory [skip ci]
* backup fix
* fix NTFS issues
* Add Tron
Update Linux version
* Close the wallet when the wallet gets changed
* fix: double balance
* feat: node domain
* fix: menu name
* bump monero_c commit
* fix: update tip on set scanning
* fix: connection switching back and forth
* feat: check if node is electrs, and supports sp
* chore: fix build
* minor enhancements
* fixes and enhancements
* solve conflicts with main
* Only stop wallet on rename and delete
* fix: status toggle
* minor enhancement
* Monero.com fixes
* bump monero_c commit
* update sp_scanner to include windows and linux
* merge main
* Update macOS build guide. Change brew dependencies for build unbound locally.
* fix: Tron file write, build scripts
* - merge linux with Monero Dart
- Temporarily disable Monero
* fix other issues with linux
* linux ci
fix build script
* Update pr_test_build_linux.yml
install required packages
* add linux desktop dependencies
* don't use apk in linux build releases
* don't copy the file to test-apk
* fix linux runtime issues
* remove libc++_shared.so
* fix issues with linux
* prepare both android and linux (because otherwise it will fail)
* ci script updates
* run apt update
* bump image to ubuntu 22.04
note: remember to put it down later
* bump python version
* remove some dependencies
* remove unused import
* add missing dependencies
* fix dependencies
* some fixes
* remove print [skip ci]
* Add back RunnerBase.entitlements
minor fixes [skip ci]
* fix memory leak / infinite recurrsion when opening xmr wallet
* url_launcher_linux: 3.1.1 # https://github.com/flutter/flutter/issues/153083
* fix conflicts with main
* handle walletKeysFile with encryptionUtils
* update app version [skip ci]
* add wownero [skip ci]
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Rafael Saes <git@rafael.saes.dev>
Co-authored-by: M <m@cakewallet.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
2024-08-13 00:18:14 +02:00
|
|
|
import 'package:cw_core/root_dir.dart';
|
2023-10-09 18:18:59 +03:00
|
|
|
import 'package:cake_wallet/utils/device_info.dart';
|
2024-12-09 12:23:59 -06:00
|
|
|
import 'package:cw_core/utils/print_verbose.dart';
|
2022-02-03 20:04:16 +02:00
|
|
|
import 'package:cw_core/wallet_type.dart';
|
2021-01-13 18:43:34 +02:00
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'package:hive/hive.dart';
|
|
|
|
import 'package:cryptography/cryptography.dart';
|
|
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
import 'package:archive/archive_io.dart';
|
2023-08-15 03:47:25 +03:00
|
|
|
import 'package:cw_core/cake_hive.dart';
|
2021-01-13 18:43:34 +02:00
|
|
|
import 'package:cake_wallet/core/key_service.dart';
|
|
|
|
import 'package:cake_wallet/entities/encrypt.dart';
|
|
|
|
import 'package:cake_wallet/entities/preferences_key.dart';
|
|
|
|
import 'package:cake_wallet/entities/secret_store_key.dart';
|
2021-12-24 14:37:24 +02:00
|
|
|
import 'package:cw_core/wallet_info.dart';
|
2021-01-15 19:41:30 +02:00
|
|
|
import 'package:cake_wallet/.secrets.g.dart' as secrets;
|
2022-02-02 14:40:40 +02:00
|
|
|
import 'package:cake_wallet/wallet_types.g.dart';
|
2022-10-26 15:28:27 -04:00
|
|
|
import 'package:cake_backup/backup.dart' as cake_backup;
|
2021-01-13 18:43:34 +02:00
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
class $BackupService {
|
|
|
|
$BackupService(this._secureStorage, this.walletInfoSource, this.transactionDescriptionBox,
|
|
|
|
this.keyService, this.sharedPreferences)
|
|
|
|
: cipher = Cryptography.instance.chacha20Poly1305Aead(),
|
|
|
|
correctWallets = <WalletInfo>[];
|
2021-01-13 18:43:34 +02:00
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
static const currentVersion = _v3;
|
2021-01-15 19:41:30 +02:00
|
|
|
|
2022-10-26 15:28:27 -04:00
|
|
|
static const _v2 = 2;
|
2025-03-22 02:16:54 +01:00
|
|
|
static const _v3 = 3;
|
2021-01-15 19:41:30 +02:00
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
final Cipher cipher;
|
2024-05-08 21:23:27 +01:00
|
|
|
final SecureStorage _secureStorage;
|
2025-03-22 02:16:54 +01:00
|
|
|
final SharedPreferences sharedPreferences;
|
|
|
|
final Box<WalletInfo> walletInfoSource;
|
|
|
|
final Box<TransactionDescription> transactionDescriptionBox;
|
|
|
|
final KeyService keyService;
|
|
|
|
List<WalletInfo> correctWallets;
|
2021-01-15 19:41:30 +02:00
|
|
|
|
2022-10-26 15:28:27 -04:00
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<void> importBackupV1(Uint8List data, String password, {required String nonce}) async {
|
Wownero (#1485)
* fix: scanning issues
* fix: sync, storing silent unspents
* chore: deps
* fix: label issues, clear spent utxo
* chore: deps
* fix: build
* fix: missing types
* feat: new electrs API & changes, fixes for last block scanning
* feat: Scan Silent Payments homepage toggle
* chore: build configure
* feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes
* fix: invalid Object in sendData
* feat: improve addresses page & address book displays
* feat: silent payments labeled addresses disclaimer
* fix: missing i18n
* chore: print
* feat: single block scan, rescan by date working for btc mainnet
* feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert
* feat: delete silent addresses
* fix: red dot in non ssl nodes
* fix: inconsistent connection states, fix tx history
* fix: tx & balance displays, cpfp sending
* feat: new rust lib
* chore: node path
* fix: check node based on network
* fix: missing txcount from addresses
* style: padding in feature page cards
* fix: restore not getting all wallet addresses by type
* fix: auto switch node broken
* fix: silent payment txs not being restored
* feat: change scanning to subscription model, sync improvements
* fix: scan re-subscription
* fix: default nodes
* fix: improve scanning by date, fix single block scan
* refactor: common function for input tx selection
* various fixes for build issues
* initial monero.dart implementation
* ...
* multiple wallets
new lib
minor fixes
* other fixes from monero.dart and monero_c
* fix: nodes & build
* update build scripts
fix polyseed
* remove unnecessary code
* Add windows app, build scripts and build guide for it.
* Minor fix in generated monero configs
* fix: send all with multiple outs
* add missing monero_c command
* add android build script
* Merge and fix main
* undo android ndk removal
* Fix modified exception_handler.dart
* Temporarily remove haven
* fix build issues
* fix pr script
* Fixes for build monero.dart (monero_c) for windows.
* monero build script
* wip: ios build script
* refactor: unchanged file
* Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script.
* Update monero.dart and monero_c versions.
* Add missed windows build scripts
* Update the application configuration for windows build script.
* Update cw_monero pubspec lock file for monero.dart
* Update pr_test_build.yml
* chore: upgrade
* chore: merge changes
* refactor: unchanged files [skip ci]
* Fix conflicts with main
* fix for multiple wallets
* Add tron to windows application configuration.
* Add macOS option for description message in configure_cake_wallet.sh
* Include missed monero dll for windows.
* fix conflicts with main
* Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with for configuration script. Remove cw_shared configuration for cw_monero.
* fix: scan fixes, add date, allow sending while scanning
* add missing nano secrets file [skip ci]
* ios library
* don't pull prebuilds android
* Add auto generation of manifest file for android project even for iOS, macOS, Windows.
* feat: sync fixes, sp settings
* feat: fix resyncing
* store crash fix
* make init async so it won't lag
disable print starts
* fix monero_c build issues
* libstdc++
* Fix MacOS saving wallet file issue
Fix Secure Storage issue (somehow)
* update pubspec.lock
* fix build script
* Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet.
* fix: date from height logic, status disconnected & chain tip get
* fix: params
* feat: electrum migration if using cake electrum
* fix nodes
update versions
* re-enable tron
* update sp_scanner to work on iOS [skip ci]
* bump monero_c hash
* bump monero_c commit
* bump moneroc version
* bump monero_c commit
* Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to .
* fix: wrong socket for old electrum nodes
* Fix unchecked wallet type call
* get App Dir correctly in default_settings_migration.dart
* handle previous issue with fetching linux documents directory [skip ci]
* backup fix
* fix NTFS issues
* Close the wallet when the wallet gets changed
* fix: double balance
* feat: node domain
* fix: menu name
* bump monero_c commit
* fix: update tip on set scanning
* fix: connection switching back and forth
* feat: check if node is electrs, and supports sp
* chore: fix build
* minor enhancements
* fixes and enhancements
* solve conflicts with main
* Only stop wallet on rename and delete
* fix: status toggle
* minor enhancement
* Monero.com fixes
* bump monero_c commit
* update sp_scanner to include windows and linux
* Update macOS build guide. Change brew dependencies for build unbound locally.
* fix conflicts and update macos build guide
* remove build cache when on gh actions
* update secure storage
* free up even more storage
* free up more storage
* Add initial wownero
* fix conflicts
* fix workflow issue
* build wownero
* ios and windows changes
* macos
* complete wownero flow (app side)
* add keychain group entitlement and update script for RunnerBase on macos
* update secure_storage version to 8.1.0 in configure.dart
* add wownero framework
* update ios builds
* proper path for wownero and monero
* finalizing wownero
* finalizing wownero
* free up even more storage
* revert commenting of build gradle configs
* revert commenting of secrets [skip ci]
* free more storage
* minor fixes
* link android wownero libraries
* bump monero_c commit
* wownero fixes
* rename target
* build_single.sh using clean env
* bump monero_c commit
* minor fix
* Add wownero polyseed
* fix conflicts with main
* fix: wallet seed display
fix: wownero not refreshing
* fix: wallet seed display
fix: wownero not refreshing
* bump monero_c commit
* minor fixes
* fix: incorrectly displaying XMR instead of WOW
* fix: incorrect restore height in wownero
* bump monero_c commit
* Add Inno Setup Script for windows exe installer
* drop libc++_shared.so
* fixes from comments
* Fix CMake for windows
* Merge latest monero dart changes [skip ci]
* bump monero_c commit
* add wownero to build scripts for macos [skip ci]
* add 14 word seed support to wownero
* UI fixes for wownero seed restore
* minor fixes
* reformat code to pass lints
* wownero: fixes
haven: removal popup
* minor iOS fix [skip ci]
* fix: wownero confirmation count (it is spendable after 3 confirms)
fix: transaction history not displaying in WOW and XMR
when tx has 0 confirms,
This is more of a workaround, because I have no idea
why would the cpp code not return pending transaction.
* Update preferences_key.dart [skip ci]
* minor fixes
---------
Co-authored-by: Rafael Saes <git@rafael.saes.dev>
Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net>
Co-authored-by: M <m@cakewallet.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
Co-authored-by: Matthew Fosse <matt@fosse.co>
2024-07-04 22:43:17 +03:00
|
|
|
final appDir = await getAppDir();
|
2022-10-26 15:28:27 -04:00
|
|
|
final decryptedData = await _decryptV1(data, password, nonce);
|
2021-01-13 18:43:34 +02:00
|
|
|
final zip = ZipDecoder().decodeBytes(decryptedData);
|
|
|
|
|
2024-10-04 23:53:55 +02:00
|
|
|
for (var file in zip.files) {
|
2021-01-13 18:43:34 +02:00
|
|
|
final filename = file.name;
|
|
|
|
|
|
|
|
if (file.isFile) {
|
2021-01-15 19:41:30 +02:00
|
|
|
final content = file.content as List<int>;
|
2021-01-13 18:43:34 +02:00
|
|
|
File('${appDir.path}/' + filename)
|
|
|
|
..createSync(recursive: true)
|
2024-10-04 23:53:55 +02:00
|
|
|
..writeAsBytesSync(content, flush: true);
|
2021-01-13 18:43:34 +02:00
|
|
|
} else {
|
|
|
|
Directory('${appDir.path}/' + filename)..create(recursive: true);
|
|
|
|
}
|
2024-10-04 23:53:55 +02:00
|
|
|
};
|
2021-01-13 18:43:34 +02:00
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
await verifyWallets();
|
2022-10-26 15:28:27 -04:00
|
|
|
await _importKeychainDumpV1(password, nonce: nonce);
|
2025-03-22 02:16:54 +01:00
|
|
|
await importPreferencesDump();
|
2022-10-26 15:28:27 -04:00
|
|
|
}
|
|
|
|
|
2024-10-16 19:27:04 +02:00
|
|
|
// checked with .endsWith - so this should be the last part of the filename
|
|
|
|
static const ignoreFiles = [
|
|
|
|
"flutter_assets/kernel_blob.bin",
|
|
|
|
"flutter_assets/vm_snapshot_data",
|
|
|
|
"flutter_assets/isolate_snapshot_data",
|
2025-03-22 02:16:54 +01:00
|
|
|
"README.txt",
|
2024-10-16 19:27:04 +02:00
|
|
|
".lock",
|
|
|
|
];
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<void> importBackupV2(Uint8List data, String password) async {
|
Wownero (#1485)
* fix: scanning issues
* fix: sync, storing silent unspents
* chore: deps
* fix: label issues, clear spent utxo
* chore: deps
* fix: build
* fix: missing types
* feat: new electrs API & changes, fixes for last block scanning
* feat: Scan Silent Payments homepage toggle
* chore: build configure
* feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes
* fix: invalid Object in sendData
* feat: improve addresses page & address book displays
* feat: silent payments labeled addresses disclaimer
* fix: missing i18n
* chore: print
* feat: single block scan, rescan by date working for btc mainnet
* feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert
* feat: delete silent addresses
* fix: red dot in non ssl nodes
* fix: inconsistent connection states, fix tx history
* fix: tx & balance displays, cpfp sending
* feat: new rust lib
* chore: node path
* fix: check node based on network
* fix: missing txcount from addresses
* style: padding in feature page cards
* fix: restore not getting all wallet addresses by type
* fix: auto switch node broken
* fix: silent payment txs not being restored
* feat: change scanning to subscription model, sync improvements
* fix: scan re-subscription
* fix: default nodes
* fix: improve scanning by date, fix single block scan
* refactor: common function for input tx selection
* various fixes for build issues
* initial monero.dart implementation
* ...
* multiple wallets
new lib
minor fixes
* other fixes from monero.dart and monero_c
* fix: nodes & build
* update build scripts
fix polyseed
* remove unnecessary code
* Add windows app, build scripts and build guide for it.
* Minor fix in generated monero configs
* fix: send all with multiple outs
* add missing monero_c command
* add android build script
* Merge and fix main
* undo android ndk removal
* Fix modified exception_handler.dart
* Temporarily remove haven
* fix build issues
* fix pr script
* Fixes for build monero.dart (monero_c) for windows.
* monero build script
* wip: ios build script
* refactor: unchanged file
* Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script.
* Update monero.dart and monero_c versions.
* Add missed windows build scripts
* Update the application configuration for windows build script.
* Update cw_monero pubspec lock file for monero.dart
* Update pr_test_build.yml
* chore: upgrade
* chore: merge changes
* refactor: unchanged files [skip ci]
* Fix conflicts with main
* fix for multiple wallets
* Add tron to windows application configuration.
* Add macOS option for description message in configure_cake_wallet.sh
* Include missed monero dll for windows.
* fix conflicts with main
* Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with for configuration script. Remove cw_shared configuration for cw_monero.
* fix: scan fixes, add date, allow sending while scanning
* add missing nano secrets file [skip ci]
* ios library
* don't pull prebuilds android
* Add auto generation of manifest file for android project even for iOS, macOS, Windows.
* feat: sync fixes, sp settings
* feat: fix resyncing
* store crash fix
* make init async so it won't lag
disable print starts
* fix monero_c build issues
* libstdc++
* Fix MacOS saving wallet file issue
Fix Secure Storage issue (somehow)
* update pubspec.lock
* fix build script
* Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet.
* fix: date from height logic, status disconnected & chain tip get
* fix: params
* feat: electrum migration if using cake electrum
* fix nodes
update versions
* re-enable tron
* update sp_scanner to work on iOS [skip ci]
* bump monero_c hash
* bump monero_c commit
* bump moneroc version
* bump monero_c commit
* Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to .
* fix: wrong socket for old electrum nodes
* Fix unchecked wallet type call
* get App Dir correctly in default_settings_migration.dart
* handle previous issue with fetching linux documents directory [skip ci]
* backup fix
* fix NTFS issues
* Close the wallet when the wallet gets changed
* fix: double balance
* feat: node domain
* fix: menu name
* bump monero_c commit
* fix: update tip on set scanning
* fix: connection switching back and forth
* feat: check if node is electrs, and supports sp
* chore: fix build
* minor enhancements
* fixes and enhancements
* solve conflicts with main
* Only stop wallet on rename and delete
* fix: status toggle
* minor enhancement
* Monero.com fixes
* bump monero_c commit
* update sp_scanner to include windows and linux
* Update macOS build guide. Change brew dependencies for build unbound locally.
* fix conflicts and update macos build guide
* remove build cache when on gh actions
* update secure storage
* free up even more storage
* free up more storage
* Add initial wownero
* fix conflicts
* fix workflow issue
* build wownero
* ios and windows changes
* macos
* complete wownero flow (app side)
* add keychain group entitlement and update script for RunnerBase on macos
* update secure_storage version to 8.1.0 in configure.dart
* add wownero framework
* update ios builds
* proper path for wownero and monero
* finalizing wownero
* finalizing wownero
* free up even more storage
* revert commenting of build gradle configs
* revert commenting of secrets [skip ci]
* free more storage
* minor fixes
* link android wownero libraries
* bump monero_c commit
* wownero fixes
* rename target
* build_single.sh using clean env
* bump monero_c commit
* minor fix
* Add wownero polyseed
* fix conflicts with main
* fix: wallet seed display
fix: wownero not refreshing
* fix: wallet seed display
fix: wownero not refreshing
* bump monero_c commit
* minor fixes
* fix: incorrectly displaying XMR instead of WOW
* fix: incorrect restore height in wownero
* bump monero_c commit
* Add Inno Setup Script for windows exe installer
* drop libc++_shared.so
* fixes from comments
* Fix CMake for windows
* Merge latest monero dart changes [skip ci]
* bump monero_c commit
* add wownero to build scripts for macos [skip ci]
* add 14 word seed support to wownero
* UI fixes for wownero seed restore
* minor fixes
* reformat code to pass lints
* wownero: fixes
haven: removal popup
* minor iOS fix [skip ci]
* fix: wownero confirmation count (it is spendable after 3 confirms)
fix: transaction history not displaying in WOW and XMR
when tx has 0 confirms,
This is more of a workaround, because I have no idea
why would the cpp code not return pending transaction.
* Update preferences_key.dart [skip ci]
* minor fixes
---------
Co-authored-by: Rafael Saes <git@rafael.saes.dev>
Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net>
Co-authored-by: M <m@cakewallet.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
Co-authored-by: Matthew Fosse <matt@fosse.co>
2024-07-04 22:43:17 +03:00
|
|
|
final appDir = await getAppDir();
|
2025-03-22 02:16:54 +01:00
|
|
|
final decryptedData = await decryptV2(data, password);
|
2022-10-26 15:28:27 -04:00
|
|
|
final zip = ZipDecoder().decodeBytes(decryptedData);
|
|
|
|
|
2024-10-16 19:27:04 +02:00
|
|
|
outer:
|
2024-10-04 23:53:55 +02:00
|
|
|
for (var file in zip.files) {
|
2022-10-26 15:28:27 -04:00
|
|
|
final filename = file.name;
|
2025-05-16 13:51:36 +03:00
|
|
|
for (var ignore in ignoreFiles) {
|
2024-10-16 19:27:04 +02:00
|
|
|
if (filename.endsWith(ignore) && !filename.contains("wallets/")) {
|
2024-12-09 12:23:59 -06:00
|
|
|
printV("ignoring backup file: $filename");
|
2024-10-16 19:27:04 +02:00
|
|
|
continue outer;
|
|
|
|
}
|
|
|
|
}
|
2024-12-09 12:23:59 -06:00
|
|
|
printV("restoring: $filename");
|
2022-10-26 15:28:27 -04:00
|
|
|
if (file.isFile) {
|
|
|
|
final content = file.content as List<int>;
|
|
|
|
File('${appDir.path}/' + filename)
|
|
|
|
..createSync(recursive: true)
|
2024-10-04 23:53:55 +02:00
|
|
|
..writeAsBytesSync(content, flush: true);
|
2022-10-26 15:28:27 -04:00
|
|
|
} else {
|
2025-03-22 02:16:54 +01:00
|
|
|
final dir = Directory('${appDir.path}/' + filename);
|
|
|
|
if (!dir.existsSync()) {
|
|
|
|
dir.createSync(recursive: true);
|
|
|
|
}
|
2022-10-26 15:28:27 -04:00
|
|
|
}
|
2024-10-04 23:53:55 +02:00
|
|
|
};
|
2022-10-26 15:28:27 -04:00
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
await verifyWallets();
|
|
|
|
await importKeychainDumpV2(password);
|
|
|
|
await importPreferencesDump();
|
|
|
|
await importTransactionDescriptionDump(); // HiveError: Box has already been closed
|
2021-01-13 18:43:34 +02:00
|
|
|
}
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<void> verifyWallets() async {
|
2025-06-17 00:31:49 +02:00
|
|
|
final walletInfoSource = await reloadHiveWalletInfoBox();
|
2025-03-22 02:16:54 +01:00
|
|
|
correctWallets =
|
2023-08-04 14:49:26 +01:00
|
|
|
walletInfoSource.values.where((info) => availableWalletTypes.contains(info.type)).toList();
|
2022-02-02 14:40:40 +02:00
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
if (correctWallets.isEmpty) {
|
2022-02-02 14:40:40 +02:00
|
|
|
throw Exception('Correct wallets not detected');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-06-17 00:31:49 +02:00
|
|
|
Future<Box<WalletInfo>> reloadHiveWalletInfoBox() async {
|
Wownero (#1485)
* fix: scanning issues
* fix: sync, storing silent unspents
* chore: deps
* fix: label issues, clear spent utxo
* chore: deps
* fix: build
* fix: missing types
* feat: new electrs API & changes, fixes for last block scanning
* feat: Scan Silent Payments homepage toggle
* chore: build configure
* feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes
* fix: invalid Object in sendData
* feat: improve addresses page & address book displays
* feat: silent payments labeled addresses disclaimer
* fix: missing i18n
* chore: print
* feat: single block scan, rescan by date working for btc mainnet
* feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert
* feat: delete silent addresses
* fix: red dot in non ssl nodes
* fix: inconsistent connection states, fix tx history
* fix: tx & balance displays, cpfp sending
* feat: new rust lib
* chore: node path
* fix: check node based on network
* fix: missing txcount from addresses
* style: padding in feature page cards
* fix: restore not getting all wallet addresses by type
* fix: auto switch node broken
* fix: silent payment txs not being restored
* feat: change scanning to subscription model, sync improvements
* fix: scan re-subscription
* fix: default nodes
* fix: improve scanning by date, fix single block scan
* refactor: common function for input tx selection
* various fixes for build issues
* initial monero.dart implementation
* ...
* multiple wallets
new lib
minor fixes
* other fixes from monero.dart and monero_c
* fix: nodes & build
* update build scripts
fix polyseed
* remove unnecessary code
* Add windows app, build scripts and build guide for it.
* Minor fix in generated monero configs
* fix: send all with multiple outs
* add missing monero_c command
* add android build script
* Merge and fix main
* undo android ndk removal
* Fix modified exception_handler.dart
* Temporarily remove haven
* fix build issues
* fix pr script
* Fixes for build monero.dart (monero_c) for windows.
* monero build script
* wip: ios build script
* refactor: unchanged file
* Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script.
* Update monero.dart and monero_c versions.
* Add missed windows build scripts
* Update the application configuration for windows build script.
* Update cw_monero pubspec lock file for monero.dart
* Update pr_test_build.yml
* chore: upgrade
* chore: merge changes
* refactor: unchanged files [skip ci]
* Fix conflicts with main
* fix for multiple wallets
* Add tron to windows application configuration.
* Add macOS option for description message in configure_cake_wallet.sh
* Include missed monero dll for windows.
* fix conflicts with main
* Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with for configuration script. Remove cw_shared configuration for cw_monero.
* fix: scan fixes, add date, allow sending while scanning
* add missing nano secrets file [skip ci]
* ios library
* don't pull prebuilds android
* Add auto generation of manifest file for android project even for iOS, macOS, Windows.
* feat: sync fixes, sp settings
* feat: fix resyncing
* store crash fix
* make init async so it won't lag
disable print starts
* fix monero_c build issues
* libstdc++
* Fix MacOS saving wallet file issue
Fix Secure Storage issue (somehow)
* update pubspec.lock
* fix build script
* Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet.
* fix: date from height logic, status disconnected & chain tip get
* fix: params
* feat: electrum migration if using cake electrum
* fix nodes
update versions
* re-enable tron
* update sp_scanner to work on iOS [skip ci]
* bump monero_c hash
* bump monero_c commit
* bump moneroc version
* bump monero_c commit
* Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to .
* fix: wrong socket for old electrum nodes
* Fix unchecked wallet type call
* get App Dir correctly in default_settings_migration.dart
* handle previous issue with fetching linux documents directory [skip ci]
* backup fix
* fix NTFS issues
* Close the wallet when the wallet gets changed
* fix: double balance
* feat: node domain
* fix: menu name
* bump monero_c commit
* fix: update tip on set scanning
* fix: connection switching back and forth
* feat: check if node is electrs, and supports sp
* chore: fix build
* minor enhancements
* fixes and enhancements
* solve conflicts with main
* Only stop wallet on rename and delete
* fix: status toggle
* minor enhancement
* Monero.com fixes
* bump monero_c commit
* update sp_scanner to include windows and linux
* Update macOS build guide. Change brew dependencies for build unbound locally.
* fix conflicts and update macos build guide
* remove build cache when on gh actions
* update secure storage
* free up even more storage
* free up more storage
* Add initial wownero
* fix conflicts
* fix workflow issue
* build wownero
* ios and windows changes
* macos
* complete wownero flow (app side)
* add keychain group entitlement and update script for RunnerBase on macos
* update secure_storage version to 8.1.0 in configure.dart
* add wownero framework
* update ios builds
* proper path for wownero and monero
* finalizing wownero
* finalizing wownero
* free up even more storage
* revert commenting of build gradle configs
* revert commenting of secrets [skip ci]
* free more storage
* minor fixes
* link android wownero libraries
* bump monero_c commit
* wownero fixes
* rename target
* build_single.sh using clean env
* bump monero_c commit
* minor fix
* Add wownero polyseed
* fix conflicts with main
* fix: wallet seed display
fix: wownero not refreshing
* fix: wallet seed display
fix: wownero not refreshing
* bump monero_c commit
* minor fixes
* fix: incorrectly displaying XMR instead of WOW
* fix: incorrect restore height in wownero
* bump monero_c commit
* Add Inno Setup Script for windows exe installer
* drop libc++_shared.so
* fixes from comments
* Fix CMake for windows
* Merge latest monero dart changes [skip ci]
* bump monero_c commit
* add wownero to build scripts for macos [skip ci]
* add 14 word seed support to wownero
* UI fixes for wownero seed restore
* minor fixes
* reformat code to pass lints
* wownero: fixes
haven: removal popup
* minor iOS fix [skip ci]
* fix: wownero confirmation count (it is spendable after 3 confirms)
fix: transaction history not displaying in WOW and XMR
when tx has 0 confirms,
This is more of a workaround, because I have no idea
why would the cpp code not return pending transaction.
* Update preferences_key.dart [skip ci]
* minor fixes
---------
Co-authored-by: Rafael Saes <git@rafael.saes.dev>
Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net>
Co-authored-by: M <m@cakewallet.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
Co-authored-by: Matthew Fosse <matt@fosse.co>
2024-07-04 22:43:17 +03:00
|
|
|
final appDir = await getAppDir();
|
2023-08-15 03:47:25 +03:00
|
|
|
await CakeHive.close();
|
|
|
|
CakeHive.init(appDir.path);
|
2022-02-02 14:40:40 +02:00
|
|
|
|
2023-08-15 03:47:25 +03:00
|
|
|
if (!CakeHive.isAdapterRegistered(WalletInfo.typeId)) {
|
|
|
|
CakeHive.registerAdapter(WalletInfoAdapter());
|
2022-02-02 14:40:40 +02:00
|
|
|
}
|
|
|
|
|
2023-08-15 03:47:25 +03:00
|
|
|
return await CakeHive.openBox<WalletInfo>(WalletInfo.boxName);
|
2022-02-02 14:40:40 +02:00
|
|
|
}
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<void> importTransactionDescriptionDump() async {
|
2024-10-05 00:50:36 +03:00
|
|
|
final appDir = await getAppDir();
|
|
|
|
final transactionDescriptionFile = File('${appDir.path}/~_transaction_descriptions_dump');
|
|
|
|
|
|
|
|
if (!transactionDescriptionFile.existsSync()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
final jsonData =
|
|
|
|
json.decode(transactionDescriptionFile.readAsStringSync()) as Map<String, dynamic>;
|
|
|
|
final descriptionsMap = jsonData.map((key, value) =>
|
|
|
|
MapEntry(key, TransactionDescription.fromJson(value as Map<String, dynamic>)));
|
2025-03-22 02:16:54 +01:00
|
|
|
var box = transactionDescriptionBox;
|
2024-11-28 20:28:31 +01:00
|
|
|
if (!box.isOpen) {
|
2025-05-16 13:51:36 +03:00
|
|
|
final transactionDescriptionsBoxKey =
|
2024-11-28 20:28:31 +01:00
|
|
|
await getEncryptionKey(secureStorage: _secureStorage, forKey: TransactionDescription.boxKey);
|
|
|
|
box = await CakeHive.openBox<TransactionDescription>(
|
2024-10-16 19:27:04 +02:00
|
|
|
TransactionDescription.boxName,
|
2024-11-28 20:28:31 +01:00
|
|
|
encryptionKey: transactionDescriptionsBoxKey);
|
|
|
|
}
|
|
|
|
await box.putAll(descriptionsMap);
|
2024-10-05 00:50:36 +03:00
|
|
|
}
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<void> importPreferencesDump() async {
|
Wownero (#1485)
* fix: scanning issues
* fix: sync, storing silent unspents
* chore: deps
* fix: label issues, clear spent utxo
* chore: deps
* fix: build
* fix: missing types
* feat: new electrs API & changes, fixes for last block scanning
* feat: Scan Silent Payments homepage toggle
* chore: build configure
* feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes
* fix: invalid Object in sendData
* feat: improve addresses page & address book displays
* feat: silent payments labeled addresses disclaimer
* fix: missing i18n
* chore: print
* feat: single block scan, rescan by date working for btc mainnet
* feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert
* feat: delete silent addresses
* fix: red dot in non ssl nodes
* fix: inconsistent connection states, fix tx history
* fix: tx & balance displays, cpfp sending
* feat: new rust lib
* chore: node path
* fix: check node based on network
* fix: missing txcount from addresses
* style: padding in feature page cards
* fix: restore not getting all wallet addresses by type
* fix: auto switch node broken
* fix: silent payment txs not being restored
* feat: change scanning to subscription model, sync improvements
* fix: scan re-subscription
* fix: default nodes
* fix: improve scanning by date, fix single block scan
* refactor: common function for input tx selection
* various fixes for build issues
* initial monero.dart implementation
* ...
* multiple wallets
new lib
minor fixes
* other fixes from monero.dart and monero_c
* fix: nodes & build
* update build scripts
fix polyseed
* remove unnecessary code
* Add windows app, build scripts and build guide for it.
* Minor fix in generated monero configs
* fix: send all with multiple outs
* add missing monero_c command
* add android build script
* Merge and fix main
* undo android ndk removal
* Fix modified exception_handler.dart
* Temporarily remove haven
* fix build issues
* fix pr script
* Fixes for build monero.dart (monero_c) for windows.
* monero build script
* wip: ios build script
* refactor: unchanged file
* Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script.
* Update monero.dart and monero_c versions.
* Add missed windows build scripts
* Update the application configuration for windows build script.
* Update cw_monero pubspec lock file for monero.dart
* Update pr_test_build.yml
* chore: upgrade
* chore: merge changes
* refactor: unchanged files [skip ci]
* Fix conflicts with main
* fix for multiple wallets
* Add tron to windows application configuration.
* Add macOS option for description message in configure_cake_wallet.sh
* Include missed monero dll for windows.
* fix conflicts with main
* Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with for configuration script. Remove cw_shared configuration for cw_monero.
* fix: scan fixes, add date, allow sending while scanning
* add missing nano secrets file [skip ci]
* ios library
* don't pull prebuilds android
* Add auto generation of manifest file for android project even for iOS, macOS, Windows.
* feat: sync fixes, sp settings
* feat: fix resyncing
* store crash fix
* make init async so it won't lag
disable print starts
* fix monero_c build issues
* libstdc++
* Fix MacOS saving wallet file issue
Fix Secure Storage issue (somehow)
* update pubspec.lock
* fix build script
* Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet.
* fix: date from height logic, status disconnected & chain tip get
* fix: params
* feat: electrum migration if using cake electrum
* fix nodes
update versions
* re-enable tron
* update sp_scanner to work on iOS [skip ci]
* bump monero_c hash
* bump monero_c commit
* bump moneroc version
* bump monero_c commit
* Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to .
* fix: wrong socket for old electrum nodes
* Fix unchecked wallet type call
* get App Dir correctly in default_settings_migration.dart
* handle previous issue with fetching linux documents directory [skip ci]
* backup fix
* fix NTFS issues
* Close the wallet when the wallet gets changed
* fix: double balance
* feat: node domain
* fix: menu name
* bump monero_c commit
* fix: update tip on set scanning
* fix: connection switching back and forth
* feat: check if node is electrs, and supports sp
* chore: fix build
* minor enhancements
* fixes and enhancements
* solve conflicts with main
* Only stop wallet on rename and delete
* fix: status toggle
* minor enhancement
* Monero.com fixes
* bump monero_c commit
* update sp_scanner to include windows and linux
* Update macOS build guide. Change brew dependencies for build unbound locally.
* fix conflicts and update macos build guide
* remove build cache when on gh actions
* update secure storage
* free up even more storage
* free up more storage
* Add initial wownero
* fix conflicts
* fix workflow issue
* build wownero
* ios and windows changes
* macos
* complete wownero flow (app side)
* add keychain group entitlement and update script for RunnerBase on macos
* update secure_storage version to 8.1.0 in configure.dart
* add wownero framework
* update ios builds
* proper path for wownero and monero
* finalizing wownero
* finalizing wownero
* free up even more storage
* revert commenting of build gradle configs
* revert commenting of secrets [skip ci]
* free more storage
* minor fixes
* link android wownero libraries
* bump monero_c commit
* wownero fixes
* rename target
* build_single.sh using clean env
* bump monero_c commit
* minor fix
* Add wownero polyseed
* fix conflicts with main
* fix: wallet seed display
fix: wownero not refreshing
* fix: wallet seed display
fix: wownero not refreshing
* bump monero_c commit
* minor fixes
* fix: incorrectly displaying XMR instead of WOW
* fix: incorrect restore height in wownero
* bump monero_c commit
* Add Inno Setup Script for windows exe installer
* drop libc++_shared.so
* fixes from comments
* Fix CMake for windows
* Merge latest monero dart changes [skip ci]
* bump monero_c commit
* add wownero to build scripts for macos [skip ci]
* add 14 word seed support to wownero
* UI fixes for wownero seed restore
* minor fixes
* reformat code to pass lints
* wownero: fixes
haven: removal popup
* minor iOS fix [skip ci]
* fix: wownero confirmation count (it is spendable after 3 confirms)
fix: transaction history not displaying in WOW and XMR
when tx has 0 confirms,
This is more of a workaround, because I have no idea
why would the cpp code not return pending transaction.
* Update preferences_key.dart [skip ci]
* minor fixes
---------
Co-authored-by: Rafael Saes <git@rafael.saes.dev>
Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net>
Co-authored-by: M <m@cakewallet.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
Co-authored-by: Matthew Fosse <matt@fosse.co>
2024-07-04 22:43:17 +03:00
|
|
|
final appDir = await getAppDir();
|
2021-01-13 18:43:34 +02:00
|
|
|
final preferencesFile = File('${appDir.path}/~_preferences_dump');
|
|
|
|
|
|
|
|
if (!preferencesFile.existsSync()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2023-08-04 14:49:26 +01:00
|
|
|
final data = json.decode(preferencesFile.readAsStringSync()) as Map<String, dynamic>;
|
2025-04-19 01:13:37 +02:00
|
|
|
|
|
|
|
try { // shouldn't throw an error but just in case, so it doesn't stop the backup restore
|
|
|
|
for (var entry in data.entries) {
|
|
|
|
String key = entry.key;
|
|
|
|
dynamic value = entry.value;
|
|
|
|
|
|
|
|
// Check the type of the value and save accordingly
|
|
|
|
if (value is String) {
|
|
|
|
await sharedPreferences.setString(key, value);
|
|
|
|
} else if (value is int) {
|
|
|
|
await sharedPreferences.setInt(key, value);
|
|
|
|
} else if (value is double) {
|
|
|
|
await sharedPreferences.setDouble(key, value);
|
|
|
|
} else if (value is bool) {
|
|
|
|
await sharedPreferences.setBool(key, value);
|
|
|
|
} else if (value is List<String>) {
|
|
|
|
await sharedPreferences.setStringList(key, value);
|
|
|
|
} else {
|
|
|
|
if (kDebugMode) {
|
|
|
|
printV('Skipping individual save for key "$key": Unsupported type (${value.runtimeType}). Value: $value');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (_) {}
|
|
|
|
|
2022-02-02 14:40:40 +02:00
|
|
|
String currentWalletName = data[PreferencesKey.currentWalletName] as String;
|
|
|
|
int currentWalletType = data[PreferencesKey.currentWalletType] as int;
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
final isCorrentCurrentWallet = correctWallets
|
2023-08-04 14:49:26 +01:00
|
|
|
.any((info) => info.name == currentWalletName && info.type.index == currentWalletType);
|
2022-02-02 14:40:40 +02:00
|
|
|
|
|
|
|
if (!isCorrentCurrentWallet) {
|
2025-03-22 02:16:54 +01:00
|
|
|
currentWalletName = correctWallets.first.name;
|
|
|
|
currentWalletType = serializeToInt(correctWallets.first.type);
|
2022-02-02 14:40:40 +02:00
|
|
|
}
|
2021-01-13 18:43:34 +02:00
|
|
|
|
2025-04-19 01:13:37 +02:00
|
|
|
if (DeviceInfo.instance.isDesktop) {
|
2025-03-22 02:16:54 +01:00
|
|
|
await sharedPreferences.setInt(PreferencesKey.currentTheme, ThemeList.darkTheme.raw);
|
2023-11-14 15:56:36 -06:00
|
|
|
}
|
2022-10-18 11:38:54 -04:00
|
|
|
|
2021-01-13 18:43:34 +02:00
|
|
|
await preferencesFile.delete();
|
|
|
|
}
|
|
|
|
|
2022-10-26 15:28:27 -04:00
|
|
|
Future<void> _importKeychainDumpV1(String password,
|
2023-08-04 14:49:26 +01:00
|
|
|
{required String nonce, String keychainSalt = secrets.backupKeychainSalt}) async {
|
Wownero (#1485)
* fix: scanning issues
* fix: sync, storing silent unspents
* chore: deps
* fix: label issues, clear spent utxo
* chore: deps
* fix: build
* fix: missing types
* feat: new electrs API & changes, fixes for last block scanning
* feat: Scan Silent Payments homepage toggle
* chore: build configure
* feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes
* fix: invalid Object in sendData
* feat: improve addresses page & address book displays
* feat: silent payments labeled addresses disclaimer
* fix: missing i18n
* chore: print
* feat: single block scan, rescan by date working for btc mainnet
* feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert
* feat: delete silent addresses
* fix: red dot in non ssl nodes
* fix: inconsistent connection states, fix tx history
* fix: tx & balance displays, cpfp sending
* feat: new rust lib
* chore: node path
* fix: check node based on network
* fix: missing txcount from addresses
* style: padding in feature page cards
* fix: restore not getting all wallet addresses by type
* fix: auto switch node broken
* fix: silent payment txs not being restored
* feat: change scanning to subscription model, sync improvements
* fix: scan re-subscription
* fix: default nodes
* fix: improve scanning by date, fix single block scan
* refactor: common function for input tx selection
* various fixes for build issues
* initial monero.dart implementation
* ...
* multiple wallets
new lib
minor fixes
* other fixes from monero.dart and monero_c
* fix: nodes & build
* update build scripts
fix polyseed
* remove unnecessary code
* Add windows app, build scripts and build guide for it.
* Minor fix in generated monero configs
* fix: send all with multiple outs
* add missing monero_c command
* add android build script
* Merge and fix main
* undo android ndk removal
* Fix modified exception_handler.dart
* Temporarily remove haven
* fix build issues
* fix pr script
* Fixes for build monero.dart (monero_c) for windows.
* monero build script
* wip: ios build script
* refactor: unchanged file
* Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script.
* Update monero.dart and monero_c versions.
* Add missed windows build scripts
* Update the application configuration for windows build script.
* Update cw_monero pubspec lock file for monero.dart
* Update pr_test_build.yml
* chore: upgrade
* chore: merge changes
* refactor: unchanged files [skip ci]
* Fix conflicts with main
* fix for multiple wallets
* Add tron to windows application configuration.
* Add macOS option for description message in configure_cake_wallet.sh
* Include missed monero dll for windows.
* fix conflicts with main
* Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with for configuration script. Remove cw_shared configuration for cw_monero.
* fix: scan fixes, add date, allow sending while scanning
* add missing nano secrets file [skip ci]
* ios library
* don't pull prebuilds android
* Add auto generation of manifest file for android project even for iOS, macOS, Windows.
* feat: sync fixes, sp settings
* feat: fix resyncing
* store crash fix
* make init async so it won't lag
disable print starts
* fix monero_c build issues
* libstdc++
* Fix MacOS saving wallet file issue
Fix Secure Storage issue (somehow)
* update pubspec.lock
* fix build script
* Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet.
* fix: date from height logic, status disconnected & chain tip get
* fix: params
* feat: electrum migration if using cake electrum
* fix nodes
update versions
* re-enable tron
* update sp_scanner to work on iOS [skip ci]
* bump monero_c hash
* bump monero_c commit
* bump moneroc version
* bump monero_c commit
* Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to .
* fix: wrong socket for old electrum nodes
* Fix unchecked wallet type call
* get App Dir correctly in default_settings_migration.dart
* handle previous issue with fetching linux documents directory [skip ci]
* backup fix
* fix NTFS issues
* Close the wallet when the wallet gets changed
* fix: double balance
* feat: node domain
* fix: menu name
* bump monero_c commit
* fix: update tip on set scanning
* fix: connection switching back and forth
* feat: check if node is electrs, and supports sp
* chore: fix build
* minor enhancements
* fixes and enhancements
* solve conflicts with main
* Only stop wallet on rename and delete
* fix: status toggle
* minor enhancement
* Monero.com fixes
* bump monero_c commit
* update sp_scanner to include windows and linux
* Update macOS build guide. Change brew dependencies for build unbound locally.
* fix conflicts and update macos build guide
* remove build cache when on gh actions
* update secure storage
* free up even more storage
* free up more storage
* Add initial wownero
* fix conflicts
* fix workflow issue
* build wownero
* ios and windows changes
* macos
* complete wownero flow (app side)
* add keychain group entitlement and update script for RunnerBase on macos
* update secure_storage version to 8.1.0 in configure.dart
* add wownero framework
* update ios builds
* proper path for wownero and monero
* finalizing wownero
* finalizing wownero
* free up even more storage
* revert commenting of build gradle configs
* revert commenting of secrets [skip ci]
* free more storage
* minor fixes
* link android wownero libraries
* bump monero_c commit
* wownero fixes
* rename target
* build_single.sh using clean env
* bump monero_c commit
* minor fix
* Add wownero polyseed
* fix conflicts with main
* fix: wallet seed display
fix: wownero not refreshing
* fix: wallet seed display
fix: wownero not refreshing
* bump monero_c commit
* minor fixes
* fix: incorrectly displaying XMR instead of WOW
* fix: incorrect restore height in wownero
* bump monero_c commit
* Add Inno Setup Script for windows exe installer
* drop libc++_shared.so
* fixes from comments
* Fix CMake for windows
* Merge latest monero dart changes [skip ci]
* bump monero_c commit
* add wownero to build scripts for macos [skip ci]
* add 14 word seed support to wownero
* UI fixes for wownero seed restore
* minor fixes
* reformat code to pass lints
* wownero: fixes
haven: removal popup
* minor iOS fix [skip ci]
* fix: wownero confirmation count (it is spendable after 3 confirms)
fix: transaction history not displaying in WOW and XMR
when tx has 0 confirms,
This is more of a workaround, because I have no idea
why would the cpp code not return pending transaction.
* Update preferences_key.dart [skip ci]
* minor fixes
---------
Co-authored-by: Rafael Saes <git@rafael.saes.dev>
Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net>
Co-authored-by: M <m@cakewallet.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
Co-authored-by: Matthew Fosse <matt@fosse.co>
2024-07-04 22:43:17 +03:00
|
|
|
final appDir = await getAppDir();
|
2021-01-13 18:43:34 +02:00
|
|
|
final keychainDumpFile = File('${appDir.path}/~_keychain_dump');
|
2023-08-04 14:49:26 +01:00
|
|
|
final decryptedKeychainDumpFileData =
|
|
|
|
await _decryptV1(keychainDumpFile.readAsBytesSync(), '$keychainSalt$password', nonce);
|
|
|
|
final keychainJSON =
|
|
|
|
json.decode(utf8.decode(decryptedKeychainDumpFileData)) as Map<String, dynamic>;
|
2021-01-13 18:43:34 +02:00
|
|
|
final keychainWalletsInfo = keychainJSON['wallets'] as List;
|
|
|
|
final decodedPin = keychainJSON['pin'] as String;
|
|
|
|
final pinCodeKey = generateStoreKeyFor(key: SecretStoreKey.pinCodePassword);
|
2023-08-04 14:49:26 +01:00
|
|
|
final backupPasswordKey = generateStoreKeyFor(key: SecretStoreKey.backupPassword);
|
2021-01-15 19:41:30 +02:00
|
|
|
final backupPassword = keychainJSON[backupPasswordKey] as String;
|
|
|
|
|
2024-05-08 21:23:27 +01:00
|
|
|
await _secureStorage.write(key: backupPasswordKey, value: backupPassword);
|
2021-01-13 18:43:34 +02:00
|
|
|
|
|
|
|
keychainWalletsInfo.forEach((dynamic rawInfo) async {
|
|
|
|
final info = rawInfo as Map<String, dynamic>;
|
|
|
|
await importWalletKeychainInfo(info);
|
|
|
|
});
|
|
|
|
|
2024-05-08 21:23:27 +01:00
|
|
|
await _secureStorage.write(key: pinCodeKey, value: encodedPinCode(pin: decodedPin));
|
2021-01-13 18:43:34 +02:00
|
|
|
|
|
|
|
keychainDumpFile.deleteSync();
|
|
|
|
}
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<void> importKeychainDumpV2(String password,
|
2022-10-26 15:28:27 -04:00
|
|
|
{String keychainSalt = secrets.backupKeychainSalt}) async {
|
Wownero (#1485)
* fix: scanning issues
* fix: sync, storing silent unspents
* chore: deps
* fix: label issues, clear spent utxo
* chore: deps
* fix: build
* fix: missing types
* feat: new electrs API & changes, fixes for last block scanning
* feat: Scan Silent Payments homepage toggle
* chore: build configure
* feat: generic fixes, testnet UI improvements, useSSL on bitcoin nodes
* fix: invalid Object in sendData
* feat: improve addresses page & address book displays
* feat: silent payments labeled addresses disclaimer
* fix: missing i18n
* chore: print
* feat: single block scan, rescan by date working for btc mainnet
* feat: new cake features page replace market page, move sp scan toggle, auto switch node pop up alert
* feat: delete silent addresses
* fix: red dot in non ssl nodes
* fix: inconsistent connection states, fix tx history
* fix: tx & balance displays, cpfp sending
* feat: new rust lib
* chore: node path
* fix: check node based on network
* fix: missing txcount from addresses
* style: padding in feature page cards
* fix: restore not getting all wallet addresses by type
* fix: auto switch node broken
* fix: silent payment txs not being restored
* feat: change scanning to subscription model, sync improvements
* fix: scan re-subscription
* fix: default nodes
* fix: improve scanning by date, fix single block scan
* refactor: common function for input tx selection
* various fixes for build issues
* initial monero.dart implementation
* ...
* multiple wallets
new lib
minor fixes
* other fixes from monero.dart and monero_c
* fix: nodes & build
* update build scripts
fix polyseed
* remove unnecessary code
* Add windows app, build scripts and build guide for it.
* Minor fix in generated monero configs
* fix: send all with multiple outs
* add missing monero_c command
* add android build script
* Merge and fix main
* undo android ndk removal
* Fix modified exception_handler.dart
* Temporarily remove haven
* fix build issues
* fix pr script
* Fixes for build monero.dart (monero_c) for windows.
* monero build script
* wip: ios build script
* refactor: unchanged file
* Added build guides for iOS and macOS. Replaced nproc call on macOS. Added macOS configuration for configure_cake_wallet.sh script.
* Update monero.dart and monero_c versions.
* Add missed windows build scripts
* Update the application configuration for windows build script.
* Update cw_monero pubspec lock file for monero.dart
* Update pr_test_build.yml
* chore: upgrade
* chore: merge changes
* refactor: unchanged files [skip ci]
* Fix conflicts with main
* fix for multiple wallets
* Add tron to windows application configuration.
* Add macOS option for description message in configure_cake_wallet.sh
* Include missed monero dll for windows.
* fix conflicts with main
* Disable haven configuration for iOS as default. Add ability to configure cakewallet for iOS with for configuration script. Remove cw_shared configuration for cw_monero.
* fix: scan fixes, add date, allow sending while scanning
* add missing nano secrets file [skip ci]
* ios library
* don't pull prebuilds android
* Add auto generation of manifest file for android project even for iOS, macOS, Windows.
* feat: sync fixes, sp settings
* feat: fix resyncing
* store crash fix
* make init async so it won't lag
disable print starts
* fix monero_c build issues
* libstdc++
* Fix MacOS saving wallet file issue
Fix Secure Storage issue (somehow)
* update pubspec.lock
* fix build script
* Use dylib as iOS framework. Use custom path for loading of iOS framework for monero.dart. Add script for generate iOS framework for monero wallet.
* fix: date from height logic, status disconnected & chain tip get
* fix: params
* feat: electrum migration if using cake electrum
* fix nodes
update versions
* re-enable tron
* update sp_scanner to work on iOS [skip ci]
* bump monero_c hash
* bump monero_c commit
* bump moneroc version
* bump monero_c commit
* Add ability to build monero wallet lib as universal lib. Update macOS build guide. Change default arch for macOS project to .
* fix: wrong socket for old electrum nodes
* Fix unchecked wallet type call
* get App Dir correctly in default_settings_migration.dart
* handle previous issue with fetching linux documents directory [skip ci]
* backup fix
* fix NTFS issues
* Close the wallet when the wallet gets changed
* fix: double balance
* feat: node domain
* fix: menu name
* bump monero_c commit
* fix: update tip on set scanning
* fix: connection switching back and forth
* feat: check if node is electrs, and supports sp
* chore: fix build
* minor enhancements
* fixes and enhancements
* solve conflicts with main
* Only stop wallet on rename and delete
* fix: status toggle
* minor enhancement
* Monero.com fixes
* bump monero_c commit
* update sp_scanner to include windows and linux
* Update macOS build guide. Change brew dependencies for build unbound locally.
* fix conflicts and update macos build guide
* remove build cache when on gh actions
* update secure storage
* free up even more storage
* free up more storage
* Add initial wownero
* fix conflicts
* fix workflow issue
* build wownero
* ios and windows changes
* macos
* complete wownero flow (app side)
* add keychain group entitlement and update script for RunnerBase on macos
* update secure_storage version to 8.1.0 in configure.dart
* add wownero framework
* update ios builds
* proper path for wownero and monero
* finalizing wownero
* finalizing wownero
* free up even more storage
* revert commenting of build gradle configs
* revert commenting of secrets [skip ci]
* free more storage
* minor fixes
* link android wownero libraries
* bump monero_c commit
* wownero fixes
* rename target
* build_single.sh using clean env
* bump monero_c commit
* minor fix
* Add wownero polyseed
* fix conflicts with main
* fix: wallet seed display
fix: wownero not refreshing
* fix: wallet seed display
fix: wownero not refreshing
* bump monero_c commit
* minor fixes
* fix: incorrectly displaying XMR instead of WOW
* fix: incorrect restore height in wownero
* bump monero_c commit
* Add Inno Setup Script for windows exe installer
* drop libc++_shared.so
* fixes from comments
* Fix CMake for windows
* Merge latest monero dart changes [skip ci]
* bump monero_c commit
* add wownero to build scripts for macos [skip ci]
* add 14 word seed support to wownero
* UI fixes for wownero seed restore
* minor fixes
* reformat code to pass lints
* wownero: fixes
haven: removal popup
* minor iOS fix [skip ci]
* fix: wownero confirmation count (it is spendable after 3 confirms)
fix: transaction history not displaying in WOW and XMR
when tx has 0 confirms,
This is more of a workaround, because I have no idea
why would the cpp code not return pending transaction.
* Update preferences_key.dart [skip ci]
* minor fixes
---------
Co-authored-by: Rafael Saes <git@rafael.saes.dev>
Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net>
Co-authored-by: M <m@cakewallet.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
Co-authored-by: Matthew Fosse <matt@fosse.co>
2024-07-04 22:43:17 +03:00
|
|
|
final appDir = await getAppDir();
|
2022-10-26 15:28:27 -04:00
|
|
|
final keychainDumpFile = File('${appDir.path}/~_keychain_dump');
|
2023-08-04 14:49:26 +01:00
|
|
|
final decryptedKeychainDumpFileData =
|
2025-03-22 02:16:54 +01:00
|
|
|
await decryptV2(keychainDumpFile.readAsBytesSync(), '$keychainSalt$password');
|
2023-08-04 14:49:26 +01:00
|
|
|
final keychainJSON =
|
|
|
|
json.decode(utf8.decode(decryptedKeychainDumpFileData)) as Map<String, dynamic>;
|
2022-10-26 15:28:27 -04:00
|
|
|
final keychainWalletsInfo = keychainJSON['wallets'] as List;
|
2023-08-04 14:49:26 +01:00
|
|
|
final backupPasswordKey = generateStoreKeyFor(key: SecretStoreKey.backupPassword);
|
2022-10-26 15:28:27 -04:00
|
|
|
final backupPassword = keychainJSON[backupPasswordKey] as String;
|
|
|
|
|
2024-05-08 21:23:27 +01:00
|
|
|
await _secureStorage.write(key: backupPasswordKey, value: backupPassword);
|
2022-10-26 15:28:27 -04:00
|
|
|
|
|
|
|
keychainWalletsInfo.forEach((dynamic rawInfo) async {
|
|
|
|
final info = rawInfo as Map<String, dynamic>;
|
|
|
|
await importWalletKeychainInfo(info);
|
|
|
|
});
|
|
|
|
|
2025-05-16 13:51:36 +03:00
|
|
|
if (keychainJSON['_all'] is Map<String, dynamic>) {
|
|
|
|
for (var key in (keychainJSON['_all'] as Map<String, dynamic>).keys) {
|
|
|
|
try {
|
|
|
|
if (!key.startsWith('MONERO_WALLET_')) continue;
|
|
|
|
final decodedPassword = decodeWalletPassword(
|
|
|
|
password: keychainJSON['_all'][key].toString());
|
|
|
|
final walletName = key.split('_WALLET_')[1];
|
|
|
|
final walletType = key.split('_WALLET_')[0].toLowerCase();
|
|
|
|
await importWalletKeychainInfo({
|
|
|
|
'name': walletName,
|
|
|
|
'type': "WalletType.$walletType",
|
|
|
|
'password': decodedPassword,
|
|
|
|
});
|
|
|
|
} catch (e) {
|
|
|
|
printV('Error importing wallet ($key) password: $e');
|
|
|
|
}
|
2025-04-30 08:29:08 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-26 15:28:27 -04:00
|
|
|
keychainDumpFile.deleteSync();
|
|
|
|
}
|
|
|
|
|
2021-01-13 18:43:34 +02:00
|
|
|
Future<void> importWalletKeychainInfo(Map<String, dynamic> info) async {
|
|
|
|
final name = info['name'] as String;
|
|
|
|
final password = info['password'] as String;
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
await keyService.saveWalletPassword(walletName: name, password: password);
|
2021-01-13 18:43:34 +02:00
|
|
|
}
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<Uint8List> exportKeychainDumpV2(String password,
|
2022-10-26 15:28:27 -04:00
|
|
|
{String keychainSalt = secrets.backupKeychainSalt}) async {
|
2021-01-13 18:43:34 +02:00
|
|
|
final key = generateStoreKeyFor(key: SecretStoreKey.pinCodePassword);
|
2025-03-22 02:16:54 +01:00
|
|
|
final wallets = await Future.wait(walletInfoSource.values.map((walletInfo) async {
|
2025-04-22 21:41:31 +02:00
|
|
|
try {
|
|
|
|
return {
|
|
|
|
'name': walletInfo.name,
|
|
|
|
'type': walletInfo.type.toString(),
|
2025-06-17 00:31:49 +02:00
|
|
|
'password': await keyService.getWalletPassword(walletName: walletInfo.name),
|
|
|
|
'hardwareWalletType': walletInfo.hardwareWalletType?.index,
|
2025-04-22 21:41:31 +02:00
|
|
|
};
|
|
|
|
} catch (e) {
|
|
|
|
return {
|
|
|
|
'name': walletInfo.name,
|
|
|
|
'type': walletInfo.type.toString(),
|
2025-06-17 00:31:49 +02:00
|
|
|
'password': '',
|
|
|
|
'hardwareWalletType': walletInfo.hardwareWalletType?.index,
|
2025-04-22 21:41:31 +02:00
|
|
|
};
|
|
|
|
}
|
2021-01-13 18:43:34 +02:00
|
|
|
}));
|
2023-08-04 14:49:26 +01:00
|
|
|
final backupPasswordKey = generateStoreKeyFor(key: SecretStoreKey.backupPassword);
|
2024-05-08 21:23:27 +01:00
|
|
|
final backupPassword = await _secureStorage.read(key: backupPasswordKey);
|
2023-08-04 14:49:26 +01:00
|
|
|
final data = utf8.encode(
|
2025-04-22 21:41:31 +02:00
|
|
|
json.encode({'wallets': wallets, backupPasswordKey: backupPassword, '_all': await _secureStorage.readAll()}));
|
2023-08-04 14:49:26 +01:00
|
|
|
final encrypted = await _encryptV2(Uint8List.fromList(data), '$keychainSalt$password');
|
2021-01-13 18:43:34 +02:00
|
|
|
|
|
|
|
return encrypted;
|
|
|
|
}
|
|
|
|
|
2025-04-19 01:13:37 +02:00
|
|
|
static const List<String> _excludedPrefsKeys = [
|
|
|
|
PreferencesKey.currentPinLength,
|
|
|
|
PreferencesKey.showCameraConsent,
|
|
|
|
PreferencesKey.lastSeenAppVersion,
|
|
|
|
PreferencesKey.failedTotpTokenTrials,
|
|
|
|
];
|
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<String> exportPreferencesJSON() async {
|
2025-04-19 01:13:37 +02:00
|
|
|
final preferences = <String, dynamic>{};
|
|
|
|
sharedPreferences.getKeys().forEach((key) => preferences[key] = sharedPreferences.get(key));
|
|
|
|
|
|
|
|
_excludedPrefsKeys.forEach((key) => preferences.remove(key));
|
2021-01-13 18:43:34 +02:00
|
|
|
|
|
|
|
return json.encode(preferences);
|
|
|
|
}
|
|
|
|
|
2021-01-15 19:41:30 +02:00
|
|
|
int getVersion(Uint8List data) => data.toList().first;
|
|
|
|
|
|
|
|
Uint8List setVersion(Uint8List data, int version) {
|
|
|
|
final bytes = data.toList()..insert(0, version);
|
|
|
|
return Uint8List.fromList(bytes);
|
|
|
|
}
|
|
|
|
|
2023-08-04 14:49:26 +01:00
|
|
|
Future<Uint8List> _decryptV1(Uint8List data, String secretKeySource, String nonceBase64,
|
|
|
|
{int macLength = 16}) async {
|
2022-10-18 11:38:54 -04:00
|
|
|
final secretKeyHash = await Cryptography.instance.sha256().hash(utf8.encode(secretKeySource));
|
|
|
|
final secretKey = SecretKey(secretKeyHash.bytes);
|
|
|
|
final nonce = base64.decode(nonceBase64).toList();
|
2023-08-04 14:49:26 +01:00
|
|
|
final box = SecretBox(Uint8List.sublistView(data, 0, data.lengthInBytes - macLength).toList(),
|
|
|
|
nonce: nonce, mac: Mac(Uint8List.sublistView(data, data.lengthInBytes - macLength)));
|
2025-03-22 02:16:54 +01:00
|
|
|
final plainData = await cipher.decrypt(box, secretKey: secretKey);
|
2022-10-18 11:38:54 -04:00
|
|
|
return Uint8List.fromList(plainData);
|
2021-01-13 18:43:34 +02:00
|
|
|
}
|
2022-10-26 15:28:27 -04:00
|
|
|
|
2023-08-04 14:49:26 +01:00
|
|
|
Future<Uint8List> _encryptV2(Uint8List data, String passphrase) async =>
|
|
|
|
cake_backup.encrypt(passphrase, data, version: _v2);
|
2022-10-26 15:28:27 -04:00
|
|
|
|
2025-03-22 02:16:54 +01:00
|
|
|
Future<Uint8List> decryptV2(Uint8List data, String passphrase) async =>
|
2023-08-04 14:49:26 +01:00
|
|
|
cake_backup.decrypt(passphrase, data);
|
2021-01-13 18:43:34 +02:00
|
|
|
}
|