From 52fb68065874425d7182ae13d1197a47e5f0eb6e Mon Sep 17 00:00:00 2001 From: Matias Pando Date: Wed, 26 Nov 2014 12:08:26 -0300 Subject: [PATCH] Storing the backup flag --- js/controllers/profile.js | 20 ++++---- js/models/Identity.js | 14 ++++-- js/services/backupService.js | 1 + js/services/identityService.js | 19 ++++---- test/Identity.js | 75 ------------------------------ test/unit/services/servicesSpec.js | 3 +- 6 files changed, 34 insertions(+), 98 deletions(-) diff --git a/js/controllers/profile.js b/js/controllers/profile.js index 95c7003fb..b13a2565d 100644 --- a/js/controllers/profile.js +++ b/js/controllers/profile.js @@ -14,7 +14,7 @@ angular.module('copayApp.controllers').controller('ProfileController', function( $scope.backupProfilePlainText = backupService.profileEncrypted($rootScope.iden); $scope.hideViewProfileBackup = true; }; - + $scope.deleteWallet = function(w) { if (!w) return; identityService.deleteWallet(w, function(err) { @@ -28,8 +28,8 @@ angular.module('copayApp.controllers').controller('ProfileController', function( $scope.init = function() { if ($rootScope.quotaPerItem) { - $scope.perItem = $filter('noFractionNumber')($rootScope.quotaPerItem/1000,1); - $scope.nrWallets =parseInt($rootScope.quotaItems) - 1; + $scope.perItem = $filter('noFractionNumber')($rootScope.quotaPerItem / 1000, 1); + $scope.nrWallets = parseInt($rootScope.quotaItems) - 1; } }; @@ -37,13 +37,13 @@ angular.module('copayApp.controllers').controller('ProfileController', function( if (!$rootScope.iden) return; var wallets = $rootScope.iden.listWallets(); - var max =$rootScope.quotaPerItem; + var max = $rootScope.quotaPerItem; _.each(wallets, function(w) { var bits = w.sizes().total; - w.kb = $filter('noFractionNumber')(bits/1000, 1); + w.kb = $filter('noFractionNumber')(bits / 1000, 1); if (max) { - w.usage = $filter('noFractionNumber')(bits/max * 100, 0); + w.usage = $filter('noFractionNumber')(bits / max * 100, 0); } }); @@ -73,15 +73,15 @@ angular.module('copayApp.controllers').controller('ProfileController', function( }); }; - $scope.deleteProfile = function () { - identityService.deleteProfile(function (err, res) { + $scope.deleteProfile = function() { + identityService.deleteProfile(function(err, res) { if (err) { log.warn(err); notification.error('Error', 'Could not delete profile'); return; } - $location.path('/'); - setTimeout(function () { + $location.path('/'); + setTimeout(function() { notification.error('Success', 'Profile successfully deleted'); }, 1); }); diff --git a/js/models/Identity.js b/js/models/Identity.js index bb8a4113a..8258d5d86 100644 --- a/js/models/Identity.js +++ b/js/models/Identity.js @@ -274,10 +274,17 @@ Identity.prototype.toObj = function() { Identity.prototype.exportEncryptedWithWalletInfo = function(opts) { var crypto = opts.cryptoUtil || cryptoUtil; - this.backupNeeded = false; + return crypto.encrypt(this.password, this.exportWithWalletInfo(opts)); }; +Identity.prototype.setBackupDone = function() { + this.backupNeeded = false; + this.store({ + noWallets: true + }, function() {}); +} + Identity.prototype.exportWithWalletInfo = function(opts) { return _.extend({ wallets: _.map(this.wallets, function(wallet) { @@ -295,12 +302,13 @@ Identity.prototype.exportWithWalletInfo = function(opts) { Identity.prototype.store = function(opts, cb) { var self = this; opts = opts || {}; - opts.backupNeeded = false; var storeFunction = opts.failIfExists ? self.storage.createItem : self.storage.setItem; storeFunction.call(self.storage, this.getId(), this.toObj(), function(err) { - if (err) return cb(err); + if (err) { + return cb(err); + } if (opts.noWallets) return cb(); diff --git a/js/services/backupService.js b/js/services/backupService.js index 775b25be3..1fb190371 100644 --- a/js/services/backupService.js +++ b/js/services/backupService.js @@ -38,6 +38,7 @@ BackupService.prototype.profileEncrypted = function(iden) { BackupService.prototype.profileDownload = function(iden) { var ew = this.profileEncrypted(iden); + iden.setBackupDone(); var name = iden.fullName; var filename = name + '-profile.json'; this._download(ew, name, filename) diff --git a/js/services/identityService.js b/js/services/identityService.js index 8a97fd046..53cf4331f 100644 --- a/js/services/identityService.js +++ b/js/services/identityService.js @@ -48,6 +48,7 @@ angular.module('copayApp.services') passphraseConfig: config.passphraseConfig, failIfExists: true, }, function(err, iden) { + if (err) return cb(err); preconditions.checkState(iden); root.bind(iden); @@ -68,19 +69,19 @@ angular.module('copayApp.services') }; root.setServerStatus = function(headers) { - if (!headers) + if (!headers) return; - if (headers['X-Email-Needs-Validation']) - $rootScope.needsEmailConfirmation = true; + if (headers['X-Email-Needs-Validation']) + $rootScope.needsEmailConfirmation = true; else - $rootScope.needsEmailConfirmation = null; + $rootScope.needsEmailConfirmation = null; - if (headers['X-Quota-Per-Item']) - $rootScope.quotaPerItem = parseInt(headers['X-Quota-Per-Item']); + if (headers['X-Quota-Per-Item']) + $rootScope.quotaPerItem = parseInt(headers['X-Quota-Per-Item']); - if (headers['X-Quota-Items-Limit']) - $rootScope.quotaItems = parseInt(headers['X-Quota-Items-Limit']); + if (headers['X-Quota-Items-Limit']) + $rootScope.quotaItems = parseInt(headers['X-Quota-Items-Limit']); }; root.open = function(email, password, cb) { @@ -102,7 +103,7 @@ angular.module('copayApp.services') }); }; - root.deleteProfile = function (cb) { + root.deleteProfile = function(cb) { $rootScope.iden.remove(null, cb); }; diff --git a/test/Identity.js b/test/Identity.js index 46653b258..a22b08df7 100644 --- a/test/Identity.js +++ b/test/Identity.js @@ -498,79 +498,4 @@ describe('Identity model', function() { }); }); }); - - describe.only('Identity backupNeeded', function() { - - it('should create Profile with backupNeeded set to true', function(done) { - var args = createIdentity(); - Identity.create(args.params, function(err, iden) { - should.not.exist(err); - iden.backupNeeded.should.be.true; - done(); - }); - }); - - it('making a backup should set backupNeeded set to false', function(done) { - var args = createIdentity(); - Identity.create(args.params, function(err, iden) { - should.not.exist(err); - iden.exportEncryptedWithWalletInfo(iden.password) - iden.backupNeeded.should.be.false; - done(); - }); - }); - - it('adding a wallet should set backupNeeded to true', function(done) { - var args = createIdentity(); - Identity.create(args.params, function(err, iden) { - should.not.exist(err); - iden.exportEncryptedWithWalletInfo(iden.password); - iden.createWallet({ - walletClass: walletClass, - }, function(err, w2) { - iden.backupNeeded.should.be.true; - done(); - }); - }); - }); - - it('joining a wallet should set backupNeeded to true', function(done) { - var args = createIdentity(); - var net = null; - var opts = { - secret: '8WtTuiFTkhP5ao7AF2QErSwV39Cbur6pdMebKzQXFqL59RscXM', - nickname: 'test', - password: 'pass' - }; - args.params.Async = net = sinon.stub(); - net = sinon.stub(); - net.on = sinon.stub(); - net.start = sinon.stub(); - net.start.onFirstCall().callsArg(1); - net.greet = sinon.stub(); - - Identity.create(args.params, function(err, iden) { - iden.createWallet = sinon.stub(); - should.not.exist(err); - iden.exportEncryptedWithWalletInfo(iden.password); - - var fakeWallet = { - sendWalletReady: _.noop - }; - iden.createWallet.onFirstCall().yields(null, fakeWallet); - opts.privHex = 'tprv8ZgxMBicQKsPf7MCvCjnhnr4uiR2Z2gyNC27vgd9KUu98F9mM1tbaRrWMyddVju36GxLbeyntuSadBAttriwGGMWUkRgVmUUCg5nFioGZsd'; - opts.Async = net; - iden.joinWallet(opts, function(err, w) { - console.log('err', err); - console.log('w', w); - - console.log('join Wallet'); - iden.backupNeeded.should.be.true; - done(); - }); - - }); - }); - - }); }); diff --git a/test/unit/services/servicesSpec.js b/test/unit/services/servicesSpec.js index 3abe1efaf..f468f5917 100644 --- a/test/unit/services/servicesSpec.js +++ b/test/unit/services/servicesSpec.js @@ -76,6 +76,7 @@ describe("Angular services", function() { a[Waddr] = 200; w.getBalance = sinon.stub().yields(null, 100000001, a, 90000002, 5); + //retuns values in DEFAULT UNIT(bits) balanceService.update(w, function() { var b = w.balanceInfo; @@ -90,7 +91,7 @@ describe("Angular services", function() { expect(b.balanceByAddr[Waddr]).to.equal(2); expect(b.safeUnspentCount).to.equal(5); expect(b.topAmount).to.equal(899800.02); - },false); + }, false); })); });