1
0
mirror of https://github.com/moparisthebest/mail synced 2025-02-16 15:10:10 -05:00

integrate mailreader

This commit is contained in:
Felix Hammerl 2014-02-25 19:18:37 +01:00
parent 3d2fdc7f8c
commit 3f1aea5ebb
5 changed files with 24 additions and 21 deletions

View File

@ -133,12 +133,13 @@ module.exports = function(grunt) {
'imap-client/node_modules/inbox/node_modules/node-shims/src/*.js', 'imap-client/node_modules/inbox/node_modules/node-shims/src/*.js',
'imap-client/node_modules/inbox/node_modules/utf7/src/utf7.js', 'imap-client/node_modules/inbox/node_modules/utf7/src/utf7.js',
'imap-client/node_modules/inbox/node_modules/xoauth2/src/xoauth2.js', 'imap-client/node_modules/inbox/node_modules/xoauth2/src/xoauth2.js',
'imap-client/node_modules/mimelib/src/mimelib.js', 'mailreader/src/*.js',
'imap-client/node_modules/mimelib/node_modules/addressparser/src/addressparser.js', 'mailreader/node_modules/mailparser/src/*.js',
'imap-client/node_modules/mimelib/node_modules/encoding/src/encoding.js', 'mailreader/node_modules/mailparser/node_modules/encoding/src/encoding.js',
'imap-client/node_modules/mimelib/node_modules/encoding/node_modules/iconv-lite/src/*.js', 'mailreader/node_modules/mailparser/node_modules/mimelib/src/mimelib.js',
'imap-client/node_modules/mailparser/src/*.js', 'mailreader/node_modules/mailparser/node_modules/mimelib/node_modules/addressparser/src/addressparser.js',
'imap-client/node_modules/mime/src/mime.js', 'mailreader/node_modules/mailparser/node_modules/encoding/node_modules/iconv-lite/src/*.js',
'mailreader/node_modules/mailparser/node_modules/mime/src/mime.js',
'pgpmailer/src/*.js', 'pgpmailer/src/*.js',
'pgpmailer/node_modules/simplesmtp/src/*', 'pgpmailer/node_modules/simplesmtp/src/*',
'pgpbuilder/src/*.js', 'pgpbuilder/src/*.js',

View File

@ -11,7 +11,8 @@
}, },
"dependencies": { "dependencies": {
"crypto-lib": "https://github.com/whiteout-io/crypto-lib/tarball/master", "crypto-lib": "https://github.com/whiteout-io/crypto-lib/tarball/master",
"imap-client": "https://github.com/whiteout-io/imap-client/tarball/master", "imap-client": "https://github.com/whiteout-io/imap-client/tarball/dev/offline-bug",
"mailreader": "https://github.com/whiteout-io/mailreader/tarball/master",
"pgpmailer": "https://github.com/whiteout-io/pgpmailer/tarball/dev/pgpbuilder", "pgpmailer": "https://github.com/whiteout-io/pgpmailer/tarball/dev/pgpbuilder",
"pgpbuilder": "https://github.com/whiteout-io/pgpbuilder/tarball/master", "pgpbuilder": "https://github.com/whiteout-io/pgpbuilder/tarball/master",
"requirejs": "2.1.10" "requirejs": "2.1.10"

View File

@ -6,6 +6,7 @@ define(function(require) {
var $ = require('jquery'), var $ = require('jquery'),
ImapClient = require('imap-client'), ImapClient = require('imap-client'),
mailreader = require('mailreader'),
PgpMailer = require('pgpmailer'), PgpMailer = require('pgpmailer'),
EmailDAO = require('js/dao/email-dao'), EmailDAO = require('js/dao/email-dao'),
RestDAO = require('js/dao/rest-dao'), RestDAO = require('js/dao/rest-dao'),
@ -117,7 +118,7 @@ define(function(require) {
onError: console.error onError: console.error
}; };
imapClient = new ImapClient(imapOptions); imapClient = new ImapClient(imapOptions, mailreader);
pgpMailer = new PgpMailer(smtpOptions, self._pgpbuilder); pgpMailer = new PgpMailer(smtpOptions, self._pgpbuilder);
imapClient.onError = function(err) { imapClient.onError = function(err) {
@ -356,7 +357,7 @@ define(function(require) {
pgp = new PGP(); pgp = new PGP();
self._crypto = pgp; self._crypto = pgp;
self._pgpbuilder = pgpbuilder = new PgpBuilder({}); // set the worker path?! self._pgpbuilder = pgpbuilder = new PgpBuilder({}); // set the worker path?!
self._emailDao = emailDao = new EmailDAO(keychain, pgp, userStorage, pgpbuilder); self._emailDao = emailDao = new EmailDAO(keychain, pgp, userStorage, pgpbuilder, mailreader);
self._outboxBo = new OutboxBO(emailDao, keychain, userStorage, invitationDao); self._outboxBo = new OutboxBO(emailDao, keychain, userStorage, invitationDao);
}; };

View File

@ -6,11 +6,12 @@ define(function(require) {
str = require('js/app-config').string, str = require('js/app-config').string,
config = require('js/app-config').config; config = require('js/app-config').config;
var EmailDAO = function(keychain, crypto, devicestorage, pgpbuilder) { var EmailDAO = function(keychain, crypto, devicestorage, pgpbuilder, mailreader) {
this._keychain = keychain; this._keychain = keychain;
this._crypto = crypto; this._crypto = crypto;
this._devicestorage = devicestorage; this._devicestorage = devicestorage;
this._pgpbuilder = pgpbuilder; this._pgpbuilder = pgpbuilder;
this._mailreader = mailreader;
}; };
// //
@ -969,7 +970,7 @@ define(function(require) {
decrypted = decrypted || err.errMsg || 'Error occurred during decryption'; decrypted = decrypted || err.errMsg || 'Error occurred during decryption';
// this is a very primitive detection if we have PGP/MIME or PGP/INLINE // this is a very primitive detection if we have PGP/MIME or PGP/INLINE
if (decrypted.indexOf('Content-Transfer-Encoding:') === -1 && decrypted.indexOf('Content-Type:') === -1) { if (!self._mailreader.isRfc(decrypted)) {
message.body = decrypted; message.body = decrypted;
message.decrypted = true; message.decrypted = true;
message.decryptingBody = false; message.decryptingBody = false;
@ -980,7 +981,7 @@ define(function(require) {
// parse the decrypted MIME message // parse the decrypted MIME message
self._imapParseMessageBlock({ self._imapParseMessageBlock({
message: message, message: message,
block: decrypted raw: decrypted
}, function(error) { }, function(error) {
if (error) { if (error) {
message.decryptingBody = false; message.decryptingBody = false;
@ -1204,7 +1205,7 @@ define(function(require) {
}; };
EmailDAO.prototype._imapParseMessageBlock = function(options, callback) { EmailDAO.prototype._imapParseMessageBlock = function(options, callback) {
this._imapClient.parseDecryptedMessageBlock(options, callback); this._mailreader.parseRfc(options, callback);
}; };
/** /**

View File

@ -8,6 +8,7 @@ define(function(require) {
PgpBuilder = require('pgpbuilder'), PgpBuilder = require('pgpbuilder'),
PGP = require('js/crypto/pgp'), PGP = require('js/crypto/pgp'),
DeviceStorageDAO = require('js/dao/devicestorage-dao'), DeviceStorageDAO = require('js/dao/devicestorage-dao'),
mailreader = require('mailreader'),
str = require('js/app-config').string, str = require('js/app-config').string,
expect = chai.expect; expect = chai.expect;
@ -116,7 +117,7 @@ define(function(require) {
pgpStub = sinon.createStubInstance(PGP); pgpStub = sinon.createStubInstance(PGP);
devicestorageStub = sinon.createStubInstance(DeviceStorageDAO); devicestorageStub = sinon.createStubInstance(DeviceStorageDAO);
dao = new EmailDAO(keychainStub, pgpStub, devicestorageStub, pgpBuilderStub); dao = new EmailDAO(keychainStub, pgpStub, devicestorageStub, pgpBuilderStub, mailreader);
dao._account = account; dao._account = account;
expect(dao._keychain).to.equal(keychainStub); expect(dao._keychain).to.equal(keychainStub);
@ -478,14 +479,12 @@ define(function(require) {
describe('_imapParseMessageBlock', function() { describe('_imapParseMessageBlock', function() {
it('should parse a message', function(done) { it('should parse a message', function(done) {
imapClientStub.parseDecryptedMessageBlock.yields(null, {}); var parseRfc = sinon.stub(mailreader, 'parseRfc').withArgs({}).yields();
dao._imapParseMessageBlock(function(err, msg) { dao._imapParseMessageBlock({}, function() {
expect(err).to.not.exist; expect(parseRfc.calledOnce).to.be.true;
expect(msg).to.exist;
done(); done();
}); });
}); });
}); });
@ -1206,14 +1205,14 @@ define(function(require) {
body: '-----BEGIN PGP MESSAGE-----asdasdasd-----END PGP MESSAGE-----' body: '-----BEGIN PGP MESSAGE-----asdasdasd-----END PGP MESSAGE-----'
}; };
mimeBody = 'Content-Transfer-Encoding: Content-Type:'; mimeBody = 'Content-Type: asdasdasd';
parsedBody = 'body? yes.'; parsedBody = 'body? yes.';
keychainStub.getReceiverPublicKey.withArgs(message.from[0].address).yieldsAsync(null, mockKeyPair.publicKey); keychainStub.getReceiverPublicKey.withArgs(message.from[0].address).yieldsAsync(null, mockKeyPair.publicKey);
pgpStub.decrypt.withArgs(message.body, mockKeyPair.publicKey.publicKey).yieldsAsync(null, mimeBody); pgpStub.decrypt.withArgs(message.body, mockKeyPair.publicKey.publicKey).yieldsAsync(null, mimeBody);
parseStub = sinon.stub(dao, '_imapParseMessageBlock', function(o, cb) { parseStub = sinon.stub(dao, '_imapParseMessageBlock', function(o, cb) {
expect(o.message).to.equal(message); expect(o.message).to.equal(message);
expect(o.block).to.equal(mimeBody); expect(o.raw).to.equal(mimeBody);
o.message.body = parsedBody; o.message.body = parsedBody;
cb(null, o.message); cb(null, o.message);