From bddfa5c4d90baed9f62543974650214eaddb3d35 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Wed, 15 Jul 2015 22:10:59 -0300 Subject: [PATCH] export backup without signing capabilities --- public/views/backup.html | 35 +++++++++++++++++++++++++++- public/views/modals/txp-details.html | 2 +- public/views/walletHome.html | 2 ++ src/js/controllers/backup.js | 32 ++++++++++++++++++++++--- src/js/controllers/index.js | 1 + src/js/controllers/walletHome.js | 15 ++++++++++++ src/js/services/backupService.js | 10 ++++---- 7 files changed, 88 insertions(+), 9 deletions(-) diff --git a/public/views/backup.html b/public/views/backup.html index f28f43656..bb3dd6e69 100644 --- a/public/views/backup.html +++ b/public/views/backup.html @@ -8,7 +8,12 @@
-
+
+
+ + Failed to create backup +
+
The private key for this wallet is encrypted. Exporting a backup will keep the private key encrypted in the backup archive. @@ -29,6 +34,31 @@ name="password" ng-model="backup.repeatpassword">
+ + +
+
+ +
+ +
+ A backup without the private key will allow to see wallet balance, transaction, create spend proposals, but will not be able to approve (sign) proposals. + +
+
+ +
+ + +

Copy backup to a safe place

diff --git a/public/views/modals/txp-details.html b/public/views/modals/txp-details.html index 4399d42eb..ca68517c7 100644 --- a/public/views/modals/txp-details.html +++ b/public/views/modals/txp-details.html @@ -102,7 +102,7 @@ Reject
-
+
@@ -127,6 +128,7 @@

Testnet + - No Private key
diff --git a/src/js/controllers/backup.js b/src/js/controllers/backup.js index 0aec01726..93234d824 100644 --- a/src/js/controllers/backup.js +++ b/src/js/controllers/backup.js @@ -11,7 +11,15 @@ angular.module('copayApp.controllers').controller('backupController', this.isEncrypted = fc.isPrivKeyEncrypted(); this.downloadWalletBackup = function() { - backupService.walletDownload(this.password, function() { + var self = this; + var opts = { + noSign: $scope.noSign, + }; + backupService.walletDownload(this.password, opts, function(err) { + if (err) { + self.error = true; + return ; + } $rootScope.$emit('Local/BackupDone'); notification.success(gettext('Backup created'), gettext('Encrypted backup file saved')); go.walletHome(); @@ -19,19 +27,32 @@ angular.module('copayApp.controllers').controller('backupController', }; this.getBackup = function() { - return backupService.walletExport(this.password); + var opts = { + noSign: $scope.noSign, + }; + + var ew = backupService.walletExport(this.password, opts); + if (!ew) { + this.error = true; + } else { + this.error = false; + } + return ew; }; this.viewWalletBackup = function() { var self = this; $timeout(function() { - self.backupWalletPlainText = self.getBackup(); + var ew = self.getBackup(); + if (!ew) return; + self.backupWalletPlainText = ew; $rootScope.$emit('Local/BackupDone'); }, 100); }; this.copyWalletBackup = function() { var ew = this.getBackup(); + if (!ew) return; window.cordova.plugins.clipboard.copy(ew); window.plugins.toast.showShortCenter('Copied to clipboard'); $rootScope.$emit('Local/BackupDone'); @@ -48,6 +69,11 @@ angular.module('copayApp.controllers').controller('backupController', name = fc.alias + ' [' + name + ']'; } var ew = this.getBackup(); + if (!ew) return; + + if( $scope.noSign) + name = name + '(No Private Key)'; + var properties = { subject: 'Copay Wallet Backup: ' + name, body: 'Here is the encrypted backup of the wallet ' + name + ': \n\n' + ew + '\n\n To import this backup, copy all text between {...}, including the symbols {}', diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index dbc4457b3..57bda66e1 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -106,6 +106,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.walletName = fc.credentials.walletName; self.walletId = fc.credentials.walletId; self.isComplete = fc.isComplete(); + self.canSign = fc.canSign(); self.txps = []; self.copayers = []; self.updateColor(); diff --git a/src/js/controllers/walletHome.js b/src/js/controllers/walletHome.js index 4ec2e9ea2..79a9db808 100644 --- a/src/js/controllers/walletHome.js +++ b/src/js/controllers/walletHome.js @@ -182,6 +182,7 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi $scope.alternativeAmountStr = tx.alternativeAmountStr; $scope.copayers = copayers $scope.copayerId = fc.credentials.copayerId; + $scope.canSign= fc.canSign(); $scope.loading = null; $scope.color = fc.backgroundColor; refreshUntilItChanges = false; @@ -229,6 +230,10 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi $scope.sign = function(txp) { var fc = profileService.focusedClient; + + if (!fc.canSign()) + return; + if (fc.isPrivKeyEncrypted()) { profileService.unlockFC(function(err) { if (err) { @@ -727,6 +732,16 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi return self.setSendError(err); } + if (!fc.canSign()) { + $log.info('No signing proposal: No private key') + self.setOngoingProcess(); + self.resetForm(); + txStatus.notify(txp, function() { + return $scope.$emit('Local/TxProposalAction'); + }); + return; + } + self.signAndBroadcast(txp, function(err) { self.setOngoingProcess(); profileService.lockFC(); diff --git a/src/js/services/backupService.js b/src/js/services/backupService.js index 328e5fcd8..de47cf5a2 100644 --- a/src/js/services/backupService.js +++ b/src/js/services/backupService.js @@ -53,13 +53,14 @@ angular.module('copayApp.services') return cb(); }; - root.walletExport = function(password) { + root.walletExport = function(password, opts) { if (!password) { return null; } var fc = profileService.focusedClient; try { - var b = fc.export({}); + opts = opts || {}; + var b = fc.export(opts); var e = sjcl.encrypt(password, b, { iter: 10000 }); @@ -70,12 +71,13 @@ angular.module('copayApp.services') }; }; - root.walletDownload = function(password, cb) { + root.walletDownload = function(password, opts, cb) { var fc = profileService.focusedClient; - var ew = root.walletExport(password); + var ew = root.walletExport(password, opts); if (!ew) return cb('Could not create backup'); var walletName = (fc.alias || '') + (fc.alias ? '-' : '') + fc.credentials.walletName; + if (opts.noSign) walletName = walletName + '-noSign' var filename = walletName + '-Copaybackup.aes.json'; _download(ew, filename, cb) };