diff --git a/js/controllers/importProfile.js b/js/controllers/importProfile.js index a9a841a71..fe9a292a3 100644 --- a/js/controllers/importProfile.js +++ b/js/controllers/importProfile.js @@ -27,9 +27,18 @@ angular.module('copayApp.controllers').controller('ImportProfileController', walletDefaults: config.wallet, passphraseConfig: config.passphraseConfig, }, function(err, iden) { - if (err && !iden) { + if (err) { $scope.loading = false; - $scope.error = (err.toString() || '').match('BADSTR') ? 'Bad password or corrupt profile file' : 'Unknown error'; + + if ((err.toString() || '').match('BADSTR')) { + $scope.error = 'Bad password or corrupt profile file'; + } else if ((err.toString() || '').match('EEXISTS')) { + $scope.error = 'Profile already exists'; + } else { + $scope.error = 'Unknown error'; + } + $scope.$digest(); + } else { var firstWallet = iden.getLastFocusedWallet(); controllerUtils.bindProfile($scope, iden, firstWallet); diff --git a/js/models/Identity.js b/js/models/Identity.js index b292854d0..2503a9c62 100644 --- a/js/models/Identity.js +++ b/js/models/Identity.js @@ -299,11 +299,14 @@ Identity.prototype.importWalletFromObj = function(obj, opts, cb) { log.debug('Adding wallet to profile:' + w.getName()); self.addWallet(w); self.bindWallet(w); + + var writeOpts = _.extend({ + noWallets: true + }, opts); + self.storeWallet(w, function(err) { if (err) return cb(err); - self.store({ - noWallets: true - }, function(err) { + self.store(writeOpts, function(err) { return cb(err, w); }); }); @@ -327,7 +330,6 @@ Identity.importFromEncryptedFullJson = function(ejson, password, opts, cb) { var crypto = opts.cryptoUtil || cryptoUtil; var str = crypto.decrypt(password, ejson); - if (!str) { // 0.7.3 broken KDF log.debug('Trying legacy encryption...'); @@ -360,24 +362,35 @@ Identity.importFromFullJson = function(str, password, opts, cb) { var iden = new Identity(opts); + opts.failIfExists = true; + json.wallets = json.wallets || {}; - async.map(json.wallets, function(walletData, callback) { - if (!walletData) - return callback(); + iden.store(opts, function(err) { + if (err) return cb(err); //profile already exists - iden.importWalletFromObj(walletData, opts, function(err, w) { - if (err) return callback(err); - log.debug('Wallet ' + w.getId() + ' imported'); - callback(); - }); - }, function(err, results) { - if (err) return cb(err); + opts.failIfExists = false; + async.map(json.wallets, function(walletData, callback) { - iden.store(null, function(err) { - return cb(err, iden); + if (!walletData) + return callback(); + + iden.importWalletFromObj(walletData, opts, function(err, w) { + if (err) return callback(err); + log.debug('Wallet ' + w.getId() + ' imported'); + callback(); + }); + }, function(err, results) { + if (err) return cb(err); + + iden.store(opts, function(err) { + return cb(err, iden); + }); }); + }); + + }; Identity.prototype.bindWallet = function(w) {