diff --git a/src/index.html b/src/index.html index 86f8321..7828348 100755 --- a/src/index.html +++ b/src/index.html @@ -19,25 +19,8 @@ + - - - - - - - - - - - - - - - - - - @@ -48,14 +31,15 @@ - + + + - - + diff --git a/src/js/app-config.js b/src/js/app-config.js index 245b8ea..12b45fb 100644 --- a/src/js/app-config.js +++ b/src/js/app-config.js @@ -20,8 +20,8 @@ var app; // container for the application namespace app.config = { cloudUrl: 'http://storage.whiteout.io', symKeySize: 128, - symIvSize: 104, - asymKeySize: 2048, + symIvSize: 128, + asymKeySize: 1024, workerPath: 'js' }; diff --git a/src/js/app-router.js b/src/js/app-router.js index db1e9d4..9de5965 100644 --- a/src/js/app-router.js +++ b/src/js/app-router.js @@ -16,13 +16,13 @@ login: function() { // init email dao and dependencies - var util = new app.crypto.Util(window, uuid); - var jsonDao = new app.dao.LawnchairDAO(window); + var util = new cryptoLib.Util(window, uuid); + var jsonDao = new app.dao.LawnchairDAO(Lawnchair); var crypto = new app.crypto.Crypto(window, util); - var naclCrypto = new app.crypto.NaclCrypto(nacl, util); var cloudstorage = new app.dao.CloudStorage(window, $); var devicestorage = new app.dao.DeviceStorage(util, crypto, jsonDao, null); - this.emailDao = new app.dao.EmailDAO(_, crypto, devicestorage, cloudstorage, naclCrypto, util); + var keychain = new app.dao.KeychainDAO(jsonDao, cloudstorage); + this.emailDao = new app.dao.EmailDAO(_, crypto, devicestorage, cloudstorage, util, keychain); var loginView = new app.view.LoginView({ dao: this.emailDao diff --git a/src/js/dao/devicestorage.js b/src/js/dao/devicestorage.js index 30b3867..52dfe99 100644 --- a/src/js/dao/devicestorage.js +++ b/src/js/dao/devicestorage.js @@ -15,6 +15,12 @@ app.dao.DeviceStorage = function(util, crypto, jsonDao, sqlcipherDao) { this.storeEcryptedList = function(list, type, callback) { var i, date, key, items = []; + // nothing to store + if (list.length === 0) { + callback(); + return; + } + // format items for batch storing in dao list.forEach(function(i) { diff --git a/src/js/dao/email-dao.js b/src/js/dao/email-dao.js index 31cc2af..0e6d8f0 100644 --- a/src/js/dao/email-dao.js +++ b/src/js/dao/email-dao.js @@ -78,6 +78,10 @@ app.dao.EmailDAO = function(_, crypto, devicestorage, cloudstorage, util, keycha callback(err); return; } + if (encryptedList.length === 0) { + callback(null, new app.model.EmailCollection()); + return; + } // gather public key ids required to verify signatures encryptedList.forEach(function(i) { @@ -139,10 +143,11 @@ app.dao.EmailDAO = function(_, crypto, devicestorage, cloudstorage, util, keycha var folder, self = this; cloudstorage.listEncryptedItems('email', this.account.get('emailAddress'), folderName, function(err, data) { - // return if an error occured or if fetched list from cloud storage is empty - if (err || !data || data.status || data.length === 0) { + // return if an error occured + if (err) { callback({ - error: err + errMsg: 'Syncing encrypted items from cloud failed!', + err: err }); // error return; } diff --git a/src/js/view/login-view.js b/src/js/view/login-view.js index 0475e96..3a1837e 100644 --- a/src/js/view/login-view.js +++ b/src/js/view/login-view.js @@ -30,7 +30,8 @@ var account = new app.model.Account({ emailAddress: userId, symKeySize: app.config.symKeySize, - symIvSize: app.config.symIvSize + symIvSize: app.config.symIvSize, + asymKeySize: app.config.asymKeySize }); // show loading msg during init diff --git a/src/js/view/messagelist-view.js b/src/js/view/messagelist-view.js index 1d7de47..1f6f049 100644 --- a/src/js/view/messagelist-view.js +++ b/src/js/view/messagelist-view.js @@ -33,27 +33,18 @@ textVisible: true }); - // sync vinbox from cloud - self.dao.checkVInbox(function(err) { + // sync current folder from cloud + self.dao.syncFromCloud(self.folder, function(err) { + $.mobile.loading('hide'); + + // check for error if (err) { - $.mobile.loading('hide'); - window.alert('Fetching new from inbox failed!'); + window.alert('Syncing failed!'); return; } - // sync current folder from cloud - self.dao.syncFromCloud(self.folder, function(err) { - $.mobile.loading('hide'); - - // check for error - if (err) { - window.alert('Syncing failed!'); - return; - } - - // read local storage and add to list view - self.loadItems(); - }); + // read local storage and add to list view + self.loadItems(); }); }, @@ -70,7 +61,14 @@ text: 'decrypting...', textVisible: true }); - this.dao.listItems(this.folder, 0, 10, function(collection) { + this.dao.listItems(this.folder, 0, 10, function(err, collection) { + // check for error + if (err) { + $.mobile.loading('hide'); + window.alert('Loading items from storage failed!'); + return; + } + // clear list list.html(''); diff --git a/src/js/view/messagelistitem-view.js b/src/js/view/messagelistitem-view.js index 46f744d..d9246df 100644 --- a/src/js/view/messagelistitem-view.js +++ b/src/js/view/messagelistitem-view.js @@ -15,7 +15,7 @@ params.folder = this.options.folder; params.id = encodeURIComponent(params.id); - var util = new app.crypto.Util(window, null); + var util = new cryptoLib.Util(window, null); var date = util.parseDate(params.sentDate); params.displayDate = date.getDate() + '.' + (date.getMonth() + 1) + '. ' + date.getHours() + ':' + date.getMinutes();