Use deviceIds/addresses instead of encodedNumbers
The getDeviceObjectsForNumber method returns device objects that contain nothing but the encodedNumber property. Instead, just deal in deviceIds until a SignalProtocolAddress is constructed to manage both the number and deviceId. // FREEBIE
This commit is contained in:
parent
95935f70ee
commit
d32a352d8a
3 changed files with 30 additions and 32 deletions
|
@ -38568,11 +38568,11 @@ OutgoingMessage.prototype = {
|
||||||
},
|
},
|
||||||
reloadDevicesAndSend: function(number, recurse) {
|
reloadDevicesAndSend: function(number, recurse) {
|
||||||
return function() {
|
return function() {
|
||||||
return textsecure.storage.devices.getDeviceObjectsForNumber(number).then(function(devicesForNumber) {
|
return textsecure.storage.protocol.getDeviceIds(number).then(function(deviceIds) {
|
||||||
if (devicesForNumber.length == 0) {
|
if (deviceIds.length == 0) {
|
||||||
return this.registerError(number, "Got empty device list when loading device keys", null);
|
return this.registerError(number, "Got empty device list when loading device keys", null);
|
||||||
}
|
}
|
||||||
return this.doSendMessage(number, devicesForNumber, recurse);
|
return this.doSendMessage(number, deviceIds, recurse);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
}.bind(this);
|
}.bind(this);
|
||||||
},
|
},
|
||||||
|
@ -38623,14 +38623,14 @@ OutgoingMessage.prototype = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
doSendMessage: function(number, devicesForNumber, recurse) {
|
doSendMessage: function(number, deviceIds, recurse) {
|
||||||
var ciphers = {};
|
var ciphers = {};
|
||||||
var plaintext = this.message.toArrayBuffer();
|
var plaintext = this.message.toArrayBuffer();
|
||||||
return Promise.all(devicesForNumber.map(function(device) {
|
return Promise.all(deviceIds.map(function(deviceId) {
|
||||||
var address = libsignal.SignalProtocolAddress.fromString(device.encodedNumber);
|
var address = new libsignal.SignalProtocolAddress(number, deviceId);
|
||||||
var sessionCipher = new libsignal.SessionCipher(textsecure.storage.protocol, address);
|
var sessionCipher = new libsignal.SessionCipher(textsecure.storage.protocol, address);
|
||||||
ciphers[address.getDeviceId()] = sessionCipher;
|
ciphers[address.getDeviceId()] = sessionCipher;
|
||||||
return this.encryptToDevice(device, plaintext, sessionCipher);
|
return this.encryptToDevice(address, plaintext, sessionCipher);
|
||||||
}.bind(this))).then(function(jsonData) {
|
}.bind(this))).then(function(jsonData) {
|
||||||
return this.transmitMessage(number, jsonData, this.timestamp).then(function() {
|
return this.transmitMessage(number, jsonData, this.timestamp).then(function() {
|
||||||
this.successfulNumbers[this.successfulNumbers.length] = number;
|
this.successfulNumbers[this.successfulNumbers.length] = number;
|
||||||
|
@ -38664,19 +38664,19 @@ OutgoingMessage.prototype = {
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
encryptToDevice: function(device, plaintext, sessionCipher) {
|
encryptToDevice: function(address, plaintext, sessionCipher) {
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
sessionCipher.encrypt(plaintext),
|
sessionCipher.encrypt(plaintext),
|
||||||
sessionCipher.getRemoteRegistrationId()
|
sessionCipher.getRemoteRegistrationId()
|
||||||
]).then(function(result) {
|
]).then(function(result) {
|
||||||
return this.toJSON(device, result[0], result[1]);
|
return this.toJSON(address, result[0], result[1]);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
toJSON: function(device, encryptedMsg, registrationId) {
|
toJSON: function(address, encryptedMsg, registrationId) {
|
||||||
var json = {
|
var json = {
|
||||||
type: encryptedMsg.type,
|
type: encryptedMsg.type,
|
||||||
destinationDeviceId: textsecure.utils.unencodeNumber(device.encodedNumber)[1],
|
destinationDeviceId: address.getDeviceId(),
|
||||||
destinationRegistrationId: registrationId
|
destinationRegistrationId: registrationId
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -38998,11 +38998,10 @@ MessageSender.prototype = {
|
||||||
proto.body = "TERMINATE";
|
proto.body = "TERMINATE";
|
||||||
proto.flags = textsecure.protobuf.DataMessage.Flags.END_SESSION;
|
proto.flags = textsecure.protobuf.DataMessage.Flags.END_SESSION;
|
||||||
return this.sendIndividualProto(number, proto, timestamp).then(function(res) {
|
return this.sendIndividualProto(number, proto, timestamp).then(function(res) {
|
||||||
return textsecure.storage.devices.getDeviceObjectsForNumber(number).then(function(devices) {
|
return textsecure.storage.protocol.getDeviceIds(number).then(function(deviceIds) {
|
||||||
return Promise.all(devices.map(function(device) {
|
return Promise.all(deviceIds.map(function(deviceId) {
|
||||||
console.log('closing session for', device.encodedNumber);
|
var address = new libsignal.SignalProtocolAddress(number, deviceId);
|
||||||
|
console.log('closing session for', address.toString());
|
||||||
var address = libsignal.SignalProtocolAddress.fromString(device.encodedNumber);
|
|
||||||
var sessionCipher = new libsignal.SessionCipher(textsecure.storage.protocol, address);
|
var sessionCipher = new libsignal.SessionCipher(textsecure.storage.protocol, address);
|
||||||
return sessionCipher.closeOpenSessionForDevice();
|
return sessionCipher.closeOpenSessionForDevice();
|
||||||
})).then(function() {
|
})).then(function() {
|
||||||
|
|
|
@ -34,11 +34,11 @@ OutgoingMessage.prototype = {
|
||||||
},
|
},
|
||||||
reloadDevicesAndSend: function(number, recurse) {
|
reloadDevicesAndSend: function(number, recurse) {
|
||||||
return function() {
|
return function() {
|
||||||
return textsecure.storage.devices.getDeviceObjectsForNumber(number).then(function(devicesForNumber) {
|
return textsecure.storage.protocol.getDeviceIds(number).then(function(deviceIds) {
|
||||||
if (devicesForNumber.length == 0) {
|
if (deviceIds.length == 0) {
|
||||||
return this.registerError(number, "Got empty device list when loading device keys", null);
|
return this.registerError(number, "Got empty device list when loading device keys", null);
|
||||||
}
|
}
|
||||||
return this.doSendMessage(number, devicesForNumber, recurse);
|
return this.doSendMessage(number, deviceIds, recurse);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
}.bind(this);
|
}.bind(this);
|
||||||
},
|
},
|
||||||
|
@ -89,14 +89,14 @@ OutgoingMessage.prototype = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
doSendMessage: function(number, devicesForNumber, recurse) {
|
doSendMessage: function(number, deviceIds, recurse) {
|
||||||
var ciphers = {};
|
var ciphers = {};
|
||||||
var plaintext = this.message.toArrayBuffer();
|
var plaintext = this.message.toArrayBuffer();
|
||||||
return Promise.all(devicesForNumber.map(function(device) {
|
return Promise.all(deviceIds.map(function(deviceId) {
|
||||||
var address = libsignal.SignalProtocolAddress.fromString(device.encodedNumber);
|
var address = new libsignal.SignalProtocolAddress(number, deviceId);
|
||||||
var sessionCipher = new libsignal.SessionCipher(textsecure.storage.protocol, address);
|
var sessionCipher = new libsignal.SessionCipher(textsecure.storage.protocol, address);
|
||||||
ciphers[address.getDeviceId()] = sessionCipher;
|
ciphers[address.getDeviceId()] = sessionCipher;
|
||||||
return this.encryptToDevice(device, plaintext, sessionCipher);
|
return this.encryptToDevice(address, plaintext, sessionCipher);
|
||||||
}.bind(this))).then(function(jsonData) {
|
}.bind(this))).then(function(jsonData) {
|
||||||
return this.transmitMessage(number, jsonData, this.timestamp).then(function() {
|
return this.transmitMessage(number, jsonData, this.timestamp).then(function() {
|
||||||
this.successfulNumbers[this.successfulNumbers.length] = number;
|
this.successfulNumbers[this.successfulNumbers.length] = number;
|
||||||
|
@ -130,19 +130,19 @@ OutgoingMessage.prototype = {
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
encryptToDevice: function(device, plaintext, sessionCipher) {
|
encryptToDevice: function(address, plaintext, sessionCipher) {
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
sessionCipher.encrypt(plaintext),
|
sessionCipher.encrypt(plaintext),
|
||||||
sessionCipher.getRemoteRegistrationId()
|
sessionCipher.getRemoteRegistrationId()
|
||||||
]).then(function(result) {
|
]).then(function(result) {
|
||||||
return this.toJSON(device, result[0], result[1]);
|
return this.toJSON(address, result[0], result[1]);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
toJSON: function(device, encryptedMsg, registrationId) {
|
toJSON: function(address, encryptedMsg, registrationId) {
|
||||||
var json = {
|
var json = {
|
||||||
type: encryptedMsg.type,
|
type: encryptedMsg.type,
|
||||||
destinationDeviceId: textsecure.utils.unencodeNumber(device.encodedNumber)[1],
|
destinationDeviceId: address.getDeviceId(),
|
||||||
destinationRegistrationId: registrationId
|
destinationRegistrationId: registrationId
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -295,11 +295,10 @@ MessageSender.prototype = {
|
||||||
proto.body = "TERMINATE";
|
proto.body = "TERMINATE";
|
||||||
proto.flags = textsecure.protobuf.DataMessage.Flags.END_SESSION;
|
proto.flags = textsecure.protobuf.DataMessage.Flags.END_SESSION;
|
||||||
return this.sendIndividualProto(number, proto, timestamp).then(function(res) {
|
return this.sendIndividualProto(number, proto, timestamp).then(function(res) {
|
||||||
return textsecure.storage.devices.getDeviceObjectsForNumber(number).then(function(devices) {
|
return textsecure.storage.protocol.getDeviceIds(number).then(function(deviceIds) {
|
||||||
return Promise.all(devices.map(function(device) {
|
return Promise.all(deviceIds.map(function(deviceId) {
|
||||||
console.log('closing session for', device.encodedNumber);
|
var address = new libsignal.SignalProtocolAddress(number, deviceId);
|
||||||
|
console.log('closing session for', address.toString());
|
||||||
var address = libsignal.SignalProtocolAddress.fromString(device.encodedNumber);
|
|
||||||
var sessionCipher = new libsignal.SessionCipher(textsecure.storage.protocol, address);
|
var sessionCipher = new libsignal.SessionCipher(textsecure.storage.protocol, address);
|
||||||
return sessionCipher.closeOpenSessionForDevice();
|
return sessionCipher.closeOpenSessionForDevice();
|
||||||
})).then(function() {
|
})).then(function() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue