From f126e3b21b73f33dd0d4d98d40600cdb7bff146d Mon Sep 17 00:00:00 2001 From: lilia Date: Fri, 19 Jun 2015 15:32:25 -0700 Subject: [PATCH] Work on auth error handling / reinstall --- js/background.js | 6 ++++++ js/libtextsecure.js | 21 +++++++++++++++++++++ js/options.js | 27 ++++++++++++++------------- libtextsecure/api.js | 8 ++++++++ libtextsecure/message_receiver.js | 13 +++++++++++++ 5 files changed, 62 insertions(+), 13 deletions(-) diff --git a/js/background.js b/js/background.js index a55ceb922..6abb2bf70 100644 --- a/js/background.js +++ b/js/background.js @@ -117,6 +117,12 @@ function onError(ev) { var e = ev.error; + + if (e.name === 'HTTPError' && (e.message == 401 || e.message == 403)) { + extension.install(); + return; + } + if (!ev.proto) { console.log(e); throw e; diff --git a/js/libtextsecure.js b/js/libtextsecure.js index 3ea09b392..c9927e347 100644 --- a/js/libtextsecure.js +++ b/js/libtextsecure.js @@ -39100,6 +39100,14 @@ TextSecureServer = function () { return requestVerificationCode(number, 'voice'); }; + self.getDevices = function(number) { + return doAjax({ + call : 'devices', + httpType : 'GET', + do_auth : true + }); + }; + self.confirmCode = function(number, code, password, signaling_key, registrationId, deviceName) { var call = deviceName ? 'devices' : 'accounts'; @@ -39494,8 +39502,21 @@ function generateKeys(count, progressCallback) { MessageReceiver.prototype = { constructor: MessageReceiver, connect: function() { + var eventTarget = this.target; // initialize the socket and start listening for messages this.socket = TextSecureServer.getMessageWebsocket(); + this.socket.onclose = function(e) { + if (e.code === 1006) { + // possible 403. Make an request to confirm + TextSecureServer.getDevices(textsecure.storage.user.getNumber()).catch(function(e) { + if (e.name === 'HTTPError' && (e.message == 401 || e.message == 403)) { + var ev = new Event('error'); + ev.error = e; + eventTarget.dispatchEvent(ev); + } + }); + } + } new WebSocketResource(this.socket, this.handleRequest.bind(this)); }, diff --git a/js/options.js b/js/options.js index 0843bdfff..1b6780714 100644 --- a/js/options.js +++ b/js/options.js @@ -74,20 +74,21 @@ }); $(function() { - if (bg.textsecure.registration.isDone()) { - $('#complete-number').text(bg.textsecure.storage.user.getNumber()); - $('#setup-complete').show().addClass('in'); - initOptions(); - } else { - $('#init-setup').show().addClass('in'); - $('#status').text("Connecting..."); + $('#init-setup').show().addClass('in'); + $('#status').text("Connecting..."); - var accountManager = new bg.textsecure.AccountManager(); - accountManager.registerSecondDevice(setProvisioningUrl, confirmNumber, incrementCounter).then(function() { - bg.openInbox(); - window.close(); - }); - } + var accountManager = new bg.textsecure.AccountManager(); + accountManager.registerSecondDevice(setProvisioningUrl, confirmNumber, incrementCounter).then(function() { + bg.openInbox(); + window.close(); + }).catch(function(e) { + if (e.name === 'HTTPError' && e.message == 411) { + return; // TODO: too many devices + } + else { + throw e; + } + }); }); }); })(); diff --git a/libtextsecure/api.js b/libtextsecure/api.js index 80dd73434..f061b02a3 100644 --- a/libtextsecure/api.js +++ b/libtextsecure/api.js @@ -173,6 +173,14 @@ TextSecureServer = function () { return requestVerificationCode(number, 'voice'); }; + self.getDevices = function(number) { + return doAjax({ + call : 'devices', + httpType : 'GET', + do_auth : true + }); + }; + self.confirmCode = function(number, code, password, signaling_key, registrationId, deviceName) { var call = deviceName ? 'devices' : 'accounts'; diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index 7fcba694f..972b584fc 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -30,8 +30,21 @@ MessageReceiver.prototype = { constructor: MessageReceiver, connect: function() { + var eventTarget = this.target; // initialize the socket and start listening for messages this.socket = TextSecureServer.getMessageWebsocket(); + this.socket.onclose = function(e) { + if (e.code === 1006) { + // possible 403. Make an request to confirm + TextSecureServer.getDevices(textsecure.storage.user.getNumber()).catch(function(e) { + if (e.name === 'HTTPError' && (e.message == 401 || e.message == 403)) { + var ev = new Event('error'); + ev.error = e; + eventTarget.dispatchEvent(ev); + } + }); + } + } new WebSocketResource(this.socket, this.handleRequest.bind(this)); },