1
0
mirror of https://github.com/moparisthebest/mail synced 2024-11-24 18:02:15 -05:00

Ignore keys from HKP server in keychain.getUserKeyPair

Remove unused getPublicKeys function
This commit is contained in:
Tankred Hase 2015-02-10 15:21:04 +01:00
parent f8e5ea6d89
commit 5bf0890c02
2 changed files with 43 additions and 80 deletions

View File

@ -57,40 +57,6 @@ Keychain.prototype.verifyPublicKey = function(uuid) {
return this._publicKeyDao.verify(uuid); return this._publicKeyDao.verify(uuid);
}; };
/**
* Get an array of public keys by looking in local storage and
* fetching missing keys from the cloud service.
* @param ids [Array] the key ids as [{_id, userId}]
* @return [PublicKeyCollection] The requiested public keys
*/
Keychain.prototype.getPublicKeys = function(ids) {
var self = this,
jobs = [],
pubkeys = [];
ids.forEach(function(i) {
// lookup locally and in storage
var promise = self.lookupPublicKey(i._id).then(function(pubkey) {
if (!pubkey) {
throw new Error('Error looking up public key!');
}
// check if public key with that id has already been fetched
var already = _.findWhere(pubkeys, {
_id: i._id
});
if (!already) {
pubkeys.push(pubkey);
}
});
jobs.push(promise);
});
return Promise.all(jobs).then(function() {
return pubkeys;
});
};
/** /**
* Checks for public key updates of a given user id * Checks for public key updates of a given user id
* @param {String} options.userId The user id (email address) for which to check the key * @param {String} options.userId The user id (email address) for which to check the key
@ -191,7 +157,7 @@ Keychain.prototype.getReceiverPublicKey = function(userId) {
var pubkey = _.findWhere(allPubkeys, { var pubkey = _.findWhere(allPubkeys, {
userId: userId userId: userId
}); });
// query mutliple userIds (for imported public keys) // query mutliple userIds
if (!pubkey) { if (!pubkey) {
for (var i = 0, match; i < allPubkeys.length; i++) { for (var i = 0, match; i < allPubkeys.length; i++) {
userIds = self._pgp.getKeyParams(allPubkeys[i].publicKey).userIds; userIds = self._pgp.getKeyParams(allPubkeys[i].publicKey).userIds;
@ -636,7 +602,7 @@ Keychain.prototype.getUserKeyPair = function(userId) {
userId: userId userId: userId
}); });
if (pubkey && pubkey._id) { if (pubkey && pubkey._id && !pubkey.source) {
// that user's public key is already in local storage... // that user's public key is already in local storage...
// sync keypair to the cloud // sync keypair to the cloud
return syncKeypair(pubkey._id); return syncKeypair(pubkey._id);
@ -645,13 +611,13 @@ Keychain.prototype.getUserKeyPair = function(userId) {
// no public key by that user id in storage // no public key by that user id in storage
// find from cloud by email address // find from cloud by email address
return self._publicKeyDao.getByUserId(userId).then(function(cloudPubkey) { return self._publicKeyDao.getByUserId(userId).then(function(cloudPubkey) {
if (cloudPubkey && cloudPubkey._id) { if (cloudPubkey && cloudPubkey._id && !cloudPubkey.source) {
// there is a public key for that user already in the cloud... // there is a public key for that user already in the cloud...
// sync keypair to local storage // sync keypair to local storage
return syncKeypair(cloudPubkey._id); return syncKeypair(cloudPubkey._id);
} }
// continue without keypair... generate in crypto.js // continue without keypair... generate or import new keypair
}); });
}); });
@ -660,10 +626,12 @@ Keychain.prototype.getUserKeyPair = function(userId) {
// persist key pair in local storage // persist key pair in local storage
return self.lookupPublicKey(keypairId).then(function(pub) { return self.lookupPublicKey(keypairId).then(function(pub) {
savedPubkey = pub; savedPubkey = pub;
// persist private key in local storage // persist private key in local storage
return self.lookupPrivateKey(keypairId).then(function(priv) { return self.lookupPrivateKey(keypairId);
savedPrivkey = priv;
}); }).then(function(priv) {
savedPrivkey = priv;
}).then(function() { }).then(function() {
var keys = {}; var keys = {};

View File

@ -417,45 +417,6 @@ describe('Keychain DAO unit tests', function() {
}); });
}); });
describe('get public keys by id', function() {
it('should fail', function(done) {
keychainDao.getPublicKeys([]).then(function(keys) {
expect(keys.length).to.equal(0);
done();
});
});
it('should fail', function(done) {
lawnchairDaoStub.read.returns(rejects(42));
var ids = [{
_id: '12345'
}];
keychainDao.getPublicKeys(ids).catch(function(err) {
expect(err).to.exist;
expect(lawnchairDaoStub.read.calledOnce).to.be.true;
done();
});
});
it('should work from local storage', function(done) {
lawnchairDaoStub.read.returns(resolves({
_id: '12345',
publicKey: 'asdf'
}));
var ids = [{
_id: '12345'
}];
keychainDao.getPublicKeys(ids).then(function(keys) {
expect(keys.length).to.equal(1);
expect(keys[0]._id).to.equal('12345');
expect(lawnchairDaoStub.read.calledOnce).to.be.true;
done();
});
});
});
describe('get receiver public key', function() { describe('get receiver public key', function() {
it('should fail due to error in lawnchair list', function(done) { it('should fail due to error in lawnchair list', function(done) {
lawnchairDaoStub.list.returns(rejects(42)); lawnchairDaoStub.list.returns(rejects(42));
@ -598,6 +559,40 @@ describe('Keychain DAO unit tests', function() {
expect(keys.privateKey).to.exist; expect(keys.privateKey).to.exist;
expect(lawnchairDaoStub.list.calledOnce).to.be.true; expect(lawnchairDaoStub.list.calledOnce).to.be.true;
expect(lawnchairDaoStub.read.calledTwice).to.be.true; expect(lawnchairDaoStub.read.calledTwice).to.be.true;
expect(pubkeyDaoStub.getByUserId.calledOnce).to.be.true;
done();
});
});
it('should work if local key is from a source other than the whiteout key server', function(done) {
lawnchairDaoStub.list.returns(resolves([{
_id: '12345',
userId: testUser,
publicKey: 'asdf',
source: 'pgp.mit.edu'
}]));
pubkeyDaoStub.getByUserId.returns(resolves());
keychainDao.getUserKeyPair(testUser).then(function(keys) {
expect(keys).to.not.exist;
expect(lawnchairDaoStub.list.calledOnce).to.be.true;
expect(lawnchairDaoStub.read.called).to.be.false;
expect(pubkeyDaoStub.getByUserId.calledOnce).to.be.true;
done();
});
});
it('should work if cloud public key is from a source other than the whiteout key server', function(done) {
lawnchairDaoStub.list.returns(resolves());
pubkeyDaoStub.getByUserId.returns(resolves({
_id: '12345',
publicKey: 'asdf',
source: 'pgp.mit.edu'
}));
keychainDao.getUserKeyPair(testUser).then(function(keys) {
expect(keys).to.not.exist;
expect(pubkeyDaoStub.getByUserId.calledOnce).to.be.true;
done(); done();
}); });
}); });