From 3d2fdc7f8ca42af1b1c7c547f55384790fcef7ec Mon Sep 17 00:00:00 2001 From: Felix Hammerl Date: Tue, 25 Feb 2014 17:29:12 +0100 Subject: [PATCH] inject pgpbuilder --- Gruntfile.js | 5 ++--- package.json | 1 + src/js/app-controller.js | 8 +++++--- src/js/dao/email-dao.js | 23 ++++++++++------------- test/new-unit/email-dao-test.js | 29 +++++++++++++++++++++++++++-- 5 files changed, 45 insertions(+), 21 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 32c2cd5..09e9eb9 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -141,9 +141,8 @@ module.exports = function(grunt) { 'imap-client/node_modules/mime/src/mime.js', 'pgpmailer/src/*.js', 'pgpmailer/node_modules/simplesmtp/src/*', - 'pgpmailer/node_modules/pgpbuilder/src/*.js', - 'pgpmailer/node_modules/pgpbuilder/node_modules/mailbuilder/src/*.js', - 'pgpmailer/node_modules/mailbuilder/src/*.js' + 'pgpbuilder/src/*.js', + 'pgpbuilder/node_modules/mailbuilder/src/*.js' ], dest: 'src/lib/' }, diff --git a/package.json b/package.json index 4cb3fe2..4e381c7 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "crypto-lib": "https://github.com/whiteout-io/crypto-lib/tarball/master", "imap-client": "https://github.com/whiteout-io/imap-client/tarball/master", "pgpmailer": "https://github.com/whiteout-io/pgpmailer/tarball/dev/pgpbuilder", + "pgpbuilder": "https://github.com/whiteout-io/pgpbuilder/tarball/master", "requirejs": "2.1.10" }, "devDependencies": { diff --git a/src/js/app-controller.js b/src/js/app-controller.js index c4b0ab6..1a7dc2e 100644 --- a/src/js/app-controller.js +++ b/src/js/app-controller.js @@ -16,6 +16,7 @@ define(function(require) { InvitationDAO = require('js/dao/invitation-dao'), OutboxBO = require('js/bo/outbox'), PGP = require('js/crypto/pgp'), + PgpBuilder = require('pgpbuilder'), config = require('js/app-config').config; var self = {}; @@ -117,7 +118,7 @@ define(function(require) { }; imapClient = new ImapClient(imapOptions); - pgpMailer = new PgpMailer(smtpOptions); + pgpMailer = new PgpMailer(smtpOptions, self._pgpbuilder); imapClient.onError = function(err) { console.log('IMAP error.', err); @@ -341,7 +342,7 @@ define(function(require) { self.buildModules = function() { var lawnchairDao, restDao, pubkeyDao, invitationDao, - emailDao, keychain, pgp, userStorage; + emailDao, keychain, pgp, userStorage, pgpbuilder; // init objects and inject dependencies restDao = new RestDAO(); @@ -354,7 +355,8 @@ define(function(require) { self._keychain = keychain; pgp = new PGP(); self._crypto = pgp; - self._emailDao = emailDao = new EmailDAO(keychain, pgp, userStorage); + self._pgpbuilder = pgpbuilder = new PgpBuilder({}); // set the worker path?! + self._emailDao = emailDao = new EmailDAO(keychain, pgp, userStorage, pgpbuilder); self._outboxBo = new OutboxBO(emailDao, keychain, userStorage, invitationDao); }; diff --git a/src/js/dao/email-dao.js b/src/js/dao/email-dao.js index 90587cf..387606d 100644 --- a/src/js/dao/email-dao.js +++ b/src/js/dao/email-dao.js @@ -6,12 +6,11 @@ define(function(require) { str = require('js/app-config').string, config = require('js/app-config').config; - var EmailDAO = function(keychain, crypto, devicestorage) { - var self = this; - - self._keychain = keychain; - self._crypto = crypto; - self._devicestorage = devicestorage; + var EmailDAO = function(keychain, crypto, devicestorage, pgpbuilder) { + this._keychain = keychain; + this._crypto = crypto; + this._devicestorage = devicestorage; + this._pgpbuilder = pgpbuilder; }; // @@ -76,7 +75,7 @@ define(function(require) { self._pgpMailer = options.pgpMailer; // set private key if (self._crypto && self._crypto._privateKey) { - self._pgpMailer._pgpbuilder._privateKey = self._crypto._privateKey; + self._pgpbuilder._privateKey = self._crypto._privateKey; } // delegation-esque pattern to mitigate between node-style events and plain js @@ -143,9 +142,8 @@ define(function(require) { return; } - // HANDLE THIS PROPERLY!!! // set decrypted privateKey to pgpMailer - self._pgpMailer._pgpbuilder._privateKey = self._crypto._privateKey; + self._pgpbuilder._privateKey = self._crypto._privateKey; callback(); }); return; @@ -196,9 +194,8 @@ define(function(require) { return; } - // HANDLE THIS PROPERLY!!! // set decrypted privateKey to pgpMailer - self._pgpMailer._pgpbuilder._privateKey = self._crypto._privateKey; + self._pgpbuilder._privateKey = self._crypto._privateKey; callback(); }); }); @@ -1060,11 +1057,11 @@ define(function(require) { }; EmailDAO.prototype.encrypt = function(options, callback) { - this._pgpMailer.encrypt(options, callback); + this._pgpbuilder.encrypt(options, callback); }; EmailDAO.prototype.reEncrypt = function(options, callback) { - this._pgpMailer.reEncrypt(options, callback); + this._pgpbuilder.reEncrypt(options, callback); }; // diff --git a/test/new-unit/email-dao-test.js b/test/new-unit/email-dao-test.js index 246ac72..46a73d2 100644 --- a/test/new-unit/email-dao-test.js +++ b/test/new-unit/email-dao-test.js @@ -5,6 +5,7 @@ define(function(require) { KeychainDAO = require('js/dao/keychain-dao'), ImapClient = require('imap-client'), PgpMailer = require('pgpmailer'), + PgpBuilder = require('pgpbuilder'), PGP = require('js/crypto/pgp'), DeviceStorageDAO = require('js/dao/devicestorage-dao'), str = require('js/app-config').string, @@ -13,7 +14,7 @@ define(function(require) { chai.Assertion.includeStack = true; describe('Email DAO unit tests', function() { - var dao, keychainStub, imapClientStub, pgpMailerStub, pgpStub, devicestorageStub; + var dao, keychainStub, imapClientStub, pgpMailerStub, pgpBuilderStub, pgpStub, devicestorageStub; var emailAddress, passphrase, asymKeySize, mockkeyId, dummyEncryptedMail, dummyDecryptedMail, mockKeyPair, account, verificationMail, verificationUuid, @@ -111,10 +112,11 @@ define(function(require) { keychainStub = sinon.createStubInstance(KeychainDAO); imapClientStub = sinon.createStubInstance(ImapClient); pgpMailerStub = sinon.createStubInstance(PgpMailer); + pgpBuilderStub = sinon.createStubInstance(PgpBuilder); pgpStub = sinon.createStubInstance(PGP); devicestorageStub = sinon.createStubInstance(DeviceStorageDAO); - dao = new EmailDAO(keychainStub, pgpStub, devicestorageStub); + dao = new EmailDAO(keychainStub, pgpStub, devicestorageStub, pgpBuilderStub); dao._account = account; expect(dao._keychain).to.equal(keychainStub); @@ -2613,6 +2615,29 @@ define(function(require) { }); }); }); + + describe('encrypt', function() { + it('should encrypt', function(done) { + pgpBuilderStub.encrypt.yields(); + + dao.encrypt({}, function() { + expect(pgpBuilderStub.encrypt.calledOnce).to.be.true; + done(); + }); + }); + }); + + describe('reEncrypt', function() { + it('should re-encrypt', function(done) { + pgpBuilderStub.reEncrypt.yields(); + + dao.reEncrypt({}, function() { + expect(pgpBuilderStub.reEncrypt.calledOnce).to.be.true; + done(); + }); + }); + }); + describe('syncOutbox', function() { it('should sync the outbox', function(done) { var folder = 'FOLDAAAA';