From b4a5c9212ff4d2ef0b007cfa2e77654918c9c8ad Mon Sep 17 00:00:00 2001 From: Javier Date: Thu, 16 Jun 2016 14:43:10 -0300 Subject: [PATCH] refactor --- public/views/backup.html | 14 +--- public/views/export.html | 4 +- src/js/controllers/backup.js | 151 ++++++++++++++--------------------- src/js/controllers/export.js | 14 +++- 4 files changed, 73 insertions(+), 110 deletions(-) diff --git a/public/views/backup.html b/public/views/backup.html index ec7d46698..1543c0a9d 100644 --- a/public/views/backup.html +++ b/public/views/backup.html @@ -11,7 +11,7 @@
- + @@ -31,7 +31,7 @@
-
+
Write your wallet recovery phrase
@@ -62,20 +62,12 @@
-
+

You need the wallet recovery phrase to restore this personal wallet. Write it down and keep them somewhere safe.

-
diff --git a/public/views/export.html b/public/views/export.html index 75a4aaa4f..a00bc94df 100644 --- a/public/views/export.html +++ b/public/views/export.html @@ -4,7 +4,7 @@ ng-init="titleSection='Export Wallet'; goBackToState = 'preferencesAdvanced'">
-
+

@@ -21,7 +21,7 @@
-
+
diff --git a/src/js/controllers/backup.js b/src/js/controllers/backup.js index ffcb87bc6..320144800 100644 --- a/src/js/controllers/backup.js +++ b/src/js/controllers/backup.js @@ -7,47 +7,59 @@ angular.module('copayApp.controllers').controller('backupController', var prevState; $scope.customWords = []; $scope.walletName = fc.credentials.walletName; + $scope.credentialsEncrypted = fc.isPrivKeyEncrypted; - var handleEncryptedWallet = function(client, cb) { - if (!walletService.isEncrypted(client)) return cb(); - $rootScope.$emit('Local/NeedsPassword', false, function(err, password) { - if (err) return cb(err); - return cb(walletService.unlock(client, password)); + $scope.init = function(state) { + prevState = state || 'walletHome'; + $scope.step = 1; + $scope.deleted = isDeletedSeed(); + if ($scope.deleted) return; + + fingerprintService.check(fc, function(err) { + if (err) { + go.path(prevState); + return; + } + + handleEncryptedWallet(fc, function(err) { + if (err) { + $scope.error = bwsError.msg(err, gettext('Could not decrypt')); + $log.warn('Error decrypting credentials:', $scope.error); + return; + } + $scope.credentialsEncrypted = false; + $scope.initFlow(); + }); }); }; - if (fc.isPrivKeyEncrypted() && !isDeletedSeed()) { - $scope.credentialsEncrypted = true; - passwordRequest(); - } else { - if (!isDeletedSeed()) - initWords(); - } + function shuffledWords(words) { + var sort = lodash.sortBy(words); - $scope.init = function(state) { - prevState = state; - $scope.passphrase = ''; + return lodash.map(sort, function(w) { + return { + word: w, + selected: false + }; + }); + }; + + $scope.initFlow = function() { + var words = fc.getMnemonic(); + $scope.xPrivKey = fc.credentials.xPrivKey; + $scope.mnemonicWords = words.split(/[\u3000\s]+/); $scope.shuffledMnemonicWords = shuffledWords($scope.mnemonicWords); + $scope.mnemonicHasPassphrase = fc.mnemonicHasPassphrase(); + $scope.useIdeograms = words.indexOf("\u3000") >= 0; + $scope.passphrase = ''; $scope.customWords = []; $scope.step = 1; - $scope.deleted = isDeletedSeed(); - $scope.credentialsEncrypted = false; $scope.selectComplete = false; $scope.backupError = false; - if (!platformInfo.isCordova) return; - if (isDeletedSeed()) return; - - var config = configService.getSync(); - var touchidAvailable = fingerprintService.isAvailable(); - var touchidEnabled = config.touchIdFor ? config.touchIdFor[fc.credentials.walletId] : null; - - if (!touchidAvailable || !touchidEnabled) return; - - fingerprintService.check(fc, function(err) { - if (err) - go.path(prevState); - }); + $timeout(function() { + $scope.$apply(); + }, 10); }; function isDeletedSeed() { @@ -56,13 +68,14 @@ angular.module('copayApp.controllers').controller('backupController', return false; }; - $scope.backTo = function() { - go.path(prevState); + $scope.goBack = function() { + walletService.lock(fc); + go.path(prevState || 'walletHome'); }; $scope.goToStep = function(n) { if (n == 1) - $scope.init(); + $scope.initFlow(); if (n == 2) $scope.step = 2; if (n == 3) { @@ -89,66 +102,6 @@ angular.module('copayApp.controllers').controller('backupController', }; }; - function initWords() { - var words = fc.getMnemonic(); - $scope.xPrivKey = fc.credentials.xPrivKey; - walletService.lock(fc); - $scope.mnemonicWords = words.split(/[\u3000\s]+/); - $scope.shuffledMnemonicWords = shuffledWords($scope.mnemonicWords); - $scope.mnemonicHasPassphrase = fc.mnemonicHasPassphrase(); - $scope.useIdeograms = words.indexOf("\u3000") >= 0; - }; - - function shuffledWords(words) { - var sort = lodash.sortBy(words); - - return lodash.map(sort, function(w) { - return { - word: w, - selected: false - }; - }); - }; - - $scope.toggle = function() { - $scope.error = ""; - - if ($scope.credentialsEncrypted) - passwordRequest(); - - $timeout(function() { - $scope.$apply(); - }, 1); - }; - - function passwordRequest() { - try { - initWords(); - } catch (e) { - if (e.message && e.message.match(/encrypted/) && fc.isPrivKeyEncrypted()) { - - $timeout(function() { - $scope.$apply(); - }, 1); - - handleEncryptedWallet(fc, function(err) { - if (err) { - $scope.error = bwsError.msg(err, gettext('Could not decrypt')); - $log.warn('Error decrypting credentials:', $scope.error); //TODO - return; - } - - $scope.credentialsEncrypted = false; - initWords(); - - $timeout(function() { - $scope.$apply(); - }, 1); - }); - } - } - }; - $scope.addButton = function(index, item) { var newWord = { word: item.word, @@ -209,6 +162,18 @@ angular.module('copayApp.controllers').controller('backupController', }, 1); }; + function handleEncryptedWallet(client, cb) { + if (!walletService.isEncrypted(client)) { + $scope.credentialsEncrypted = false; + return cb(); + } + + $rootScope.$emit('Local/NeedsPassword', false, function(err, password) { + if (err) return cb(err); + return cb(walletService.unlock(client, password)); + }); + }; + function backupError(err) { ongoingProcess.set('validatingWords', false); $log.debug('Failed to verify backup: ', err); diff --git a/src/js/controllers/export.js b/src/js/controllers/export.js index be7b6dcc7..5de429aa9 100644 --- a/src/js/controllers/export.js +++ b/src/js/controllers/export.js @@ -7,21 +7,27 @@ angular.module('copayApp.controllers').controller('exportController', var isCordova = platformInfo.isCordova; var fc = profileService.focusedClient; $scope.isEncrypted = fc.isPrivKeyEncrypted(); + $scope.touchidSuccess = null; + $scope.touchidEnabled = null; $scope.error = null; - $scope.success = null; - $scope.init = function() { + $scope.init = function(state) { if (!isCordova) return; var config = configService.getSync(); var touchidAvailable = fingerprintService.isAvailable(); - var touchidEnabled = config.touchIdFor ? config.touchIdFor[fc.credentials.walletId] : null; + var touchidEnabled = $scope.touchidEnabled = config.touchIdFor ? config.touchIdFor[fc.credentials.walletId] : null; if (!touchidAvailable || !touchidEnabled) return; fingerprintService.check(fc, function(err) { if (err) - go.path($scope.goBackToState); + go.path(state || 'walletHome'); + + $scope.touchidSuccess = true; + $timeout(function() { + $scope.$apply(); + }, 10); }); };