diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index 988228bd5..80c1c53f0 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -1045,13 +1045,16 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.needsBackup = false; $log.debug('Backup done'); storageService.setBackupFlag(self.walletId, function(err) { - if (err) root.showErrorPopup(err); $log.debug('Backup done stored'); }); }); $rootScope.$on('Local/DeviceError', function(event, err) { - root.showErrorPopup(err); + self.showErrorPopup(err, function() { + if (self.isCordova && navigator && navigator.app) { + navigator.app.exitApp(); + } + }); }); $rootScope.$on('Local/WalletImported', function(event, walletId) { diff --git a/src/js/routes.js b/src/js/routes.js index f6d58c84e..1533ba74a 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -515,10 +515,10 @@ angular // Try to open local profile profileService.loadAndBindProfile(function(err) { if (err) { - if (err.message.match('NOPROFILE')) { + if (err.message && err.message.match('NOPROFILE')) { $log.debug('No profile... redirecting'); $state.transitionTo('splash'); - } else if (err.message.match('NONAGREEDDISCLAIMER')) { + } else if (err.message && err.message.match('NONAGREEDDISCLAIMER')) { $log.debug('Display disclaimer... redirecting'); $state.transitionTo('disclaimer'); } else { @@ -545,4 +545,4 @@ angular }, 50); } }); - }); \ No newline at end of file + }); diff --git a/src/js/services/storageService.js b/src/js/services/storageService.js index bff7c9ec6..ec246abfe 100644 --- a/src/js/services/storageService.js +++ b/src/js/services/storageService.js @@ -41,15 +41,21 @@ angular.module('copayApp.services') json = JSON.parse(text); } catch (e) {}; + if (!json) return cb('Could not access storage') + if (!json.iter || !json.ct) return cb(null, text); $log.debug('Profile is encrypted'); getUUID(function(uuid) { if (!uuid) - return cb(new Error('Could not decrypt localstorage profile')); + return cb('Could not decrypt storage: could not get device ID'); - text = sjcl.decrypt(uuid, text); + try { + text = sjcl.decrypt(uuid, text); + } catch(e) { + return cb('Could not decrypt storage: device ID mismatch'); + }; return cb(null, text); }); };