From ad3fa24a28c0ec45dca43a257005626a4027487a Mon Sep 17 00:00:00 2001 From: Kevin Serrano Date: Wed, 19 Oct 2016 14:55:08 -0700 Subject: [PATCH] Intermediary commit. --- app/scripts/keyring-controller.js | 37 ++++++++++++++++--- app/scripts/lib/config-manager.js | 11 ++++++ mock-dev.js | 2 +- package.json | 2 +- test/unit/actions/restore_vault_test.js | 2 +- test/unit/actions/tx_test.js | 8 ++--- ui-dev.js | 2 +- ui/app/actions.js | 48 ++++++++++++------------- ui/index.js | 2 +- 9 files changed, 77 insertions(+), 37 deletions(-) diff --git a/app/scripts/keyring-controller.js b/app/scripts/keyring-controller.js index 246a45484..db7e5e61e 100644 --- a/app/scripts/keyring-controller.js +++ b/app/scripts/keyring-controller.js @@ -1,5 +1,7 @@ -const configManager = require('./lib/config-manager') const EventEmitter = require('events').EventEmitter +const encryptor = require('./lib/encryptor') +const messageManager = require('./lib/message-manager') + module.exports = class KeyringController extends EventEmitter { @@ -20,7 +22,7 @@ module.exports = class KeyringController extends EventEmitter { if (!salt) { salt = generateSalt(32) - configManager.setSalt(salt) + this.configManager.setSalt(salt) } var logN = 14 @@ -42,7 +44,21 @@ module.exports = class KeyringController extends EventEmitter { } getState() { - return {} + return { + isInitialized: !!this.key, + isUnlocked: !!this.key, + isConfirmed: true, // this.configManager.getConfirmed(), + isEthConfirmed: this.configManager.getShouldntShowWarning(), + unconfTxs: this.configManager.unconfirmedTxs(), + transactions: this.configManager.getTxList(), + unconfMsgs: messageManager.unconfirmedMsgs(), + messages: messageManager.getMsgList(), + selectedAddress: this.configManager.getSelectedAccount(), + shapeShiftTxList: this.configManager.getShapeShiftTxList(), + currentFiat: this.configManager.getCurrentFiat(), + conversionRate: this.configManager.getConversionRate(), + conversionDate: this.configManager.getConversionDate(), + } } setStore(ethStore) { @@ -50,9 +66,22 @@ module.exports = class KeyringController extends EventEmitter { } createNewVault(password, entropy, cb) { - cb() + encryptor.keyFromPassword(password) + .then((key) => { + this.key = key + return encryptor.encryptWithKey(key, {}) + }) + .then((encryptedString) => { + this.configManager.setVault(encryptedString) + cb(null, []) + }) + .catch((err) => { + cb(err) + }) } + + submitPassword(password, cb) { cb() } diff --git a/app/scripts/lib/config-manager.js b/app/scripts/lib/config-manager.js index d775e73fd..1c0e3b696 100644 --- a/app/scripts/lib/config-manager.js +++ b/app/scripts/lib/config-manager.js @@ -110,6 +110,17 @@ ConfigManager.prototype.setWallet = function (wallet) { this.setData(data) } +ConfigManager.prototype.setVault = function (encryptedString) { + var data = this.getData() + data.vault = encryptedString + this.setData(data) +} + +ConfigManager.prototype.getVault = function () { + var data = this.getData() + return ('vault' in data) && data.vault +} + ConfigManager.prototype.getKeychains = function () { return this.migrator.getData().keychains || [] } diff --git a/mock-dev.js b/mock-dev.js index 99b846e51..d3f364d69 100644 --- a/mock-dev.js +++ b/mock-dev.js @@ -107,7 +107,7 @@ function getOldStyleData () { return result } -actions._setAccountManager(controller.getApi()) +actions._setKeyringController(controller.getApi()) actions.update = function(stateName) { selectedView = stateName updateQueryParams(stateName) diff --git a/package.json b/package.json index b654a6402..53de07e4f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "start": "gulp dev", "lint": "gulp lint", - "dev": "gulp dev", + "dev": "gulp dev --debug", "dist": "gulp dist", "buildCiUnits": "node test/integration/index.js", "test": "npm run fastTest && npm run ci && npm run lint", diff --git a/test/unit/actions/restore_vault_test.js b/test/unit/actions/restore_vault_test.js index 609f5429e..7202abb70 100644 --- a/test/unit/actions/restore_vault_test.js +++ b/test/unit/actions/restore_vault_test.js @@ -20,7 +20,7 @@ describe('#recoverFromSeed(password, seed)', function() { }) // stub out account manager - actions._setAccountManager({ + actions._setKeyringController({ recoverFromSeed(pw, seed, cb) { cb(null, { identities: { diff --git a/test/unit/actions/tx_test.js b/test/unit/actions/tx_test.js index c08a8aa26..e365ee3a3 100644 --- a/test/unit/actions/tx_test.js +++ b/test/unit/actions/tx_test.js @@ -46,7 +46,7 @@ describe('tx confirmation screen', function() { describe('cancelTx', function() { before(function(done) { - actions._setAccountManager({ + actions._setKeyringController({ approveTransaction(txId, cb) { cb('An error!') }, cancelTransaction(txId) { /* noop */ }, clearSeedWordCache(cb) { cb() }, @@ -75,7 +75,7 @@ describe('tx confirmation screen', function() { before(function(done) { alert = () => {/* noop */} - actions._setAccountManager({ + actions._setKeyringController({ approveTransaction(txId, cb) { cb({message: 'An error!'}) }, }) @@ -96,7 +96,7 @@ describe('tx confirmation screen', function() { describe('when there is success', function() { it('should complete tx and go home', function() { - actions._setAccountManager({ + actions._setKeyringController({ approveTransaction(txId, cb) { cb() }, }) @@ -135,7 +135,7 @@ describe('tx confirmation screen', function() { } freeze(initialState) - actions._setAccountManager({ + actions._setKeyringController({ approveTransaction(txId, cb) { cb() }, }) diff --git a/ui-dev.js b/ui-dev.js index bfc84d415..9fc344f98 100644 --- a/ui-dev.js +++ b/ui-dev.js @@ -41,7 +41,7 @@ function updateQueryParams(newView) { } const actions = { - _setAccountManager(){}, + _setKeyringController(){}, update: function(stateName) { selectedView = stateName updateQueryParams(stateName) diff --git a/ui/app/actions.js b/ui/app/actions.js index bcae784d3..a594fa321 100644 --- a/ui/app/actions.js +++ b/ui/app/actions.js @@ -95,7 +95,7 @@ var actions = { setRpcTarget: setRpcTarget, setProviderType: setProviderType, // hacky - need a way to get a reference to account manager - _setAccountManager: _setAccountManager, + _setKeyringController: _setKeyringController, // loading overlay SHOW_LOADING: 'SHOW_LOADING_INDICATION', HIDE_LOADING: 'HIDE_LOADING_INDICATION', @@ -140,9 +140,9 @@ var actions = { module.exports = actions -var _accountManager = null -function _setAccountManager (accountManager) { - _accountManager = accountManager +var _keyringController = null +function _setKeyringController (accountManager) { + _keyringController = accountManager } function goHome () { @@ -157,7 +157,7 @@ function tryUnlockMetamask (password) { return (dispatch) => { dispatch(actions.showLoadingIndication()) dispatch(actions.unlockInProgress()) - _accountManager.submitPassword(password, (err, selectedAccount) => { + _keyringController.submitPassword(password, (err, selectedAccount) => { dispatch(actions.hideLoadingIndication()) if (err) { dispatch(actions.unlockFailed()) @@ -171,11 +171,11 @@ function tryUnlockMetamask (password) { function createNewVault (password, entropy) { return (dispatch) => { dispatch(actions.createNewVaultInProgress()) - _accountManager.createNewVault(password, entropy, (err, result) => { + _keyringController.createNewVault(password, entropy, (err, result) => { if (err) { return dispatch(actions.showWarning(err.message)) } - dispatch(this.goHome()) + dispatch(this.showAccountsPage()) dispatch(this.hideLoadingIndication()) }) } @@ -189,14 +189,14 @@ function showInfoPage () { function setSelectedAddress (address) { return (dispatch) => { - _accountManager.setSelectedAddress(address) + _keyringController.setSelectedAddress(address) } } function setCurrentFiat (fiat) { return (dispatch) => { dispatch(this.showLoadingIndication()) - _accountManager.setCurrentFiat(fiat, (data, err) => { + _keyringController.setCurrentFiat(fiat, (data, err) => { dispatch(this.hideLoadingIndication()) dispatch({ type: this.SET_CURRENT_FIAT, @@ -214,7 +214,7 @@ function signMsg (msgData) { return (dispatch) => { dispatch(actions.showLoadingIndication()) - _accountManager.signMessage(msgData, (err) => { + _keyringController.signMessage(msgData, (err) => { dispatch(actions.hideLoadingIndication()) if (err) return dispatch(actions.displayWarning(err.message)) @@ -238,7 +238,7 @@ function signTx (txData) { function sendTx (txData) { return (dispatch) => { - _accountManager.approveTransaction(txData.id, (err) => { + _keyringController.approveTransaction(txData.id, (err) => { if (err) { alert(err.message) dispatch(actions.txError(err)) @@ -264,12 +264,12 @@ function txError (err) { } function cancelMsg (msgData) { - _accountManager.cancelMessage(msgData.id) + _keyringController.cancelMessage(msgData.id) return actions.completedTx(msgData.id) } function cancelTx (txData) { - _accountManager.cancelTransaction(txData.id) + _keyringController.cancelTransaction(txData.id) return actions.completedTx(txData.id) } @@ -298,7 +298,7 @@ function showInitializeMenu () { function agreeToDisclaimer () { return (dispatch) => { dispatch(this.showLoadingIndication()) - _accountManager.agreeToDisclaimer((err) => { + _keyringController.agreeToDisclaimer((err) => { if (err) { return dispatch(actions.showWarning(err.message)) } @@ -368,7 +368,7 @@ function updateMetamaskState (newState) { function lockMetamask () { return (dispatch) => { - _accountManager.setLocked((err) => { + _keyringController.setLocked((err) => { dispatch(actions.hideLoadingIndication()) if (err) { return dispatch(actions.showWarning(err.message)) @@ -384,7 +384,7 @@ function lockMetamask () { function showAccountDetail (address) { return (dispatch) => { dispatch(actions.showLoadingIndication()) - _accountManager.setSelectedAddress(address, (err, address) => { + _keyringController.setSelectedAddress(address, (err, address) => { dispatch(actions.hideLoadingIndication()) if (err) { return dispatch(actions.showWarning(err.message)) @@ -455,7 +455,7 @@ function goBackToInitView () { // function setRpcTarget (newRpc) { - _accountManager.setRpcTarget(newRpc) + _keyringController.setRpcTarget(newRpc) return { type: actions.SET_RPC_TARGET, value: newRpc, @@ -463,7 +463,7 @@ function setRpcTarget (newRpc) { } function setProviderType (type) { - _accountManager.setProviderType(type) + _keyringController.setProviderType(type) return { type: actions.SET_PROVIDER_TYPE, value: type, @@ -471,7 +471,7 @@ function setProviderType (type) { } function useEtherscanProvider () { - _accountManager.useEtherscanProvider() + _keyringController.useEtherscanProvider() return { type: actions.USE_ETHERSCAN_PROVIDER, } @@ -530,7 +530,7 @@ function exportAccount (address) { return function (dispatch) { dispatch(self.showLoadingIndication()) - _accountManager.exportAccount(address, function (err, result) { + _keyringController.exportAccount(address, function (err, result) { dispatch(self.hideLoadingIndication()) if (err) { @@ -553,7 +553,7 @@ function showPrivateKey (key) { function saveAccountLabel (account, label) { return (dispatch) => { dispatch(actions.showLoadingIndication()) - _accountManager.saveAccountLabel(account, label, (err) => { + _keyringController.saveAccountLabel(account, label, (err) => { dispatch(actions.hideLoadingIndication()) if (err) { return dispatch(actions.showWarning(err.message)) @@ -574,7 +574,7 @@ function showSendPage () { function agreeToEthWarning () { return (dispatch) => { - _accountManager.agreeToEthWarning((err) => { + _keyringController.agreeToEthWarning((err) => { if (err) { return dispatch(actions.showEthWarning(err.message)) } @@ -593,7 +593,7 @@ function showEthWarning () { function buyEth (address, amount) { return (dispatch) => { - _accountManager.buyEth(address, amount) + _keyringController.buyEth(address, amount) dispatch({ type: actions.BUY_ETH, }) @@ -671,7 +671,7 @@ function coinShiftRquest (data, marketData) { if (response.error) return dispatch(actions.showWarning(response.error)) var message = ` Deposit your ${response.depositType} to the address bellow:` - _accountManager.createShapeShiftTx(response.deposit, response.depositType) + _keyringController.createShapeShiftTx(response.deposit, response.depositType) dispatch(actions.showQrView(response.deposit, [message].concat(marketData))) }) } diff --git a/ui/index.js b/ui/index.js index a6905b639..f07a4006c 100644 --- a/ui/index.js +++ b/ui/index.js @@ -8,7 +8,7 @@ module.exports = launchApp function launchApp (opts) { var accountManager = opts.accountManager - actions._setAccountManager(accountManager) + actions._setKeyringController(accountManager) // check if we are unlocked first accountManager.getState(function (err, metamaskState) {