Extract app-level logic from libtextsecure

Ensure that both tryAgain functions return promises, allowing the
application to take appropriate action in the result of success or
failure. This lets us remove all dependency from libtextsecure on
app-level constructs like message objects/ids and the `extenion.trigger`
function.

Corresponding frontend changes to follow in another commit.
pull/749/head
lilia 10 years ago
parent e88d4d8170
commit c642854ddf

@ -110,7 +110,6 @@
)); ));
}).catch(function(e) { }).catch(function(e) {
if (e.name === 'IncomingIdentityKeyError') { if (e.name === 'IncomingIdentityKeyError') {
e.args.push(message.id);
message.save({ errors : [e] }).then(function() { message.save({ errors : [e] }).then(function() {
extension.trigger('message', message); extension.trigger('message', message);
notifyConversation(message); notifyConversation(message);

@ -37819,18 +37819,11 @@ window.axolotl.sessions = {
} }
}; };
var wipeIdentityAndTryMessageAgain = function(from, encodedMessage, message_id) { var wipeIdentityAndTryMessageAgain = function(from, encodedMessage) {
// Wipe identity key! // Wipe identity key!
textsecure.storage.devices.removeIdentityKeyForNumber(from.split('.')[0]); textsecure.storage.devices.removeIdentityKeyForNumber(from.split('.')[0]);
//TODO: Probably breaks with a devicecontrol message //TODO: Probably breaks with a devicecontrol message
return textsecure.protocol_wrapper.handlePreKeyWhisperMessage(from, encodedMessage).then(decodeMessageContents).then( return textsecure.protocol_wrapper.handlePreKeyWhisperMessage(from, encodedMessage).then(decodeMessageContents);
function(pushMessageContent) {
extension.trigger('message:decrypted', {
message_id : message_id,
data : pushMessageContent
});
}
);
} }
textsecure.replay.registerFunction(wipeIdentityAndTryMessageAgain, textsecure.replay.Type.INIT_SESSION); textsecure.replay.registerFunction(wipeIdentityAndTryMessageAgain, textsecure.replay.Type.INIT_SESSION);
})(); })();
@ -39451,20 +39444,15 @@ window.textsecure.messaging = function() {
} }
} }
var tryMessageAgain = function(number, encodedMessage, message_id) { var tryMessageAgain = function(number, encodedMessage, timestamp) {
var message = new Whisper.MessageCollection().add({id: message_id}); textsecure.storage.devices.removeIdentityKeyForNumber(number);
message.fetch().then(function() { var proto = textsecure.protobuf.PushMessageContent.decode(encodedMessage, 'binary');
//TODO: Encapsuate with the rest of textsecure.storage.devices return new Promise(function(resolve, reject) {
textsecure.storage.devices.removeIdentityKeyForNumber(number); sendMessageProto(timestamp, [number], proto, function(res) {
var proto = textsecure.protobuf.PushMessageContent.decode(encodedMessage, 'binary');
sendMessageProto(message.get('sent_at'), [number], proto, function(res) {
if (res.failure.length > 0) if (res.failure.length > 0)
message.set('errors', res.failure); reject(res.failure);
else else
message.set('errors', []); resolve();
message.save().then(function(){
extension.trigger('message', message); // notify frontend listeners
});
}); });
}); });
}; };
@ -39525,7 +39513,7 @@ window.textsecure.messaging = function() {
if (error.message !== "Identity key changed") if (error.message !== "Identity key changed")
registerError(number, "Failed to reload device keys", error); registerError(number, "Failed to reload device keys", error);
else { else {
error = new textsecure.OutgoingIdentityKeyError(number, getString(message.encode())); error = new textsecure.OutgoingIdentityKeyError(number, getString(message.encode()), timestamp);
registerError(number, "Identity key changed", error); registerError(number, "Identity key changed", error);
} }
}); });

@ -97,7 +97,6 @@
var keyErrors = []; var keyErrors = [];
_.each(errors, function(e) { _.each(errors, function(e) {
if (e.error.name === 'OutgoingIdentityKeyError') { if (e.error.name === 'OutgoingIdentityKeyError') {
e.error.args.push(message.id);
keyErrors.push(e.error); keyErrors.push(e.error);
} }
}); });

@ -119,18 +119,11 @@
} }
}; };
var wipeIdentityAndTryMessageAgain = function(from, encodedMessage, message_id) { var wipeIdentityAndTryMessageAgain = function(from, encodedMessage) {
// Wipe identity key! // Wipe identity key!
textsecure.storage.devices.removeIdentityKeyForNumber(from.split('.')[0]); textsecure.storage.devices.removeIdentityKeyForNumber(from.split('.')[0]);
//TODO: Probably breaks with a devicecontrol message //TODO: Probably breaks with a devicecontrol message
return textsecure.protocol_wrapper.handlePreKeyWhisperMessage(from, encodedMessage).then(decodeMessageContents).then( return textsecure.protocol_wrapper.handlePreKeyWhisperMessage(from, encodedMessage).then(decodeMessageContents);
function(pushMessageContent) {
extension.trigger('message:decrypted', {
message_id : message_id,
data : pushMessageContent
});
}
);
} }
textsecure.replay.registerFunction(wipeIdentityAndTryMessageAgain, textsecure.replay.Type.INIT_SESSION); textsecure.replay.registerFunction(wipeIdentityAndTryMessageAgain, textsecure.replay.Type.INIT_SESSION);
})(); })();

@ -127,20 +127,15 @@ window.textsecure.messaging = function() {
} }
} }
var tryMessageAgain = function(number, encodedMessage, message_id) { var tryMessageAgain = function(number, encodedMessage, timestamp) {
var message = new Whisper.MessageCollection().add({id: message_id}); textsecure.storage.devices.removeIdentityKeyForNumber(number);
message.fetch().then(function() { var proto = textsecure.protobuf.PushMessageContent.decode(encodedMessage, 'binary');
//TODO: Encapsuate with the rest of textsecure.storage.devices return new Promise(function(resolve, reject) {
textsecure.storage.devices.removeIdentityKeyForNumber(number); sendMessageProto(timestamp, [number], proto, function(res) {
var proto = textsecure.protobuf.PushMessageContent.decode(encodedMessage, 'binary');
sendMessageProto(message.get('sent_at'), [number], proto, function(res) {
if (res.failure.length > 0) if (res.failure.length > 0)
message.set('errors', res.failure); reject(res.failure);
else else
message.set('errors', []); resolve();
message.save().then(function(){
extension.trigger('message', message); // notify frontend listeners
});
}); });
}); });
}; };
@ -201,7 +196,7 @@ window.textsecure.messaging = function() {
if (error.message !== "Identity key changed") if (error.message !== "Identity key changed")
registerError(number, "Failed to reload device keys", error); registerError(number, "Failed to reload device keys", error);
else { else {
error = new textsecure.OutgoingIdentityKeyError(number, getString(message.encode())); error = new textsecure.OutgoingIdentityKeyError(number, getString(message.encode()), timestamp);
registerError(number, "Identity key changed", error); registerError(number, "Identity key changed", error);
} }
}); });

Loading…
Cancel
Save