From d952695917f9acb12c651bde5f73e661ba97e586 Mon Sep 17 00:00:00 2001 From: nsjames Date: Sat, 28 Sep 2019 12:19:57 +0300 Subject: [PATCH] work --- electron/app.js | 8 +- electron/hardware/LedgerWallet.js | 18 +- electron/services/storage.js | 4 - electron/services/wallet.js | 26 +- html/index.html | 112 +++-- package.json | 17 +- preload.js | 24 +- test/mock.password.js | 1 + test/mock.scatter.js | 47 ++ test/mock.storage.js | 44 ++ test/unit/wallet.spec.js | 82 ++++ yarn.lock | 703 +++++++++++++++++++++++------- 12 files changed, 851 insertions(+), 235 deletions(-) create mode 100644 test/mock.password.js create mode 100644 test/mock.scatter.js create mode 100644 test/mock.storage.js create mode 100644 test/unit/wallet.spec.js diff --git a/electron/app.js b/electron/app.js index 90750a4a..7818d377 100644 --- a/electron/app.js +++ b/electron/app.js @@ -196,6 +196,9 @@ const storage = require('./services/storage'); const files = require('./services/files'); const windows = require('./services/windows'); +wallet.setStorage(storage); +wallet.init(); + let multipartPromises = {}; @@ -250,11 +253,11 @@ global.wallet = { /************************************/ utility:{ openTools:(windowId = null) => { + console.log('opening tools', windowId); (windowId ? BrowserWindow.fromId(windowId) : mainWindow).webContents.send('openTools'); }, closeWindow:(windowId = null) => { - const w = windowId ? BrowserWindow.fromId(windowId) : mainWindow; - w.close() + (windowId ? BrowserWindow.fromId(windowId) : mainWindow).close() }, flashWindow:() => console.error('flashing not implemented'), openLink:(link, filepath = false) => { @@ -279,6 +282,7 @@ global.wallet = { delete multipartPromises[original.id]; }, socketResponse:() => {}, + pushNotification:NotificationService.pushNotification }, sockets:HighLevelSockets, diff --git a/electron/hardware/LedgerWallet.js b/electron/hardware/LedgerWallet.js index 8567becb..6e849258 100644 --- a/electron/hardware/LedgerWallet.js +++ b/electron/hardware/LedgerWallet.js @@ -1,9 +1,13 @@ const bippath = require('bip32-path'); -const {Blockchains} = require('@walletpack/core/models/Blockchains'); + +const Blockchains = { + EOSIO:'eos', + ETH:'eth', +} const asn1 = require('asn1-ber'); const ecc = require('eosjs-ecc'); -const { Serialize } = require('eosjs'); +const { Serialize, Api } = require('eosjs'); const EthTx = require('ethereumjs-tx') const Eth = require("@ledgerhq/hw-app-eth"); @@ -38,19 +42,15 @@ const LEDGER_PATHS = { [Blockchains.ETH]:(index = 0) => `44'/60'/0'/0/${index}`, } - - let encoderOptions, eosjsUtil; + class LedgerWallet { static setup(){ LedgerTransport.setup(); - const EosPlugin = require('@walletpack/eosio'); - if(EosPlugin){ - encoderOptions = EosPlugin.encoderOptions; - eosjsUtil = EosPlugin.eosjsUtil; - } + encoderOptions = TextEncoder ? {textEncoder:new require('util').TextEncoder(), textDecoder:new require('util').TextDecoder()} : {}; + eosjsUtil = new Api(encoderOptions); } constructor(blockchain){ diff --git a/electron/services/storage.js b/electron/services/storage.js index 60a636aa..10a1b276 100644 --- a/electron/services/storage.js +++ b/electron/services/storage.js @@ -93,10 +93,6 @@ let getSeed; const getSeedSetter = (seeder) => getSeed = seeder; const AES = require("aes-oop").default; -const HistoricTransfer = require('@walletpack/core/models/histories/HistoricTransfer').default; -const HistoricExchange = require('@walletpack/core/models/histories/HistoricTransfer').default; -const HistoricAction = require('@walletpack/core/models/histories/HistoricTransfer').default; -const {HISTORY_TYPES} = require('@walletpack/core/models/histories/History'); const cacheABI = (contractName, chainId, abi) =>{ return abiStorage().set(`abis.${contractName}_${chainId}`, abi); diff --git a/electron/services/wallet.js b/electron/services/wallet.js index d56846f2..efcd29bb 100644 --- a/electron/services/wallet.js +++ b/electron/services/wallet.js @@ -7,16 +7,12 @@ const {ipcMain} = require("electron"); const bip39 = require('bip39'); const scrypt = require('scrypt-async'); const AES = require("aes-oop").default; -const storage = require('./storage') const path = require('path') -const Scatter = require('@walletpack/core/models/Scatter').default; const Error = require('@walletpack/core/models/errors/Error').default; const IdGenerator = require('@walletpack/core/util/IdGenerator').default; const Hasher = require('@walletpack/core/util/Hasher').default; -const Keypair = require('@walletpack/core/models/Keypair').default; -const Crypto = require('@walletpack/core/util/Crypto').default; - +// TODO: Changing to curve-based const EOSIO = require('@walletpack/eosio').default; const TRON = require('@walletpack/tron').default; const BITCOIN = require('@walletpack/bitcoin').default; @@ -30,12 +26,17 @@ const plugins = { } -let seed, salt; -let scatter = storage.getScatter(); +let seed, salt, scatter, storage; -salt = storage.getSalt(); +// Storage is not set by default, this allows +// changing the storage mechanism for testing purposes. +const setStorage = _s => storage = _s; -storage.getSeedSetter(() => seed); +const init = () => { + scatter = storage.getScatter(); + salt = storage.getSalt(); + storage.getSeedSetter(() => seed); +} const setScatter = (_s) => scatter = JSON.parse(JSON.stringify(_s)); @@ -100,8 +101,9 @@ const changePassword = async (newPassword) => { }); await updateScatter(clone); - resolve(true); + return true; + // TODO:! need to reseed other storages as well // await StoreService.get().dispatch(Actions.SET_SCATTER, scatter); // await StorageService.swapHistory(StoreService.get().state.history); // await StorageService.setTranslation(Locale.fromJson(StoreService.get().state.language.json)); @@ -143,8 +145,6 @@ const getPrivateKey = async (keypairId, blockchain) => { let keypair = scatter.keychain.keypairs.find(x => x.id === keypairId); if(!keypair) return; - keypair = Keypair.fromJson(keypair); - const encryptedKey = JSON.parse(JSON.stringify(keypair.privateKey)); const decryptedKey = AES.decrypt(encryptedKey, seed); @@ -269,6 +269,8 @@ const decrypt = data => AES.decrypt(data, seed); const getSeed = () => seed; module.exports = { + setStorage, + init, exists, updateScatter, setScatter, diff --git a/html/index.html b/html/index.html index a8d4c11e..ee72ca55 100644 --- a/html/index.html +++ b/html/index.html @@ -129,11 +129,20 @@ + + + + + +
-