diff --git a/helpers.js b/helpers.js index 78ced4ef8..b00db44bd 100644 --- a/helpers.js +++ b/helpers.js @@ -34,6 +34,7 @@ var URL_BASE = "http://textsecure-test.herokuapp.com"; var URL_CALLS = {}; URL_CALLS['devices'] = "/v1/devices"; URL_CALLS['keys'] = "/v1/keys"; +URL_CALLS['push'] = "/v1/messagesocket"; /** * REQUIRED PARAMS: @@ -70,11 +71,38 @@ function doAjax(param) { }); } +function subscribeToPush(user, password, message_callback) { + var request = { url: URL_BASE + URL_CALLS['push'], + contentType: 'application/json', + transport: 'websocket', + fallbackTransport: 'long-polling', + logLevel: 'debug', //TODO + headers: {'Authorization: Basic ' + btoa(user + ":" + password)}, + onOpen = function(response) { + console.log('Connected to server using ' + response.transport); + }, + onMessage = function(response) { + try { + var message = JSON.parse(response.responseBody); + } catch (e) { + console.log('Error parsing server JSON message: ' + response.responseBody); + return; + } + console.log('Received server message' + message); //TODO + message_callback(message); + }, + onError = function(response) { + console.log('Server is down :('); + //TODO: GUI + }}; + $.atmosphere.subscribe(request); +} + /******************************************* *** Utilities to manage keys/randomness *** *******************************************/ function getRandomBytes(size) { - //TODO: Better random (https://www.grc.com/r&d/js.htm? + //TODO: Better random (https://www.grc.com/r&d/js.htm?) try { var array = new Uint8Array(size); window.crypto.getRandomValues(array); diff --git a/options.html b/options.html index f75a25626..b32d04882 100644 --- a/options.html +++ b/options.html @@ -7,7 +7,7 @@

TextSecure

@@ -20,6 +20,7 @@

You are now registered on TextSecure with number

+ diff --git a/options.js b/options.js index 0502f41ac..a4bc02f41 100644 --- a/options.js +++ b/options.js @@ -4,7 +4,8 @@ function codeMatches() { } function numberMatches() { - return $('#number').value().replace(/\D/g, '').length == 10; + var country_code = $('#countrycode').value().replace(/\D/g, ''); + return $('#number').value().replace(/\D/g, '').length > 5 && country_code.length > 0 && country_code.length < 4; } $('#code').on('change', function() { @@ -14,7 +15,7 @@ $('#code').on('change', function() { $('#code').attr('style', ''); }); -$('#number').on('change', function() { +$('#number').on('change', function() {//TODO if (!numberMatches()) $('#number').attr('style', 'background-color:#ff6666;'); else @@ -25,7 +26,7 @@ $('#init-go').click(function() { if (codeMatches() && numberMatches()) { var signaling_key = getRandomBytes(32 + 20); var password = getRandomBytes(16); - var number = $('#number').value().replace(/\D/g, ''); + var number = "+" + $('#countrycode').value().replace(/\D/g, '') + $('#number').value().replace(/\D/g, ''); $('#init-setup').hide(); $('#verify1done').html(''); @@ -37,11 +38,13 @@ $('#init-go').click(function() { $('#verify1done').html('done'); var keys = generateKeys(); $('#verify2done').html('done'); - doAjax({call: 'keys', httpType: 'PUT', user: number + "." + response, password: password, + var number_id = number + "." + response; + doAjax({call: 'keys', httpType: 'PUT', user: number_id, password: password, jsonData: keys, success_callback: function(response) { $('#complete-number').html(''); $('#verify').hide(); $('#setup-complete').show(); + storage.putUnencrypted("number_id", number_id); }, error_callback: function(code) { alert(code); //TODO } @@ -71,6 +74,6 @@ $('#init-go').click(function() { if (storage.getUnencrypted("number_id") === undefined) { $('#init-setup').show(); } else { - $('#complete-number').html(storage.getUnencrypted("number_id")); + $('#complete-number').html(storage.getUnencrypted("number_id").split(".")[0]); $('#setup-complete').show(); }