isUntrusted: Return false if firstUse is true
Because users will see this upon first trying to communicate with a new contact if they're quick about it. FREEBIE
This commit is contained in:
parent
f38d715250
commit
ef3431af1b
2 changed files with 75 additions and 6 deletions
|
@ -726,7 +726,8 @@
|
||||||
var identityRecord = new IdentityRecord({id: identifier});
|
var identityRecord = new IdentityRecord({id: identifier});
|
||||||
identityRecord.fetch().then(function() {
|
identityRecord.fetch().then(function() {
|
||||||
if (Date.now() - identityRecord.get('timestamp') < TIMESTAMP_THRESHOLD
|
if (Date.now() - identityRecord.get('timestamp') < TIMESTAMP_THRESHOLD
|
||||||
&& !identityRecord.get('nonblockingApproval')) {
|
&& !identityRecord.get('nonblockingApproval')
|
||||||
|
&& !identityRecord.get('firstUse')) {
|
||||||
resolve(true);
|
resolve(true);
|
||||||
} else {
|
} else {
|
||||||
resolve(false);
|
resolve(false);
|
||||||
|
|
|
@ -6,6 +6,12 @@ describe("SignalProtocolStore", function() {
|
||||||
var identityKey;
|
var identityKey;
|
||||||
var testKey;
|
var testKey;
|
||||||
|
|
||||||
|
function wrapDeferred(deferred) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
return deferred.then(resolve, reject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
before(function(done) {
|
before(function(done) {
|
||||||
store = textsecure.storage.protocol;
|
store = textsecure.storage.protocol;
|
||||||
identityKey = {
|
identityKey = {
|
||||||
|
@ -360,11 +366,6 @@ describe("SignalProtocolStore", function() {
|
||||||
var newIdentity = libsignal.crypto.getRandomBytes(33);
|
var newIdentity = libsignal.crypto.getRandomBytes(33);
|
||||||
var keychangeTriggered;
|
var keychangeTriggered;
|
||||||
|
|
||||||
function wrapDeferred(deferred) {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
return deferred.then(resolve, reject);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function fetchRecord() {
|
function fetchRecord() {
|
||||||
return wrapDeferred(record.fetch());
|
return wrapDeferred(record.fetch());
|
||||||
}
|
}
|
||||||
|
@ -646,6 +647,73 @@ describe("SignalProtocolStore", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('isUntrusted', function() {
|
||||||
|
it('returns false if identity key old enough', function() {
|
||||||
|
var record = new IdentityKeyRecord({
|
||||||
|
id : identifier,
|
||||||
|
publicKey : testKey.pubKey,
|
||||||
|
timestamp : Date.now() - 10 * 1000 * 60,
|
||||||
|
verified : store.VerifiedStatus.DEFAULT,
|
||||||
|
firstUse : false,
|
||||||
|
nonblockingApproval : false
|
||||||
|
});
|
||||||
|
return wrapDeferred(record.save()).then(function() {
|
||||||
|
return store.isUntrusted(identifier);
|
||||||
|
}).then(function(untrusted) {
|
||||||
|
assert.strictEqual(untrusted, false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns false if new but nonblockingApproval is true', function() {
|
||||||
|
var record = new IdentityKeyRecord({
|
||||||
|
id : identifier,
|
||||||
|
publicKey : testKey.pubKey,
|
||||||
|
timestamp : Date.now(),
|
||||||
|
verified : store.VerifiedStatus.DEFAULT,
|
||||||
|
firstUse : false,
|
||||||
|
nonblockingApproval : true
|
||||||
|
});
|
||||||
|
return wrapDeferred(record.save()).then(function() {
|
||||||
|
return store.isUntrusted(identifier);
|
||||||
|
}).then(function(untrusted) {
|
||||||
|
assert.strictEqual(untrusted, false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns false if new but firstUse is true', function() {
|
||||||
|
var record = new IdentityKeyRecord({
|
||||||
|
id : identifier,
|
||||||
|
publicKey : testKey.pubKey,
|
||||||
|
timestamp : Date.now(),
|
||||||
|
verified : store.VerifiedStatus.DEFAULT,
|
||||||
|
firstUse : true,
|
||||||
|
nonblockingApproval : false
|
||||||
|
});
|
||||||
|
return wrapDeferred(record.save()).then(function() {
|
||||||
|
return store.isUntrusted(identifier);
|
||||||
|
}).then(function(untrusted) {
|
||||||
|
assert.strictEqual(untrusted, false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns true if new, and no flags are set', function() {
|
||||||
|
var record = new IdentityKeyRecord({
|
||||||
|
id : identifier,
|
||||||
|
publicKey : testKey.pubKey,
|
||||||
|
timestamp : Date.now(),
|
||||||
|
verified : store.VerifiedStatus.DEFAULT,
|
||||||
|
firstUse : false,
|
||||||
|
nonblockingApproval : false
|
||||||
|
});
|
||||||
|
return wrapDeferred(record.save()).then(function() {
|
||||||
|
return store.isUntrusted(identifier);
|
||||||
|
}).then(function(untrusted) {
|
||||||
|
assert.strictEqual(untrusted, true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('getVerified', function() {
|
describe('getVerified', function() {
|
||||||
before(function(done) {
|
before(function(done) {
|
||||||
store.setVerified(identifier, store.VerifiedStatus.VERIFIED).then(done, done);
|
store.setVerified(identifier, store.VerifiedStatus.VERIFIED).then(done, done);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue