From 801e746d1131dd0fbc2fb6d823017da627c5c1e5 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Thu, 7 Aug 2014 18:57:19 -0300 Subject: [PATCH] Show a warning if trying to open same wallet in same browser. Fix redirect to receive. --- css/main.css | 2 +- index.html | 12 ++++++++---- js/controllers/sidebar.js | 11 +++++++++++ js/models/core/Wallet.js | 24 ++++++++++++++++++++++++ js/models/storage/LocalEncrypted.js | 12 ++++++++++++ js/routes.js | 7 +++++++ js/services/controllerUtils.js | 5 ++++- views/warning.html | 26 ++++++++++++++++++++++++++ 8 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 views/warning.html diff --git a/css/main.css b/css/main.css index fb9e827d2..9aaf54cc8 100644 --- a/css/main.css +++ b/css/main.css @@ -1131,7 +1131,7 @@ a.text-warning:hover {color: #FD7262;} .wide-page { background-color: #2C3E50; - margin: 10% 0; + margin: 5% 0; padding: 50px; } diff --git a/index.html b/index.html index 1df6aa092..9b11021f0 100644 --- a/index.html +++ b/index.html @@ -17,7 +17,8 @@
-
-
+
diff --git a/js/controllers/sidebar.js b/js/controllers/sidebar.js index f90b13f01..c7e760da7 100644 --- a/js/controllers/sidebar.js +++ b/js/controllers/sidebar.js @@ -74,4 +74,15 @@ angular.module('copayApp.controllers').controller('SidebarController', }); } + $scope.checkIfWarning = function() { + if (!$rootScope.wallet.isLocked) { + controllerUtils.redirIfLogged(); + } + }; + + $scope.ignoreLocked = function() { + $rootScope.wallet.isLocked = false; + controllerUtils.redirIfLogged(); + }; + }); diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index 55649c296..8302cbabe 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -92,6 +92,27 @@ Wallet.prototype.connectToAll = function() { } }; +Wallet.prototype.getIsOpen = function() { + return this.storage.getIsOpen(this.id); +}; + +Wallet.prototype.setIsOpen = function() { + return this.storage.setIsOpen(this.id); +}; + +Wallet.prototype.closeIfOpen = function() { + this.storage.removeIsOpen(this.id); +}; + +Wallet.prototype._checkLocked = function() { + if (this.getIsOpen()) { + this.isLocked = true; + } + else { + this.setIsOpen(); + } +}; + Wallet.prototype._handleIndexes = function(senderId, data, isInbound) { this.log('RECV INDEXES:', data); var inIndexes = HDParams.fromList(data.indexes); @@ -409,6 +430,9 @@ Wallet.prototype._lockIncomming = function() { Wallet.prototype.netStart = function(callback) { var self = this; var net = this.network; + + this._checkLocked(); + net.removeAllListeners(); net.on('connect', self._handleConnect.bind(self)); net.on('disconnect', self._handleDisconnect.bind(self)); diff --git a/js/models/storage/LocalEncrypted.js b/js/models/storage/LocalEncrypted.js index df9c9c703..2dc2e9377 100644 --- a/js/models/storage/LocalEncrypted.js +++ b/js/models/storage/LocalEncrypted.js @@ -180,6 +180,18 @@ Storage.prototype.getLastOpened = function() { return this.getGlobal('lastOpened'); } +Storage.prototype.setIsOpen = function(walletId) { + this.setGlobal(this._key(walletId, 'isOpen'), true); +} + +Storage.prototype.getIsOpen = function(walletId) { + return this.getGlobal(this._key(walletId, 'isOpen')); +} + +Storage.prototype.removeIsOpen = function(walletId) { + this.localStorage.removeItem(this._key(walletId, 'isOpen')); +} + //obj contains keys to be set Storage.prototype.setFromObj = function(walletId, obj) { for (var k in obj) { diff --git a/js/routes.js b/js/routes.js index 712bbda17..b17bf1304 100644 --- a/js/routes.js +++ b/js/routes.js @@ -56,6 +56,10 @@ angular .when('/uri-payment/:data', { templateUrl: 'views/uri-payment.html' }) + .when('/warning', { + templateUrl: 'views/warning.html', + validate: true + }) .otherwise({ templateUrl: 'views/errors/404.html', title: 'Error' @@ -86,6 +90,9 @@ angular if ($rootScope.wallet && !$rootScope.wallet.isReady()) { $location.path('/copayers'); } + if ($rootScope.wallet && $rootScope.wallet.isLocked) { + $location.path('/warning'); + } } }); }) diff --git a/js/services/controllerUtils.js b/js/services/controllerUtils.js index f70cdb87c..1db1417eb 100644 --- a/js/services/controllerUtils.js +++ b/js/services/controllerUtils.js @@ -17,11 +17,14 @@ angular.module('copayApp.services') root.redirIfLogged = function() { var w = $rootScope.wallet; if (w) { - $location.path('addresses'); + $location.path('receive'); } }; root.logout = function() { + if (!$rootScope.wallet.isLocked) { + $rootScope.wallet.closeIfOpen(); + } Socket.removeAllListeners(); $rootScope.wallet = null; diff --git a/views/warning.html b/views/warning.html new file mode 100644 index 000000000..1872629a5 --- /dev/null +++ b/views/warning.html @@ -0,0 +1,26 @@ +
+
+ Copay +
+
+

Warning!

+

+ This wallet appear to be open on an other tab at your browser. Are you sure + you want to proceed? (*) +

+
+ +
+
+ (*) Opening the wallet in multiple tabs could lead to unexpected results +
+
+