Working registration

This commit is contained in:
Matt Corallo 2014-01-11 22:49:46 -10:00
parent aa8fe6f9d0
commit 7e811c2855
4 changed files with 60 additions and 51 deletions

View File

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

View File

@ -13,15 +13,22 @@
</div>
<div id="verify" style="display: none;">
<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">Registering...<span id="verify3done"></span></div>
<div id="verify3">Syncing with existing devices...<span id="verify4done"></span></div>
<div id="verify3">Syncing with existing devices...<span id="verify2done"></span></div>
<div id="verify2">Generating keys...<span id="verify3done"></span></div>
<div id="verify3">Registering...<span id="verify4done"></span></div>
</div>
<div id="setup-complete" style="display: none;">
<h2>You are now registered on TextSecure with number <span id="complete-number"></span></h2>
</div>
<script type="text/javascript" src="jquery.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="options.js"></script>
</body>

View File

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

View File

@ -3,22 +3,22 @@
<script type="text/javascript" src="jquery-2.0.3.min.js"></script>
</head>
<body>
<a id="inbox_link">Inbox</a>
<a id="send_link">Send</a>
<div id="inbox">
<a id="inbox_link">Inbox</a>
<a id="send_link">Send</a>
<div id="inbox">
<!-- stuff -->
</div>
<div id="send" style="display:none;"></div>
</div>
<div id="send" style="display:none;"></div>
<script type="text/javascript" src="jquery.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="popup.js"></script>
<script type="text/javascript" src="jquery.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="popup.js"></script>
</body>
</html>