Merge remote-tracking branch 'origin/pgp-format' into invitation

This commit is contained in:
Tankred Hase 2013-10-29 19:35:19 +01:00
commit 34dea03c5b
3 changed files with 33 additions and 30 deletions

View File

@ -35,7 +35,7 @@ define([], function() {
* Strings are maintained here
*/
app.string = {
subject: '[whiteout] Encrypted message',
subjectPrefix: '[whiteout] ',
message: 'this is a private conversation. To read my encrypted message below, simply install Whiteout Mail for Chrome. The app is really easy to use and automatically encrypts sent emails, so that only the two of us can read them: https://chrome.google.com/webstore/detail/whiteout-mail/jjgghafhamholjigjoghcfcekhkonijg',
cryptPrefix: '-----BEGIN PGP MESSAGE-----',
cryptSuffix: '-----END PGP MESSAGE-----',

View File

@ -246,6 +246,7 @@ define(function(require) {
messageBlock = email.body.split(str.cryptPrefix)[1].split(str.cryptSuffix)[0];
// add prefix and suffix again
email.body = str.cryptPrefix + messageBlock + str.cryptSuffix;
email.subject = email.subject.split(str.subjectPrefix)[1];
} catch (e) {
callback({
errMsg: 'Error parsing encrypted message block!'
@ -273,9 +274,7 @@ define(function(require) {
return;
}
decrypted = JSON.parse(decrypted);
i.subject = decrypted.subject;
i.body = decrypted.body;
i.body = decrypted;
after();
});
@ -310,7 +309,7 @@ define(function(require) {
});
function fetchList(callback) {
var encryptedList = [];
var headers = [];
// fetch imap folder's message list
self.imapListMessages({
@ -325,45 +324,50 @@ define(function(require) {
// find encrypted messages by subject
emails.forEach(function(i) {
if (i.subject === str.subject) {
encryptedList.push(i);
if (i.subject.indexOf(str.subjectPrefix) !== -1) {
headers.push(i);
}
});
// fetch message bodies
fetchBodies(encryptedList, callback);
fetchBodies(headers, callback);
});
}
function fetchBodies(messageList, callback) {
function fetchBodies(headers, callback) {
var emails = [];
if (messageList.length < 1) {
if (headers.length < 1) {
callback(null, emails);
return;
}
var after = _.after(messageList.length, function() {
var after = _.after(headers.length, function() {
callback(null, emails);
});
_.each(messageList, function(messageItem) {
_.each(headers, function(header) {
self.imapGetMessage({
folder: options.folder,
uid: messageItem.uid
uid: header.uid
}, function(err, message) {
if (err) {
callback(err);
return;
}
// set gotten attributes like body to message object containing list meta data like 'unread' or 'replied'
messageItem.id = message.id;
messageItem.body = message.body;
messageItem.html = message.html;
messageItem.attachments = message.attachments;
if (typeof message.body !== 'string' || message.body.indexOf(str.cryptPrefix) === -1 || message.body.indexOf(str.cryptSuffix) === -1) {
after();
return;
}
emails.push(messageItem);
// set gotten attributes like body to message object containing list meta data like 'unread' or 'replied'
header.id = message.id;
header.body = message.body;
header.html = message.html;
header.attachments = message.attachments;
emails.push(header);
after();
});
});
@ -514,7 +518,7 @@ define(function(require) {
*/
EmailDAO.prototype.encryptForUser = function(email, receiverPubkey, callback) {
var self = this,
pt = JSON.stringify(email),
pt = email.body,
receiverPubkeys = [receiverPubkey];
// get own public key so send message can be read
@ -557,7 +561,7 @@ define(function(require) {
// build encrypted text body
email.body = greeting + MESSAGE + ct + SIGNATURE;
email.subject = str.subject;
email.subject = str.subjectPrefix + email.subject;
return email;
}

View File

@ -35,7 +35,7 @@ define(function(require) {
to: [{
address: 'safewithme.testuser@gmail.com'
}], // list of receivers
subject: "Hello", // Subject line
subject: "[whiteout] Hello", // Subject line
body: "Hello world" // plaintext body
};
@ -521,8 +521,10 @@ define(function(require) {
it('should not list unencrypted messages', function(done) {
imapClientStub.listMessages.yields(null, [{
uid: 413,
subject: ''
}, {
uid: 414,
subject: ''
}]);
imapClientStub.getMessagePreview.yields(null, {
body: 'asdf'
@ -547,13 +549,13 @@ define(function(require) {
it('should work', function(done) {
imapClientStub.listMessages.yields(null, [{
uid: 413,
subject: app.string.subject
subject: app.string.subjectPrefix + 'asd'
}, {
uid: 414,
subject: app.string.subject
subject: app.string.subjectPrefix + 'asd'
}]);
imapClientStub.getMessagePreview.yields(null, {
body: 'asdf'
body: app.string.cryptPrefix + '\nasdf\n' + app.string.cryptSuffix
});
devicestorageStub.removeList.yields();
devicestorageStub.storeList.yields();
@ -582,20 +584,17 @@ define(function(require) {
userId: "safewithme.testuser@gmail.com",
publicKey: publicKey
});
pgpStub.decrypt.yields(null, JSON.stringify({
body: 'test body',
subject: 'test subject'
}));
pgpStub.decrypt.yields(null, 'test body');
emailDao.listMessages({
folder: 'INBOX',
offset: 0,
num: 2
}, function(err, emails) {
expect(err).to.not.exist;
expect(devicestorageStub.listItems.calledOnce).to.be.true;
expect(keychainStub.getReceiverPublicKey.calledTwice).to.be.true;
expect(pgpStub.decrypt.calledTwice).to.be.true;
expect(err).to.not.exist;
expect(emails.length).to.equal(2);
done();
});