processVerifiedMessage: Trigger keychange event when key differs
FREEBIE
This commit is contained in:
parent
0db2ef9e7f
commit
0056cbefc1
2 changed files with 62 additions and 3 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue