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();