fix broken encrypt in localstorage

This commit is contained in:
Matias Alejo Garcia 2014-12-13 19:38:39 -03:00
commit ad40641646
4 changed files with 23 additions and 11 deletions

View file

@ -5,7 +5,7 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
var _credentials, _firstpin; var _credentials, _firstpin;
$scope.init = function() { $scope.init = function() {
$scope.isMobile = isMobile.any(); $scope.isMobile = isMobile.any();
$scope.attempt=0; $scope.attempt = 0;
// This is only for backwards compat, insight api should link to #!/confirmed directly // This is only for backwards compat, insight api should link to #!/confirmed directly
if (getParam('confirmed')) { if (getParam('confirmed')) {
@ -43,12 +43,12 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
if (newValue === _firstpin) { if (newValue === _firstpin) {
_firstpin = null; _firstpin = null;
$scope.createPin(newValue); $scope.createPin(newValue);
} else { } else {
$scope.$$childTail.setPinForm.newpin.$setViewValue(''); $scope.$$childTail.setPinForm.newpin.$setViewValue('');
$scope.$$childTail.setPinForm.newpin.$render(); $scope.$$childTail.setPinForm.newpin.$render();
$scope.$$childTail.setPinForm.repeatpin.$setViewValue(''); $scope.$$childTail.setPinForm.repeatpin.$setViewValue('');
$scope.$$childTail.setPinForm.repeatpin.$render(); $scope.$$childTail.setPinForm.repeatpin.$render();
_firstpin = null; _firstpin = null;
$scope.askForPin = 1; $scope.askForPin = 1;
$scope.error = 'Entered PINs were not equal. Try again'; $scope.error = 'Entered PINs were not equal. Try again';
@ -62,7 +62,7 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
return; return;
} }
$rootScope.starting = true; $rootScope.starting = true;
$timeout(function() { $timeout(function() {
var credentials = pinService.get(pin, function(err, credentials) { var credentials = pinService.get(pin, function(err, credentials) {
if (err || !credentials) { if (err || !credentials) {
@ -72,7 +72,7 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
} }
$scope.open(credentials.email, credentials.password); $scope.open(credentials.email, credentials.password);
}); });
},100); }, 100);
}; };
$scope.openWallets = function() { $scope.openWallets = function() {
@ -98,7 +98,7 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
$rootScope.starting = null; $rootScope.starting = null;
$scope.openWallets(); $scope.openWallets();
}); });
},100); }, 100);
}; };
$scope.openWithCredentials = function(form) { $scope.openWithCredentials = function(form) {
@ -128,7 +128,7 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
if ((err.toString() || '').match('PNOTFOUND')) { if ((err.toString() || '').match('PNOTFOUND')) {
$scope.error = 'Invalid email or password'; $scope.error = 'Invalid email or password';
if($scope.attempt++>1) { if ($scope.attempt++ > 1) {
var storage = $scope.usingLocalStorage ? 'this device storage' : 'cloud storage'; var storage = $scope.usingLocalStorage ? 'this device storage' : 'cloud storage';
$scope.error = 'Invalid email or password. You are trying to sign in using ' + storage + '. Change it on settings is necessary.'; $scope.error = 'Invalid email or password. You are trying to sign in using ' + storage + '. Change it on settings is necessary.';
}; };
@ -144,9 +144,9 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
$scope.error = 'Unknown error'; $scope.error = 'Unknown error';
} }
$rootScope.starting = false; $rootScope.starting = false;
$timeout(function(){ $timeout(function() {
$rootScope.$digest(); $rootScope.$digest();
},1) }, 1)
return; return;
} }
@ -164,7 +164,9 @@ angular.module('copayApp.controllers').controller('HomeController', function($sc
$scope.askForPin = 1; $scope.askForPin = 1;
$rootScope.starting = false; $rootScope.starting = false;
$rootScope.hideNavigation = true; $rootScope.hideNavigation = true;
$rootScope.$digest(); $timeout(function() {
$rootScope.$digest();
}, 1);
return; return;
} }
// no mobile // no mobile

View file

@ -377,6 +377,7 @@ Identity.prototype._cleanUp = function() {
* @desc Closes the wallet and disconnects all services * @desc Closes the wallet and disconnects all services
*/ */
Identity.prototype.close = function() { Identity.prototype.close = function() {
this._cleanUp(); this._cleanUp();
this.emitAndKeepAlive('closed'); this.emitAndKeepAlive('closed');
}; };

View file

@ -10,6 +10,10 @@ function EncryptedInsightStorage(config) {
inherits(EncryptedInsightStorage, InsightStorage); inherits(EncryptedInsightStorage, InsightStorage);
EncryptedInsightStorage.prototype._brokenDecryptUndef = function(body) {
cryptoUtil.decrypt('undefined' + SEPARATOR + 'undefined', body);
};
EncryptedInsightStorage.prototype._brokenDecrypt = function(body) { EncryptedInsightStorage.prototype._brokenDecrypt = function(body) {
var key = cryptoUtil.kdf(this.password + this.email, 'mjuBtGybi/4=', 100); var key = cryptoUtil.kdf(this.password + this.email, 'mjuBtGybi/4=', 100);
log.debug('Trying legacy decrypt') log.debug('Trying legacy decrypt')
@ -31,6 +35,10 @@ EncryptedInsightStorage.prototype.getItem = function(name, callback) {
decryptedJson = self._brokenDecrypt(body); decryptedJson = self._brokenDecrypt(body);
} }
if (!decryptedJson) {
decryptedJson = self._brokenDecryptUndef(body);
}
if (!decryptedJson) { if (!decryptedJson) {
log.debug('Could not decrypt value.'); log.debug('Could not decrypt value.');
return callback('PNOTFOUND'); return callback('PNOTFOUND');

View file

@ -26,7 +26,8 @@ function LocalStorage(opts) {
LocalStorage.prototype.init = function() {}; LocalStorage.prototype.init = function() {};
LocalStorage.prototype.setCredentials = function(email, password, opts) { LocalStorage.prototype.setCredentials = function(email, password, opts) {
// NOP this.email = email;
this.password = password;
}; };
LocalStorage.prototype.getItem = function(k, cb) { LocalStorage.prototype.getItem = function(k, cb) {