Fix attachment ids

Parse attachment ids out of the attachment pointer url and return them
as strings because the copy parsed by JSON suffers a loss of precision.
Convert them to and from the format expected by the protobuf using
facilities from decodeIO.Long.
This commit is contained in:
lilia 2014-10-25 18:01:33 -07:00
parent eebb14599f
commit 211129475c
3 changed files with 26 additions and 21 deletions

View file

@ -27,6 +27,7 @@ window.textsecure.api = function() {
// Staging server
var URL_BASE = "https://textsecure-service-staging.whispersystems.org";
self.relay = "textsecure-service-staging.whispersystems.org";
var ATTACHMENT_HOST = "whispersystems-textsecure-attachments-staging.s3.amazonaws.com"
// This is the real server
//var URL_BASE = "https://textsecure-service.whispersystems.org";
@ -253,6 +254,7 @@ window.textsecure.api = function() {
});
};
var id_regex = RegExp( "^https:\/\/" + ATTACHMENT_HOST + "\/(\\d+)\?");
self.putAttachment = function(encryptedBin) {
return doAjax({
call : 'attachment',
@ -261,27 +263,30 @@ window.textsecure.api = function() {
}).then(function(response) {
return new Promise(function(resolve, reject) {
$.ajax(response.location, {
type : "PUT",
headers: {
"Content-Type": "application/octet-stream"
type : "PUT",
headers : {"Content-Type" : "application/octet-stream"},
data : encryptedBin,
success : function() {
try {
// Parse the id as a string from the location url
// (workaround for ids too large for Javascript numbers)
var id = response.location.match(id_regex)[1];
resolve(id);
} catch(e) {
reject(e);
}
},
data: encryptedBin,
error : function(jqXHR, textStatus, errorThrown) {
var code = jqXHR.status;
if (code > 999 || code < 100)
code = -1;
success : function() {
resolve(response.id);
},
error : function(jqXHR, textStatus, errorThrown) {
var code = jqXHR.status;
if (code > 999 || code < 100)
code = -1;
var e = new Error(code);
e.name = "HTTPError";
if (jqXHR.responseJSON)
e.response = jqXHR.responseJSON;
reject(e);
}
var e = new Error(code);
e.name = "HTTPError";
if (jqXHR.responseJSON)
e.response = jqXHR.responseJSON;
reject(e);
}
});
});
});

View file

@ -593,7 +593,7 @@ window.textsecure.subscribeToPush = function(message_callback) {
throw new Error("Unknown flags in message");
var handleAttachment = function(attachment) {
return textsecure.api.getAttachment(attachment.id).then(function(encryptedBin) {
return textsecure.api.getAttachment(attachment.id.toString()).then(function(encryptedBin) {
return textsecure.crypto.decryptAttachment(encryptedBin, toArrayBuffer(attachment.key)).then(function(decryptedBin) {
attachment.decrypted = decryptedBin;
});

View file

@ -200,7 +200,7 @@ window.textsecure.messaging = function() {
var iv = textsecure.crypto.getRandomBytes(16);
return textsecure.crypto.encryptAttachment(attachment.data, proto.key, iv).then(function(encryptedBin) {
return textsecure.api.putAttachment(encryptedBin).then(function(id) {
proto.id = id;
proto.id = dcodeIO.Long.fromString(id);
proto.contentType = attachment.contentType;
return proto;
});