From 79052e4d703e47c8571a534f04de36f0f1d910ae Mon Sep 17 00:00:00 2001 From: brantje Date: Tue, 27 Sep 2016 22:02:04 +0200 Subject: [PATCH] Force logout if localstorage password is wrong --- js/app/controllers/credential.js | 20 ++++++++++++++++---- js/app/services/credentialservice.js | 8 +++++++- js/app/services/encryptservice.js | 3 +-- js/app/services/settingsservice.js | 3 ++- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/js/app/controllers/credential.js b/js/app/controllers/credential.js index cdeea100..24719607 100644 --- a/js/app/controllers/credential.js +++ b/js/app/controllers/credential.js @@ -218,10 +218,22 @@ angular.module('passmanApp') VaultService.getVault($scope.active_vault).then(function (credentials) { var _credentials = []; for (var i = 0; i < credentials.length; i++) { - var _c = CredentialService.decryptCredential(angular.copy(credentials[i])); - _c.tags_raw = _c.tags; - TagService.addTags(_c.tags); - _credentials.push(_c); + try { + var _c = CredentialService.decryptCredential(angular.copy(credentials[i])); + } catch (e){ + CacheService.set('credential_cache_' + $scope.active_vault.vault_id, []); + NotificationService.showNotification('An error happend during decryption', 5000); + $rootScope.$broadcast('logout'); + SettingsService.setSetting('defaultVaultPass', null); + SettingsService.setSetting('defaultVault', null); + $location.path('/') + + } + if(_c) { + _c.tags_raw = _c.tags; + TagService.addTags(_c.tags); + _credentials.push(_c); + } } $scope.credentials = _credentials; $scope.show_spinner = false; diff --git a/js/app/services/credentialservice.js b/js/app/services/credentialservice.js index c0bc0936..89e3b8cf 100644 --- a/js/app/services/credentialservice.js +++ b/js/app/services/credentialservice.js @@ -107,8 +107,14 @@ angular.module('passmanApp') for (var i = 0; i < _encryptedFields.length; i++) { var field = _encryptedFields[i]; var fieldValue = angular.copy(credential[field]); + try { + var field_decrypted_value = EncryptService.decryptString(fieldValue) + } catch (e){ + console.log(e) + throw e + } try{ - credential[field] = JSON.parse(EncryptService.decryptString(fieldValue)); + credential[field] = JSON.parse(field_decrypted_value); } catch (e){ console.log('Field' + field + ' in '+ credential.label +' could not be parsed! Value:'+ fieldValue) throw e diff --git a/js/app/services/encryptservice.js b/js/app/services/encryptservice.js index 7787a43a..4c67cec9 100644 --- a/js/app/services/encryptservice.js +++ b/js/app/services/encryptservice.js @@ -32,8 +32,7 @@ angular.module('passmanApp') try { return sjcl.decrypt(_key, ciphertext, encryption_config, rp) } catch(e) { - Error("Can't decrypt: "+e); - return; + throw e; } } } diff --git a/js/app/services/settingsservice.js b/js/app/services/settingsservice.js index 4799534d..69a34014 100644 --- a/js/app/services/settingsservice.js +++ b/js/app/services/settingsservice.js @@ -11,8 +11,9 @@ angular.module('passmanApp') .service('SettingsService', ['localStorageService', function (localStorageService) { var settings = { defaultVault: null, - defaultVaultPassword: null + defaultVaultPass: null }; + var neverSend = ['defaultVault', 'defaultVaultPass']; var cookie = localStorageService.get('settings'); settings = angular.merge(settings, cookie);