fixing import wallet

This commit is contained in:
Matias Alejo Garcia 2014-11-11 14:51:01 -03:00
commit e614b375e7
3 changed files with 36 additions and 11 deletions

View file

@ -30,7 +30,7 @@ angular.module('copayApp.controllers').controller('ImportController',
$rootScope.iden.importEncryptedWallet(encryptedObj, password, skipFields, opts, function(err, w) { $rootScope.iden.importEncryptedWallet(encryptedObj, password, skipFields, opts, function(err, w) {
if (!w) { if (!w) {
$scope.loading = false; $scope.loading = false;
notification.error('Error', err || 'Wrong password'); $scope.error = 'Wrong password';
$rootScope.$digest(); $rootScope.$digest();
return; return;
} }
@ -47,7 +47,7 @@ angular.module('copayApp.controllers').controller('ImportController',
updateStatus('Importing wallet - We are almost there...'); updateStatus('Importing wallet - We are almost there...');
if (err) { if (err) {
$scope.loading = false; $scope.loading = false;
notification.error('Error', 'Error updating indexes: ' + err); $scope.error = 'Error updating indexes: ' + err;
} }
controllerUtils.installWalletHandlers($scope, w); controllerUtils.installWalletHandlers($scope, w);
controllerUtils.setFocusedWallet(w); controllerUtils.setFocusedWallet(w);
@ -72,7 +72,7 @@ angular.module('copayApp.controllers').controller('ImportController',
function(err, wallet) { function(err, wallet) {
if (err) { if (err) {
$scope.loading = false; $scope.loading = false;
notification.error('Error', 'Could not read wallet. Please check your password'); $scope.error = 'Could not read wallet. Please check your password';
} else { } else {
controllerUtils.installWalletHandlers($scope, wallet); controllerUtils.installWalletHandlers($scope, wallet);
controllerUtils.setFocusedWallet(wallet); controllerUtils.setFocusedWallet(wallet);
@ -89,7 +89,7 @@ angular.module('copayApp.controllers').controller('ImportController',
if (form.$invalid) { if (form.$invalid) {
$scope.loading = false; $scope.loading = false;
notification.error('Error', 'There is an error in the form.'); $scope.error = 'There is an error in the form';
return; return;
} }
@ -104,8 +104,7 @@ angular.module('copayApp.controllers').controller('ImportController',
if (!backupFile && !backupText) { if (!backupFile && !backupText) {
$scope.loading = false; $scope.loading = false;
notification.error('Error', 'Please, select your backup file'); $scope.error = 'Please, select your backup file';
$scope.loading = false;
return; return;
} }
@ -115,7 +114,7 @@ angular.module('copayApp.controllers').controller('ImportController',
copay.Compatibility.importEncryptedWallet($rootScope.iden, backupText, $scope.password, {}, copay.Compatibility.importEncryptedWallet($rootScope.iden, backupText, $scope.password, {},
function(err, wallet) { function(err, wallet) {
if (err) { if (err) {
notification.error('Error', 'Could not read wallet. Please check your password'); $scope.error = 'Could not read wallet. Please check your password';
} else { } else {
copay.Compatibility.deleteOldWallet(backupOldWallet); copay.Compatibility.deleteOldWallet(backupOldWallet);
controllerUtils.installWalletHandlers($scope, wallet); controllerUtils.installWalletHandlers($scope, wallet);

View file

@ -288,7 +288,18 @@ Identity.prototype.close = function(cb) {
Identity.prototype.importEncryptedWallet = function(cypherText, password, opts, cb) { Identity.prototype.importEncryptedWallet = function(cypherText, password, opts, cb) {
var crypto = opts.cryptoUtil || cryptoUtil; var crypto = opts.cryptoUtil || cryptoUtil;
var obj = crypto.decrypt(password, cypherText); var obj = crypto.decrypt(password, cypherText);
if (!obj) return cb(new Error('Could not decrypt')); console.log('[Identity.js.290:obj:]',obj); //TODO
if (!obj) {
// 0.7.3 broken KDF
log.debug('Trying legacy encryption...');
var passphrase = crypto.kdf(password, 'mjuBtGybi/4=', 100);
obj = crypto.decrypt(passphrase, ejson);
}
console.log('[Identity.js.300:obj:]',obj); //TOD
if (!obj)
return cb(new Error('Could not decrypt'));
try { try {
obj = JSON.parse(obj); obj = JSON.parse(obj);
} catch (e) { } catch (e) {
@ -338,13 +349,21 @@ Identity.prototype.closeWallet = function(wallet, cb) {
}); });
}; };
Identity.importFromEncryptedFullJson = function(str, password, opts, cb) { Identity.importFromEncryptedFullJson = function(ejson, password, opts, cb) {
var crypto = opts.cryptoUtil || cryptoUtil; var crypto = opts.cryptoUtil || cryptoUtil;
var str = crypto.decrypt(password, str); var str = crypto.decrypt(password, ejson);
if (!str) { if (!str) {
return cb('BADSTR'); // 0.7.3 broken KDF
log.debug('Trying legacy encryption...');
var passphrase = crypto.kdf(password, 'mjuBtGybi/4=', 100);
str = crypto.decrypt(passphrase, ejson);
} }
if (!str)
return cb('BADSTR');
return Identity.importFromFullJson(str, password, opts, cb); return Identity.importFromFullJson(str, password, opts, cb);
}; };

View file

@ -10,6 +10,13 @@
<div class="large-12 columns"> <div class="large-12 columns">
<div class="panel"> <div class="panel">
<form name="importForm" ng-submit="import(importForm)" novalidate> <form name="importForm" ng-submit="import(importForm)" novalidate>
<p class="text-warning size-12"
ng-show="error">
<i class="fi-x"></i>
{{error|translate}}
</p>
<div ng-show="!is_iOS && !backupOldWallet"> <div ng-show="!is_iOS && !backupOldWallet">
<legend for="backupFile" class="m10b"> <legend for="backupFile" class="m10b">
<span translate>Choose backup file from your computer</span> <i class="fi-laptop"></i> <span translate>Choose backup file from your computer</span> <i class="fi-laptop"></i>