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 @@
+
+
+

+
+
+
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
+
+
+