Working registration

pull/749/head
Matt Corallo 11 years ago
parent aa8fe6f9d0
commit 7e811c2855

@ -85,7 +85,7 @@ var storage = {};
storage.putEncrypted = function(key, value) { storage.putEncrypted = function(key, value) {
//TODO //TODO
localStorage.setItem("e" + key, getString(value)); localStorage.setItem("e" + key, JSON.stringify(getString(value)));
} }
storage.getEncrypted = function(key, defaultValue) { storage.getEncrypted = function(key, defaultValue) {
@ -93,18 +93,18 @@ storage.getEncrypted = function(key, defaultValue) {
var value = localStorage.getItem("e" + key); var value = localStorage.getItem("e" + key);
if (value === null) if (value === null)
return defaultValue; return defaultValue;
return value; return JSON.parse(value);
} }
storage.putUnencrypted = function(key, value) { storage.putUnencrypted = function(key, value) {
localStorage.setItem("u" + key, getString(value)); localStorage.setItem("u" + key, JSON.stringify(getString(value)));
} }
storage.getUnencrypted = function(key, defaultValue) { storage.getUnencrypted = function(key, defaultValue) {
var value = localStorage.getItem("u" + key); var value = localStorage.getItem("u" + key);
if (value === null) if (value === null)
return defaultValue; return defaultValue;
return value; return JSON.parse(value);
} }
/******************************************* /*******************************************
@ -153,10 +153,7 @@ function generateKeys() {
// Keep track of other's keys too // Keep track of other's keys too
function getDeviceObject(encodedNumber) { function getDeviceObject(encodedNumber) {
var deviceObject = storage.getEncrypted("deviceObject" + encodedNumber); return storage.getEncrypted("deviceObject" + getEncodedNumber(encodedNumber));
if (deviceObject === undefined)
return deviceObject;
return JSON.parseJSON(deviceObject);
} }
function getDeviceIdListFromNumber(number) { function getDeviceIdListFromNumber(number) {
@ -164,7 +161,7 @@ function getDeviceIdListFromNumber(number) {
} }
function addDeviceIdForNumber(number, deviceId) { function addDeviceIdForNumber(number, deviceId) {
var deviceIdList = JSON.parseJSON(getDeviceIdListFromNumber(getNumberFromString(number))); var deviceIdList = getDeviceIdListFromNumber(getNumberFromString(number));
for (var i = 0; i < deviceIdList.length; i++) { for (var i = 0; i < deviceIdList.length; i++) {
if (deviceIdList[i] == deviceId) if (deviceIdList[i] == deviceId)
return; return;
@ -176,6 +173,8 @@ function addDeviceIdForNumber(number, deviceId) {
// throws "Identity key mismatch" // throws "Identity key mismatch"
function saveDeviceObject(deviceObject) { function saveDeviceObject(deviceObject) {
var existing = getDeviceObject(deviceObject.encodedNumber); var existing = getDeviceObject(deviceObject.encodedNumber);
if (existing === undefined)
existing = {encodedNumber: getEncodedNumber(deviceObject.encodedNumber)};
for (key in deviceObject) { for (key in deviceObject) {
if (key == "encodedNumber") if (key == "encodedNumber")
continue; continue;
@ -185,7 +184,7 @@ function saveDeviceObject(deviceObject) {
existing[key] = deviceObject[key]; existing[key] = deviceObject[key];
} }
storage.putEncrypted("deviceObject", JSON.encode(existing)); storage.putEncrypted("deviceObject", existing);
addDeviceIdForNumber(deviceObject.encodedNumber, getDeviceId(deviceObject.encodedNumber)); addDeviceIdForNumber(deviceObject.encodedNumber, getDeviceId(deviceObject.encodedNumber));
} }
@ -246,7 +245,7 @@ var URL_CALLS = {};
URL_CALLS['devices'] = "/v1/devices"; URL_CALLS['devices'] = "/v1/devices";
URL_CALLS['keys'] = "/v1/keys"; URL_CALLS['keys'] = "/v1/keys";
URL_CALLS['push'] = "/v1/messagesocket"; URL_CALLS['push'] = "/v1/messagesocket";
URL_CALLS['messages'] = "/v1/messages"; URL_CALLS['messages'] = "/v1/messages/";
/** /**
* REQUIRED PARAMS: * REQUIRED PARAMS:
@ -292,6 +291,7 @@ function doAjax(param) {
}); });
} }
// message_callback(decoded_protobuf) (use decodeMessage(proto))
function subscribeToPush(message_callback) { function subscribeToPush(message_callback) {
var user = storage.getUnencrypted("number_id"); var user = storage.getUnencrypted("number_id");
var password = storage.getEncrypted("password"); var password = storage.getEncrypted("password");
@ -417,5 +417,6 @@ function sendMessageToNumbers(numbers, message, success_callback, error_callback
function requestIdentityPrivKeyFromMasterDevice(number, identityKey) { function requestIdentityPrivKeyFromMasterDevice(number, identityKey) {
sendMessage(number, {message: "Identity Key request"}, function() {}, function() {});//TODO sendMessageToDevices([getDeviceObject(getNumberFromString(number)) + ".1"],
{message: "Identity Key request"}, function() {}, function() {});//TODO
} }

@ -13,15 +13,22 @@
</div> </div>
<div id="verify" style="display: none;"> <div id="verify" style="display: none;">
<div id="verify1">Verifying number and setup code...<span id="verify1done"></span></div> <div id="verify1">Verifying number and setup code...<span id="verify1done"></span></div>
<div id="verify2">Generating keys...<span id="verify2done"></span></div> <div id="verify3">Syncing with existing devices...<span id="verify2done"></span></div>
<div id="verify3">Registering...<span id="verify3done"></span></div> <div id="verify2">Generating keys...<span id="verify3done"></span></div>
<div id="verify3">Syncing with existing devices...<span id="verify4done"></span></div> <div id="verify3">Registering...<span id="verify4done"></span></div>
</div> </div>
<div id="setup-complete" style="display: none;"> <div id="setup-complete" style="display: none;">
<h2>You are now registered on TextSecure with number <span id="complete-number"></span></h2> <h2>You are now registered on TextSecure with number <span id="complete-number"></span></h2>
</div> </div>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.atmosphere.js"></script> <script type="text/javascript" src="jquery.atmosphere.js"></script>
<script type="text/javascript" src="aes.js"></script>
<script type="text/javascript" src="hmac-sha256.js"></script>
<script type="text/javascript" src="lib-typedarrays.js"></script>
<script type="text/javascript" src="Long.min.js"></script>
<script type="text/javascript" src="ByteBuffer.min.js"></script>
<script type="text/javascript" src="ProtoBuf.min.js"></script>
<script type="text/javascript" src="helpers.js"></script> <script type="text/javascript" src="helpers.js"></script>
<script type="text/javascript" src="options.js"></script> <script type="text/javascript" src="options.js"></script>
</body> </body>

@ -35,30 +35,32 @@ $('#init-go').click(function() {
$('#verify3done').html(''); $('#verify3done').html('');
$('#verify').show(); $('#verify').show();
doAjax({call: 'devices', httpType: 'PUT', urlParameters: '/' + $('#code').val(), success_callback: function(response) { doAjax({call: 'devices', httpType: 'PUT', urlParameters: '/' + $('#code').val(), user: number, password: password,
$('#verify1done').html('done'); jsonData: {signalingKey: btoa(getString(signaling_key)), supportsSms: false, fetchesMessages: true},
var keys = generateKeys(); success_callback: function(response) {
$('#verify2done').html('done');
var number_id = number + "." + response; var number_id = number + "." + response;
storage.putUnencrypted("number_id", number_id);
storage.putEncrypted("password", password); storage.putEncrypted("password", password);
storage.putEncrypted('signaling_key', signaling_key); storage.putEncrypted('signaling_key', signaling_key);
storage.putUnencrypted("number_id", number_id);
$('#verify1done').html('done');
doAjax({call: 'keys', httpType: 'PUT', do_auth: true, jsonData: keys, getKeysForNumber(number, function(identityKey) {
success_callback: function(response) { subscribeToPush(function(message) {
//TODO receive spuhared identity key
$('#verify2done').html('done');
var keys = generateKeys();
$('#verify3done').html('done'); $('#verify3done').html('done');
getKeysForNumber(number, function(identityKey) { doAjax({call: 'keys', httpType: 'PUT', do_auth: true, jsonData: keys,
get success_callback: function(response) {
$('#complete-number').html(number); $('#verify4done').html('done');
$('#verify').hide(); }, error_callback: function(code) {
$('#setup-complete').show(); alert(code); //TODO
}, error_callback(error_msg) { }
alert(error_msg); //TODO
}); });
}, error_callback: function(code) { });
alert(code); //TODO requestIdentityPrivKeyFromMasterDevice(number);
} }, function(error_msg) {
alert(error_msg); //TODO
}); });
}, error_callback: function(code) { }, error_callback: function(code) {
var error; var error;
@ -74,8 +76,7 @@ $('#init-go').click(function() {
console.log("Got error code " + code); console.log("Got error code " + code);
} }
alert(error); //TODO alert(error); //TODO
}, user: number, password: password, }
jsonData: {signalingKey: btoa(getString(signaling_key)), supportsSms: false, fetchesMessages: true}
}); });
} }
}); });

@ -3,22 +3,22 @@
<script type="text/javascript" src="jquery-2.0.3.min.js"></script> <script type="text/javascript" src="jquery-2.0.3.min.js"></script>
</head> </head>
<body> <body>
<a id="inbox_link">Inbox</a> <a id="inbox_link">Inbox</a>
<a id="send_link">Send</a> <a id="send_link">Send</a>
<div id="inbox"> <div id="inbox">
<!-- stuff -->
</div>
<div id="send" style="display:none;"></div>
</div> <script type="text/javascript" src="jquery.js"></script>
<div id="send" style="display:none;"></div> <script type="text/javascript" src="jquery.atmosphere.js"></script>
<script type="text/javascript" src="aes.js"></script>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="hmac-sha256.js"></script>
<script type="text/javascript" src="jquery.atmosphere.js"></script> <script type="text/javascript" src="lib-typedarrays.js"></script>
<script type="text/javascript" src="aes.js"></script> <script type="text/javascript" src="Long.min.js"></script>
<script type="text/javascript" src="hmac-sha256.js"></script> <script type="text/javascript" src="ByteBuffer.min.js"></script>
<script type="text/javascript" src="lib-typedarrays.js"></script> <script type="text/javascript" src="ProtoBuf.min.js"></script>
<script type="text/javascript" src="Long.min.js"></script> <script type="text/javascript" src="helpers.js"></script>
<script type="text/javascript" src="ByteBuffer.min.js"></script> <script type="text/javascript" src="popup.js"></script>
<script type="text/javascript" src="ProtoBuf.min.js"></script>
<script type="text/javascript" src="helpers.js"></script>
<script type="text/javascript" src="popup.js"></script>
</body> </body>
</html> </html>

Loading…
Cancel
Save