processVerifiedMessage: Trigger keychange event when key differs

FREEBIE
pull/749/head
Scott Nonnenberg 8 years ago
parent 0db2ef9e7f
commit 0056cbefc1

@ -604,6 +604,10 @@
|| (isPresent && !isEqual) || (isPresent && !isEqual)
|| (isPresent && identityRecord.get('verified') !== VerifiedStatus.VERIFIED))) { || (isPresent && identityRecord.get('verified') !== VerifiedStatus.VERIFIED))) {
if (!isPresent || !isEqual) {
this.trigger('keychange', identifier);
}
textsecure.storage.protocol.saveIdentityWithAttributes(identifier, { textsecure.storage.protocol.saveIdentityWithAttributes(identifier, {
publicKey : publicKey, publicKey : publicKey,
verified : verifiedStatus, verified : verifiedStatus,
@ -612,8 +616,8 @@
nonblockingApproval : true nonblockingApproval : true
}).then(resolve, reject); }).then(resolve, reject);
} }
}); }.bind(this));
}); }.bind(this));
}, },
isUntrusted: function(identifier) { isUntrusted: function(identifier) {
if (identifier === null || identifier === undefined) { if (identifier === null || identifier === undefined) {

@ -352,12 +352,21 @@ describe("SignalProtocolStore", function() {
} }
describe('when the new verified status is DEFAULT', function() { describe('when the new verified status is DEFAULT', function() {
describe('when there is no existing record', function() { describe('when there is no existing record', function() {
var keychangeTriggered;
before(function() { before(function() {
keychangeTriggered = 0;
store.bind('keychange', function() {
keychangeTriggered++;
});
record = new IdentityKeyRecord({ id: identifier }); record = new IdentityKeyRecord({ id: identifier });
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
record.destroy().then(resolve, reject); record.destroy().then(resolve, reject);
}); });
}); });
after(function() {
store.unbind('keychange');
});
it ('does nothing', function() { it ('does nothing', function() {
return store.processVerifiedMessage( return store.processVerifiedMessage(
@ -367,12 +376,19 @@ describe("SignalProtocolStore", function() {
// Bad. // Bad.
throw new Error("processVerifiedMessage should not save new records"); throw new Error("processVerifiedMessage should not save new records");
}, function() { }, function() {
assert.strictEqual(keychangeTriggered, 0);
return; return;
}); });
}); });
}); });
describe('when the record exists and is not DEFAULT and the key matches', function() { describe('when the record exists and is not DEFAULT and the key matches', function() {
var keychangeTriggered;
before(function() { before(function() {
keychangeTriggered = 0;
store.bind('keychange', function() {
keychangeTriggered++;
});
record = new IdentityKeyRecord({ record = new IdentityKeyRecord({
id : identifier, id : identifier,
publicKey : testKey.pubKey, publicKey : testKey.pubKey,
@ -385,24 +401,39 @@ describe("SignalProtocolStore", function() {
record.save().then(resolve, reject); record.save().then(resolve, reject);
}); });
}); });
after(function() {
store.unbind('keychange');
});
it ('updates the verified status', function() { it ('updates the verified status', function() {
return store.processVerifiedMessage( return store.processVerifiedMessage(
identifier, store.VerifiedStatus.DEFAULT, testKey.pubKey identifier, store.VerifiedStatus.DEFAULT, testKey.pubKey
).then(fetchRecord).then(function() { ).then(fetchRecord).then(function() {
assert.strictEqual(record.get('verified'), store.VerifiedStatus.DEFAULT); assert.strictEqual(record.get('verified'), store.VerifiedStatus.DEFAULT);
assertEqualArrayBuffers(record.get('publicKey'), testKey.pubKey); assertEqualArrayBuffers(record.get('publicKey'), testKey.pubKey);
assert.strictEqual(keychangeTriggered, 0);
}); });
}); });
}); });
}); });
describe('when the new verified status is VERIFIED', function() { describe('when the new verified status is VERIFIED', function() {
describe('when there is no existing record', function() { describe('when there is no existing record', function() {
var keychangeTriggered;
before(function() { before(function() {
keychangeTriggered = 0;
store.bind('keychange', function() {
keychangeTriggered++;
});
record = new IdentityKeyRecord({ id: identifier }); record = new IdentityKeyRecord({ id: identifier });
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
record.destroy().then(resolve, reject); record.destroy().then(resolve, reject);
}); });
}); });
after(function() {
store.unbind('keychange');
});
it ('saves the new identity and marks it verified', function() { it ('saves the new identity and marks it verified', function() {
return store.processVerifiedMessage( return store.processVerifiedMessage(
@ -410,12 +441,20 @@ describe("SignalProtocolStore", function() {
).then(fetchRecord).then(function() { ).then(fetchRecord).then(function() {
assert.strictEqual(record.get('verified'), store.VerifiedStatus.VERIFIED); assert.strictEqual(record.get('verified'), store.VerifiedStatus.VERIFIED);
assertEqualArrayBuffers(record.get('publicKey'), newIdentity); assertEqualArrayBuffers(record.get('publicKey'), newIdentity);
assert.strictEqual(keychangeTriggered, 1);
}); });
}); });
}); });
describe('when the record exists record', function() { describe('when the record exists', function() {
describe('when the existing key is different', function() { describe('when the existing key is different', function() {
var keychangeTriggered;
before(function() { before(function() {
keychangeTriggered = 0;
store.bind('keychange', function() {
keychangeTriggered++;
});
record = new IdentityKeyRecord({ record = new IdentityKeyRecord({
id : identifier, id : identifier,
publicKey : testKey.pubKey, publicKey : testKey.pubKey,
@ -428,17 +467,29 @@ describe("SignalProtocolStore", function() {
record.save().then(resolve, reject); record.save().then(resolve, reject);
}); });
}); });
after(function() {
store.unbind('keychange');
});
it ('saves the new identity and marks it verified', function() { it ('saves the new identity and marks it verified', function() {
return store.processVerifiedMessage( return store.processVerifiedMessage(
identifier, store.VerifiedStatus.VERIFIED, newIdentity identifier, store.VerifiedStatus.VERIFIED, newIdentity
).then(fetchRecord).then(function() { ).then(fetchRecord).then(function() {
assert.strictEqual(record.get('verified'), store.VerifiedStatus.VERIFIED); assert.strictEqual(record.get('verified'), store.VerifiedStatus.VERIFIED);
assertEqualArrayBuffers(record.get('publicKey'), newIdentity); assertEqualArrayBuffers(record.get('publicKey'), newIdentity);
assert.strictEqual(keychangeTriggered, 1);
}); });
}); });
}); });
describe('when the existing key is the same and not verified', function() { describe('when the existing key is the same and not verified', function() {
var keychangeTriggered;
before(function() { before(function() {
keychangeTriggered = 0;
store.bind('keychange', function() {
keychangeTriggered++;
});
record = new IdentityKeyRecord({ record = new IdentityKeyRecord({
id : identifier, id : identifier,
publicKey : testKey.pubKey, publicKey : testKey.pubKey,
@ -451,6 +502,9 @@ describe("SignalProtocolStore", function() {
record.save().then(resolve, reject); record.save().then(resolve, reject);
}); });
}); });
after(function() {
store.unbind('keychange');
});
it ('saves the identity and marks it verified', function() { it ('saves the identity and marks it verified', function() {
return store.processVerifiedMessage( return store.processVerifiedMessage(
@ -458,6 +512,7 @@ describe("SignalProtocolStore", function() {
).then(fetchRecord).then(function() { ).then(fetchRecord).then(function() {
assert.strictEqual(record.get('verified'), store.VerifiedStatus.VERIFIED); assert.strictEqual(record.get('verified'), store.VerifiedStatus.VERIFIED);
assertEqualArrayBuffers(record.get('publicKey'), testKey.pubKey); assertEqualArrayBuffers(record.get('publicKey'), testKey.pubKey);
assert.strictEqual(keychangeTriggered, 0);
}); });
}); });
}); });

Loading…
Cancel
Save