mirror of https://github.com/moparisthebest/mail
Expose previous DAOs as angular services and as common.js modules
This commit is contained in:
parent
f7b7e174b0
commit
c8d56b4bd1
|
@ -3,10 +3,10 @@
|
||||||
var ngModule = angular.module('woServices');
|
var ngModule = angular.module('woServices');
|
||||||
ngModule.service('account', Account);
|
ngModule.service('account', Account);
|
||||||
|
|
||||||
var EmailDAO = require('../dao/email-dao');
|
var Email = require('./email');
|
||||||
|
|
||||||
function Account() {
|
function Account() {
|
||||||
this._emailDAOs = [];
|
this._emailDAOs = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -14,9 +14,9 @@ function Account() {
|
||||||
* @return {Array<Object>} The account objects containing folder and message objects
|
* @return {Array<Object>} The account objects containing folder and message objects
|
||||||
*/
|
*/
|
||||||
Account.prototype.all = function() {
|
Account.prototype.all = function() {
|
||||||
return this._emailDAOs.map(function(emailDao) {
|
return this._emailDAOs.map(function(emailDao) {
|
||||||
return emailDao._account;
|
return emailDao._account;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,8 +24,8 @@ Account.prototype.all = function() {
|
||||||
* @param {String} options.emailAddress The account's email address
|
* @param {String} options.emailAddress The account's email address
|
||||||
*/
|
*/
|
||||||
Account.prototype.login = function(options) {
|
Account.prototype.login = function(options) {
|
||||||
var emailDao = new EmailDAO();
|
var emailDao = new Email();
|
||||||
this._emailDAOs.push(emailDao);
|
this._emailDAOs.push(emailDao);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var AdminDAO = function(restDao) {
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.service('admin', Admin);
|
||||||
|
module.exports = Admin;
|
||||||
|
|
||||||
|
function Admin(restDao) {
|
||||||
this._restDao = restDao;
|
this._restDao = restDao;
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new email account.
|
* Create a new email account.
|
||||||
|
@ -11,7 +15,7 @@ var AdminDAO = function(restDao) {
|
||||||
* @param {String} options.phone The user's mobile phone number (required for verification and password reset).
|
* @param {String} options.phone The user's mobile phone number (required for verification and password reset).
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
AdminDAO.prototype.createUser = function(options, callback) {
|
Admin.prototype.createUser = function(options, callback) {
|
||||||
var uri;
|
var uri;
|
||||||
|
|
||||||
if (!options.emailAddress || !options.password || !options.phone) {
|
if (!options.emailAddress || !options.password || !options.phone) {
|
||||||
|
@ -39,7 +43,7 @@ AdminDAO.prototype.createUser = function(options, callback) {
|
||||||
* @param {String} options.token The validation token.
|
* @param {String} options.token The validation token.
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
AdminDAO.prototype.validateUser = function(options, callback) {
|
Admin.prototype.validateUser = function(options, callback) {
|
||||||
var uri;
|
var uri;
|
||||||
|
|
||||||
if (!options.emailAddress || !options.token) {
|
if (!options.emailAddress || !options.token) {
|
||||||
|
@ -56,6 +60,4 @@ AdminDAO.prototype.validateUser = function(options, callback) {
|
||||||
callback(new Error('Validation failed!'));
|
callback(new Error('Validation failed!'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = AdminDAO;
|
|
|
@ -1,14 +1,17 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.service('deviceStorage', DeviceStorage);
|
||||||
|
module.exports = DeviceStorage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* High level storage api that handles all persistence on the device.
|
* High level storage api that handles all persistence on the device.
|
||||||
*/
|
*/
|
||||||
|
function DeviceStorage(localDbDao) {
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var DeviceStorageDAO = function(localDbDao) {
|
|
||||||
this._localDbDao = localDbDao;
|
this._localDbDao = localDbDao;
|
||||||
};
|
}
|
||||||
|
|
||||||
DeviceStorageDAO.prototype.init = function(emailAddress, callback) {
|
DeviceStorage.prototype.init = function(emailAddress, callback) {
|
||||||
this._localDbDao.init(emailAddress, callback);
|
this._localDbDao.init(emailAddress, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -17,7 +20,7 @@ DeviceStorageDAO.prototype.init = function(emailAddress, callback) {
|
||||||
* @param list [Array] The list of items to be persisted
|
* @param list [Array] The list of items to be persisted
|
||||||
* @param type [String] The type of item to be persisted e.g. 'email'
|
* @param type [String] The type of item to be persisted e.g. 'email'
|
||||||
*/
|
*/
|
||||||
DeviceStorageDAO.prototype.storeList = function(list, type, callback) {
|
DeviceStorage.prototype.storeList = function(list, type, callback) {
|
||||||
var key, items = [];
|
var key, items = [];
|
||||||
|
|
||||||
// nothing to store
|
// nothing to store
|
||||||
|
@ -49,7 +52,7 @@ DeviceStorageDAO.prototype.storeList = function(list, type, callback) {
|
||||||
/**
|
/**
|
||||||
* Deletes items of a certain type from storage
|
* Deletes items of a certain type from storage
|
||||||
*/
|
*/
|
||||||
DeviceStorageDAO.prototype.removeList = function(type, callback) {
|
DeviceStorage.prototype.removeList = function(type, callback) {
|
||||||
this._localDbDao.removeList(type, callback);
|
this._localDbDao.removeList(type, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,7 +62,7 @@ DeviceStorageDAO.prototype.removeList = function(type, callback) {
|
||||||
* @param offset [Number] The offset of items to fetch (0 is the last stored item)
|
* @param offset [Number] The offset of items to fetch (0 is the last stored item)
|
||||||
* @param num [Number] The number of items to fetch (null means fetch all)
|
* @param num [Number] The number of items to fetch (null means fetch all)
|
||||||
*/
|
*/
|
||||||
DeviceStorageDAO.prototype.listItems = function(type, offset, num, callback) {
|
DeviceStorage.prototype.listItems = function(type, offset, num, callback) {
|
||||||
// fetch all items of a certain type from the data-store
|
// fetch all items of a certain type from the data-store
|
||||||
this._localDbDao.list(type, offset, num, callback);
|
this._localDbDao.list(type, offset, num, callback);
|
||||||
};
|
};
|
||||||
|
@ -67,7 +70,7 @@ DeviceStorageDAO.prototype.listItems = function(type, offset, num, callback) {
|
||||||
/**
|
/**
|
||||||
* Clear the whole device data-store
|
* Clear the whole device data-store
|
||||||
*/
|
*/
|
||||||
DeviceStorageDAO.prototype.clear = function(callback) {
|
DeviceStorage.prototype.clear = function(callback) {
|
||||||
this._localDbDao.clear(callback);
|
this._localDbDao.clear(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -88,6 +91,4 @@ function createKey(i, type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = DeviceStorageDAO;
|
|
|
@ -1,5 +1,9 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.service('email', Email);
|
||||||
|
module.exports = Email;
|
||||||
|
|
||||||
var config = require('../app-config').config,
|
var config = require('../app-config').config,
|
||||||
str = require('../app-config').string;
|
str = require('../app-config').string;
|
||||||
|
|
||||||
|
@ -32,7 +36,7 @@ var MSG_PART_TYPE_HTML = 'html';
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Email Dao
|
// Email Service
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -46,13 +50,13 @@ var MSG_PART_TYPE_HTML = 'html';
|
||||||
* @param {Object} pgpbuilder Generates and encrypts MIME and SMTP messages
|
* @param {Object} pgpbuilder Generates and encrypts MIME and SMTP messages
|
||||||
* @param {Object} mailreader Parses MIME messages received from IMAP
|
* @param {Object} mailreader Parses MIME messages received from IMAP
|
||||||
*/
|
*/
|
||||||
var EmailDAO = function(keychain, pgp, devicestorage, pgpbuilder, mailreader) {
|
function Email(keychain, pgp, devicestorage, pgpbuilder, mailreader) {
|
||||||
this._keychain = keychain;
|
this._keychain = keychain;
|
||||||
this._pgp = pgp;
|
this._pgp = pgp;
|
||||||
this._devicestorage = devicestorage;
|
this._devicestorage = devicestorage;
|
||||||
this._pgpbuilder = pgpbuilder;
|
this._pgpbuilder = pgpbuilder;
|
||||||
this._mailreader = mailreader;
|
this._mailreader = mailreader;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -71,7 +75,7 @@ var EmailDAO = function(keychain, pgp, devicestorage, pgpbuilder, mailreader) {
|
||||||
* @param {String} options.account.realname The user's id
|
* @param {String} options.account.realname The user's id
|
||||||
* @param {Function} callback(error, keypair) Invoked with the keypair or error information when the email dao is initialized
|
* @param {Function} callback(error, keypair) Invoked with the keypair or error information when the email dao is initialized
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.init = function(options, callback) {
|
Email.prototype.init = function(options, callback) {
|
||||||
this._account = options.account;
|
this._account = options.account;
|
||||||
this._account.busy = 0; // > 0 triggers the spinner
|
this._account.busy = 0; // > 0 triggers the spinner
|
||||||
this._account.online = false;
|
this._account.online = false;
|
||||||
|
@ -86,7 +90,7 @@ EmailDAO.prototype.init = function(options, callback) {
|
||||||
* @param {String} options.passphrase The passphrase to decrypt the private key
|
* @param {String} options.passphrase The passphrase to decrypt the private key
|
||||||
* @param {Function} callback(error) Invoked when the the keychain is unlocked or when an error occurred buring unlocking
|
* @param {Function} callback(error) Invoked when the the keychain is unlocked or when an error occurred buring unlocking
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.unlock = function(options, callback) {
|
Email.prototype.unlock = function(options, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if (options.keypair) {
|
if (options.keypair) {
|
||||||
|
@ -202,7 +206,7 @@ EmailDAO.prototype.unlock = function(options, callback) {
|
||||||
* @param {Object} options.folder The folder to be opened
|
* @param {Object} options.folder The folder to be opened
|
||||||
* @param {Function} callback(error) Invoked when the folder has been opened
|
* @param {Function} callback(error) Invoked when the folder has been opened
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.openFolder = function(options, callback) {
|
Email.prototype.openFolder = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
err;
|
err;
|
||||||
|
|
||||||
|
@ -229,7 +233,7 @@ EmailDAO.prototype.openFolder = function(options, callback) {
|
||||||
* @param {Object} options.folder The folder to synchronize
|
* @param {Object} options.folder The folder to synchronize
|
||||||
* @param {Function} callback [description]
|
* @param {Function} callback [description]
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.refreshFolder = function(options, callback) {
|
Email.prototype.refreshFolder = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
folder = options.folder;
|
folder = options.folder;
|
||||||
|
|
||||||
|
@ -289,7 +293,7 @@ EmailDAO.prototype.refreshFolder = function(options, callback) {
|
||||||
* @param {Object} options.folder The folder for which to fetch the message
|
* @param {Object} options.folder The folder for which to fetch the message
|
||||||
* @param {Function} callback(error) Invoked when the message is persisted and added to folder.messages
|
* @param {Function} callback(error) Invoked when the message is persisted and added to folder.messages
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.fetchMessages = function(options, callback) {
|
Email.prototype.fetchMessages = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
folder = options.folder;
|
folder = options.folder;
|
||||||
|
|
||||||
|
@ -440,7 +444,7 @@ EmailDAO.prototype.fetchMessages = function(options, callback) {
|
||||||
* @param {Boolean} options.localOnly Indicated if the message should not be removed from IMAP
|
* @param {Boolean} options.localOnly Indicated if the message should not be removed from IMAP
|
||||||
* @param {Function} callback(error) Invoked when the message was delete, or an error occurred
|
* @param {Function} callback(error) Invoked when the message was delete, or an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.deleteMessage = function(options, callback) {
|
Email.prototype.deleteMessage = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
folder = options.folder,
|
folder = options.folder,
|
||||||
message = options.message;
|
message = options.message;
|
||||||
|
@ -508,7 +512,7 @@ EmailDAO.prototype.deleteMessage = function(options, callback) {
|
||||||
* @param {[type]} options [description]
|
* @param {[type]} options [description]
|
||||||
* @param {Function} callback [description]
|
* @param {Function} callback [description]
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.setFlags = function(options, callback) {
|
Email.prototype.setFlags = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
folder = options.folder,
|
folder = options.folder,
|
||||||
message = options.message;
|
message = options.message;
|
||||||
|
@ -600,7 +604,7 @@ EmailDAO.prototype.setFlags = function(options, callback) {
|
||||||
* @param {Object} options.message The message that should be moved
|
* @param {Object} options.message The message that should be moved
|
||||||
* @param {Function} callback(error) Invoked when the message was moved, or an error occurred
|
* @param {Function} callback(error) Invoked when the message was moved, or an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.moveMessage = function(options, callback) {
|
Email.prototype.moveMessage = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
folder = options.folder,
|
folder = options.folder,
|
||||||
destination = options.destination,
|
destination = options.destination,
|
||||||
|
@ -652,7 +656,7 @@ EmailDAO.prototype.moveMessage = function(options, callback) {
|
||||||
* @param {Object} options.folder The IMAP folder
|
* @param {Object} options.folder The IMAP folder
|
||||||
* @param {Function} callback(error, message) Invoked when the message is streamed, or provides information if an error occurred
|
* @param {Function} callback(error, message) Invoked when the message is streamed, or provides information if an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.getBody = function(options, callback) {
|
Email.prototype.getBody = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
message = options.message,
|
message = options.message,
|
||||||
folder = options.folder;
|
folder = options.folder;
|
||||||
|
@ -837,7 +841,7 @@ EmailDAO.prototype.getBody = function(options, callback) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
EmailDAO.prototype._checkSignatures = function(message, callback) {
|
Email.prototype._checkSignatures = function(message, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self._keychain.getReceiverPublicKey(message.from[0].address, function(err, senderPublicKey) {
|
self._keychain.getReceiverPublicKey(message.from[0].address, function(err, senderPublicKey) {
|
||||||
|
@ -866,7 +870,7 @@ EmailDAO.prototype._checkSignatures = function(message, callback) {
|
||||||
* @param {Object} options.attachment The attachment body part to fetch and parse from IMAP
|
* @param {Object} options.attachment The attachment body part to fetch and parse from IMAP
|
||||||
* @param {Function} callback(error, attachment) Invoked when the attachment body part was retrieved and parsed, or an error occurred
|
* @param {Function} callback(error, attachment) Invoked when the attachment body part was retrieved and parsed, or an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.getAttachment = function(options, callback) {
|
Email.prototype.getAttachment = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
attachment = options.attachment;
|
attachment = options.attachment;
|
||||||
|
|
||||||
|
@ -896,7 +900,7 @@ EmailDAO.prototype.getAttachment = function(options, callback) {
|
||||||
* @param {Object} options.message The message
|
* @param {Object} options.message The message
|
||||||
* @param {Function} callback(error, message)
|
* @param {Function} callback(error, message)
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.decryptBody = function(options, callback) {
|
Email.prototype.decryptBody = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
message = options.message;
|
message = options.message;
|
||||||
|
|
||||||
|
@ -1016,7 +1020,7 @@ EmailDAO.prototype.decryptBody = function(options, callback) {
|
||||||
* @param {Object} options.email The message to be sent
|
* @param {Object} options.email The message to be sent
|
||||||
* @param {Function} callback(error) Invoked when the message was sent, or an error occurred
|
* @param {Function} callback(error) Invoked when the message was sent, or an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.sendEncrypted = function(options, callback) {
|
Email.prototype.sendEncrypted = function(options, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if (!self._account.online) {
|
if (!self._account.online) {
|
||||||
|
@ -1056,7 +1060,7 @@ EmailDAO.prototype.sendEncrypted = function(options, callback) {
|
||||||
* @param {Object} options.email The message to be sent
|
* @param {Object} options.email The message to be sent
|
||||||
* @param {Function} callback(error) Invoked when the message was sent, or an error occurred
|
* @param {Function} callback(error) Invoked when the message was sent, or an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.sendPlaintext = function(options, callback) {
|
Email.prototype.sendPlaintext = function(options, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if (!self._account.online) {
|
if (!self._account.online) {
|
||||||
|
@ -1097,7 +1101,7 @@ EmailDAO.prototype.sendPlaintext = function(options, callback) {
|
||||||
* @param {Object} options.email The message to be encrypted
|
* @param {Object} options.email The message to be encrypted
|
||||||
* @param {Function} callback(error, message) Invoked when the message was encrypted, or an error occurred
|
* @param {Function} callback(error, message) Invoked when the message was encrypted, or an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.encrypt = function(options, callback) {
|
Email.prototype.encrypt = function(options, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.busy();
|
self.busy();
|
||||||
|
@ -1124,7 +1128,7 @@ EmailDAO.prototype.encrypt = function(options, callback) {
|
||||||
* @param {Object} options.pgpMailer The SMTP client used to send messages
|
* @param {Object} options.pgpMailer The SMTP client used to send messages
|
||||||
* @param {Function} callback [description]
|
* @param {Function} callback [description]
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.onConnect = function(options, callback) {
|
Email.prototype.onConnect = function(options, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self._account.loggingIn = true;
|
self._account.loggingIn = true;
|
||||||
|
@ -1212,7 +1216,7 @@ EmailDAO.prototype.onConnect = function(options, callback) {
|
||||||
* This handler should be invoked when navigator.onLine === false.
|
* This handler should be invoked when navigator.onLine === false.
|
||||||
* It will discard the imap client and pgp mailer
|
* It will discard the imap client and pgp mailer
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.onDisconnect = function(callback) {
|
Email.prototype.onDisconnect = function(callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// logout of imap-client
|
// logout of imap-client
|
||||||
|
@ -1239,7 +1243,7 @@ EmailDAO.prototype.onDisconnect = function(callback) {
|
||||||
* @param {String} options.path The mailbox for which updates are available
|
* @param {String} options.path The mailbox for which updates are available
|
||||||
* @param {Array} options.list Array containing update information. Number (uid) or mail with Object (uid and flags), respectively
|
* @param {Array} options.list Array containing update information. Number (uid) or mail with Object (uid and flags), respectively
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._onSyncUpdate = function(options) {
|
Email.prototype._onSyncUpdate = function(options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var folder = _.findWhere(self._account.folders, {
|
var folder = _.findWhere(self._account.folders, {
|
||||||
|
@ -1319,7 +1323,7 @@ EmailDAO.prototype._onSyncUpdate = function(options) {
|
||||||
*
|
*
|
||||||
* @param {Function} callback Invoked when the folders are up to date
|
* @param {Function} callback Invoked when the folders are up to date
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._initFoldersFromDisk = function(callback) {
|
Email.prototype._initFoldersFromDisk = function(callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.busy(); // start the spinner
|
self.busy(); // start the spinner
|
||||||
|
@ -1347,7 +1351,7 @@ EmailDAO.prototype._initFoldersFromDisk = function(callback) {
|
||||||
*
|
*
|
||||||
* @param {Function} callback Invoked when the folders are up to date
|
* @param {Function} callback Invoked when the folders are up to date
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._initFoldersFromImap = function(callback) {
|
Email.prototype._initFoldersFromImap = function(callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.busy(); // start the spinner
|
self.busy(); // start the spinner
|
||||||
|
@ -1498,7 +1502,7 @@ EmailDAO.prototype._initFoldersFromImap = function(callback) {
|
||||||
*
|
*
|
||||||
* @param {Function} callback Invoked when the folders are filled with messages
|
* @param {Function} callback Invoked when the folders are filled with messages
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._initMessagesFromDisk = function(callback) {
|
Email.prototype._initMessagesFromDisk = function(callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if (!self._account.folders || self._account.folders.length === 0) {
|
if (!self._account.folders || self._account.folders.length === 0) {
|
||||||
|
@ -1526,11 +1530,11 @@ EmailDAO.prototype._initMessagesFromDisk = function(callback) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
EmailDAO.prototype.busy = function() {
|
Email.prototype.busy = function() {
|
||||||
this._account.busy++;
|
this._account.busy++;
|
||||||
};
|
};
|
||||||
|
|
||||||
EmailDAO.prototype.done = function() {
|
Email.prototype.done = function() {
|
||||||
if (this._account.busy > 0) {
|
if (this._account.busy > 0) {
|
||||||
this._account.busy--;
|
this._account.busy--;
|
||||||
}
|
}
|
||||||
|
@ -1552,7 +1556,7 @@ EmailDAO.prototype.done = function() {
|
||||||
* @param {Number} options.unread Un-/Read flag
|
* @param {Number} options.unread Un-/Read flag
|
||||||
* @param {Number} options.answered Un-/Answered flag
|
* @param {Number} options.answered Un-/Answered flag
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._imapMark = function(options, callback) {
|
Email.prototype._imapMark = function(options, callback) {
|
||||||
if (!this._account.online) {
|
if (!this._account.online) {
|
||||||
callback({
|
callback({
|
||||||
errMsg: 'Client is currently offline!',
|
errMsg: 'Client is currently offline!',
|
||||||
|
@ -1573,7 +1577,7 @@ EmailDAO.prototype._imapMark = function(options, callback) {
|
||||||
* @param {Number} options.uid The uid of the message
|
* @param {Number} options.uid The uid of the message
|
||||||
* @param {Function} callback(error) Callback with an error object in case something went wrong.
|
* @param {Function} callback(error) Callback with an error object in case something went wrong.
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._imapDeleteMessage = function(options, callback) {
|
Email.prototype._imapDeleteMessage = function(options, callback) {
|
||||||
if (!this._account.online) {
|
if (!this._account.online) {
|
||||||
callback({
|
callback({
|
||||||
errMsg: 'Client is currently offline!',
|
errMsg: 'Client is currently offline!',
|
||||||
|
@ -1611,7 +1615,7 @@ EmailDAO.prototype._imapDeleteMessage = function(options, callback) {
|
||||||
* @param {String} options.uid the message's uid
|
* @param {String} options.uid the message's uid
|
||||||
* @param {Function} callback (error) The callback when the message is moved
|
* @param {Function} callback (error) The callback when the message is moved
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._imapMoveMessage = function(options, callback) {
|
Email.prototype._imapMoveMessage = function(options, callback) {
|
||||||
this._imapClient.moveMessage({
|
this._imapClient.moveMessage({
|
||||||
path: options.folder.path,
|
path: options.folder.path,
|
||||||
destination: options.destination.path,
|
destination: options.destination.path,
|
||||||
|
@ -1628,7 +1632,7 @@ EmailDAO.prototype._imapMoveMessage = function(options, callback) {
|
||||||
* @param {Number} options.lastUid The upper bound of the uid range (inclusive)
|
* @param {Number} options.lastUid The upper bound of the uid range (inclusive)
|
||||||
* @param {Function} callback (error, messages) The callback when the imap client is done fetching message metadata
|
* @param {Function} callback (error, messages) The callback when the imap client is done fetching message metadata
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._imapListMessages = function(options, callback) {
|
Email.prototype._imapListMessages = function(options, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if (!this._account.online) {
|
if (!this._account.online) {
|
||||||
|
@ -1650,7 +1654,7 @@ EmailDAO.prototype._imapListMessages = function(options, callback) {
|
||||||
* @param {String} options.message The rfc2822 compatible raw ASCII e-mail source
|
* @param {String} options.message The rfc2822 compatible raw ASCII e-mail source
|
||||||
* @param {Function} callback (error) The callback when the imap client is done uploading
|
* @param {Function} callback (error) The callback when the imap client is done uploading
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._imapUploadMessage = function(options, callback) {
|
Email.prototype._imapUploadMessage = function(options, callback) {
|
||||||
this._imapClient.uploadMessage({
|
this._imapClient.uploadMessage({
|
||||||
path: options.folder.path,
|
path: options.folder.path,
|
||||||
message: options.message
|
message: options.message
|
||||||
|
@ -1664,7 +1668,7 @@ EmailDAO.prototype._imapUploadMessage = function(options, callback) {
|
||||||
* @param {Object} options.bodyParts The message, as retrieved by _imapListMessages
|
* @param {Object} options.bodyParts The message, as retrieved by _imapListMessages
|
||||||
* @param {Function} callback (error, message) The callback when the imap client is done streaming message text content
|
* @param {Function} callback (error, message) The callback when the imap client is done streaming message text content
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._getBodyParts = function(options, callback) {
|
Email.prototype._getBodyParts = function(options, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if (!self._account.online) {
|
if (!self._account.online) {
|
||||||
|
@ -1702,7 +1706,7 @@ EmailDAO.prototype._getBodyParts = function(options, callback) {
|
||||||
* @param {Object} options.uid A specific uid to look up locally in the folder
|
* @param {Object} options.uid A specific uid to look up locally in the folder
|
||||||
* @param {Function} callback(error, list) Invoked with the results of the query, or further information, if an error occurred
|
* @param {Function} callback(error, list) Invoked with the results of the query, or further information, if an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._localListMessages = function(options, callback) {
|
Email.prototype._localListMessages = function(options, callback) {
|
||||||
var dbType = 'email_' + options.folder.path + (options.uid ? '_' + options.uid : '');
|
var dbType = 'email_' + options.folder.path + (options.uid ? '_' + options.uid : '');
|
||||||
this._devicestorage.listItems(dbType, 0, null, callback);
|
this._devicestorage.listItems(dbType, 0, null, callback);
|
||||||
};
|
};
|
||||||
|
@ -1714,7 +1718,7 @@ EmailDAO.prototype._localListMessages = function(options, callback) {
|
||||||
* @param {Array} options.messages The messages to store
|
* @param {Array} options.messages The messages to store
|
||||||
* @param {Function} callback(error, list) Invoked with the results of the query, or further information, if an error occurred
|
* @param {Function} callback(error, list) Invoked with the results of the query, or further information, if an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._localStoreMessages = function(options, callback) {
|
Email.prototype._localStoreMessages = function(options, callback) {
|
||||||
var dbType = 'email_' + options.folder.path;
|
var dbType = 'email_' + options.folder.path;
|
||||||
this._devicestorage.storeList(options.emails, dbType, callback);
|
this._devicestorage.storeList(options.emails, dbType, callback);
|
||||||
};
|
};
|
||||||
|
@ -1726,7 +1730,7 @@ EmailDAO.prototype._localStoreMessages = function(options, callback) {
|
||||||
* @param {Array} options.messages The messages to store
|
* @param {Array} options.messages The messages to store
|
||||||
* @param {Function} callback(error, list) Invoked with the results of the query, or further information, if an error occurred
|
* @param {Function} callback(error, list) Invoked with the results of the query, or further information, if an error occurred
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._localDeleteMessage = function(options, callback) {
|
Email.prototype._localDeleteMessage = function(options, callback) {
|
||||||
var path = options.folder.path,
|
var path = options.folder.path,
|
||||||
uid = options.uid,
|
uid = options.uid,
|
||||||
id = options.id;
|
id = options.id;
|
||||||
|
@ -1756,7 +1760,7 @@ EmailDAO.prototype._localDeleteMessage = function(options, callback) {
|
||||||
* @param {String} options.message The rfc2822 compatible raw ASCII e-mail source
|
* @param {String} options.message The rfc2822 compatible raw ASCII e-mail source
|
||||||
* @param {Function} callback (error) The callback when the imap client is done uploading
|
* @param {Function} callback (error) The callback when the imap client is done uploading
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype._uploadToSent = function(options, callback) {
|
Email.prototype._uploadToSent = function(options, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.busy();
|
self.busy();
|
||||||
|
@ -1796,7 +1800,7 @@ EmailDAO.prototype._uploadToSent = function(options, callback) {
|
||||||
* @param {String} hostname The hostname to check
|
* @param {String} hostname The hostname to check
|
||||||
* @return {Boolean} true if upload can be ignored, otherwise false
|
* @return {Boolean} true if upload can be ignored, otherwise false
|
||||||
*/
|
*/
|
||||||
EmailDAO.prototype.checkIgnoreUploadOnSent = function(hostname) {
|
Email.prototype.checkIgnoreUploadOnSent = function(hostname) {
|
||||||
for (var i = 0; i < config.ignoreUploadOnSentDomains.length; i++) {
|
for (var i = 0; i < config.ignoreUploadOnSentDomains.length; i++) {
|
||||||
if (config.ignoreUploadOnSentDomains[i].test(hostname)) {
|
if (config.ignoreUploadOnSentDomains[i].test(hostname)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -1876,6 +1880,4 @@ function inlineExternalImages(message) {
|
||||||
|
|
||||||
return prefix + localSource + suffix;
|
return prefix + localSource + suffix;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = EmailDAO;
|
|
|
@ -1,20 +1,24 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.service('invitation', Invitation);
|
||||||
|
module.exports = Invitation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The InvitationDAO is a high level Data Access Object that access the invitation service REST endpoint.
|
* The Invitation is a high level Data Access Object that access the invitation service REST endpoint.
|
||||||
* @param {Object} restDao The REST Data Access Object abstraction
|
* @param {Object} restDao The REST Data Access Object abstraction
|
||||||
*/
|
*/
|
||||||
var InvitationDAO = function(restDao) {
|
function Invitation(restDao) {
|
||||||
this._restDao = restDao;
|
this._restDao = restDao;
|
||||||
};
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constants
|
// Constants
|
||||||
//
|
//
|
||||||
|
|
||||||
InvitationDAO.INVITE_MISSING = 1;
|
Invitation.INVITE_MISSING = 1;
|
||||||
InvitationDAO.INVITE_PENDING = 2;
|
Invitation.INVITE_PENDING = 2;
|
||||||
InvitationDAO.INVITE_SUCCESS = 4;
|
Invitation.INVITE_SUCCESS = 4;
|
||||||
|
|
||||||
//
|
//
|
||||||
// API
|
// API
|
||||||
|
@ -26,7 +30,7 @@ InvitationDAO.INVITE_SUCCESS = 4;
|
||||||
* @param {String} options.sender User ID of the sender
|
* @param {String} options.sender User ID of the sender
|
||||||
* @param {Function} callback(error, status) Returns information if the invitation worked (INVITE_SUCCESS), if an invitation is already pendin (INVITE_PENDING), or information if an error occurred.
|
* @param {Function} callback(error, status) Returns information if the invitation worked (INVITE_SUCCESS), if an invitation is already pendin (INVITE_PENDING), or information if an error occurred.
|
||||||
*/
|
*/
|
||||||
InvitationDAO.prototype.invite = function(options, callback) {
|
Invitation.prototype.invite = function(options, callback) {
|
||||||
if (typeof options !== 'object' || typeof options.recipient !== 'string' || typeof options.recipient !== 'string') {
|
if (typeof options !== 'object' || typeof options.recipient !== 'string' || typeof options.recipient !== 'string') {
|
||||||
callback({
|
callback({
|
||||||
errMsg: 'erroneous usage of api: incorrect parameters!'
|
errMsg: 'erroneous usage of api: incorrect parameters!'
|
||||||
|
@ -44,10 +48,10 @@ InvitationDAO.prototype.invite = function(options, callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status === 201) {
|
if (status === 201) {
|
||||||
callback(null, InvitationDAO.INVITE_SUCCESS);
|
callback(null, Invitation.INVITE_SUCCESS);
|
||||||
return;
|
return;
|
||||||
} else if (status === 304) {
|
} else if (status === 304) {
|
||||||
callback(null, InvitationDAO.INVITE_PENDING);
|
callback(null, Invitation.INVITE_PENDING);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +59,4 @@ InvitationDAO.prototype.invite = function(options, callback) {
|
||||||
errMsg: 'unexpected invitation state'
|
errMsg: 'unexpected invitation state'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = InvitationDAO;
|
|
|
@ -1,10 +1,9 @@
|
||||||
/**
|
|
||||||
* A high-level Data-Access Api for handling Keypair synchronization
|
|
||||||
* between the cloud service and the device's local storage
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.service('keychain', Keychain);
|
||||||
|
module.exports = Keychain;
|
||||||
|
|
||||||
var util = require('crypto-lib').util,
|
var util = require('crypto-lib').util,
|
||||||
config = require('../app-config').config;
|
config = require('../app-config').config;
|
||||||
|
|
||||||
|
@ -13,13 +12,17 @@ var DB_PUBLICKEY = 'publickey',
|
||||||
DB_DEVICENAME = 'devicename',
|
DB_DEVICENAME = 'devicename',
|
||||||
DB_DEVICE_SECRET = 'devicesecret';
|
DB_DEVICE_SECRET = 'devicesecret';
|
||||||
|
|
||||||
var KeychainDAO = function(localDbDao, publicKeyDao, privateKeyDao, crypto, pgp) {
|
/**
|
||||||
|
* A high-level Data-Access Api for handling Keypair synchronization
|
||||||
|
* between the cloud service and the device's local storage
|
||||||
|
*/
|
||||||
|
function Keychain(localDbDao, publicKeyDao, privateKeyDao, crypto, pgp) {
|
||||||
this._localDbDao = localDbDao;
|
this._localDbDao = localDbDao;
|
||||||
this._publicKeyDao = publicKeyDao;
|
this._publicKeyDao = publicKeyDao;
|
||||||
this._privateKeyDao = privateKeyDao;
|
this._privateKeyDao = privateKeyDao;
|
||||||
this._crypto = crypto;
|
this._crypto = crypto;
|
||||||
this._pgp = pgp;
|
this._pgp = pgp;
|
||||||
};
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Public key functions
|
// Public key functions
|
||||||
|
@ -30,7 +33,7 @@ var KeychainDAO = function(localDbDao, publicKeyDao, privateKeyDao, crypto, pgp)
|
||||||
* @param {String} uuid The uuid to verify the key
|
* @param {String} uuid The uuid to verify the key
|
||||||
* @param {Function} callback(error) Callback with an optional error object when the verification is done. If the was an error, the error object contains the information for it.
|
* @param {Function} callback(error) Callback with an optional error object when the verification is done. If the was an error, the error object contains the information for it.
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.verifyPublicKey = function(uuid, callback) {
|
Keychain.prototype.verifyPublicKey = function(uuid, callback) {
|
||||||
this._publicKeyDao.verify(uuid, callback);
|
this._publicKeyDao.verify(uuid, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -40,7 +43,7 @@ KeychainDAO.prototype.verifyPublicKey = function(uuid, callback) {
|
||||||
* @param ids [Array] the key ids as [{_id, userId}]
|
* @param ids [Array] the key ids as [{_id, userId}]
|
||||||
* @return [PublicKeyCollection] The requiested public keys
|
* @return [PublicKeyCollection] The requiested public keys
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.getPublicKeys = function(ids, callback) {
|
Keychain.prototype.getPublicKeys = function(ids, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
after, already, pubkeys = [];
|
after, already, pubkeys = [];
|
||||||
|
|
||||||
|
@ -85,7 +88,7 @@ KeychainDAO.prototype.getPublicKeys = function(ids, callback) {
|
||||||
* @param {String} options.overridePermission (optional) Indicates if the update should happen automatically (true) or with the user being queried (false). Defaults to false
|
* @param {String} options.overridePermission (optional) Indicates if the update should happen automatically (true) or with the user being queried (false). Defaults to false
|
||||||
* @param {Function} callback(error, key) Invoked when the key has been updated or an error occurred
|
* @param {Function} callback(error, key) Invoked when the key has been updated or an error occurred
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.refreshKeyForUserId = function(options, callback) {
|
Keychain.prototype.refreshKeyForUserId = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
userId = options.userId,
|
userId = options.userId,
|
||||||
overridePermission = options.overridePermission;
|
overridePermission = options.overridePermission;
|
||||||
|
@ -189,7 +192,7 @@ KeychainDAO.prototype.refreshKeyForUserId = function(options, callback) {
|
||||||
* Look up a reveiver's public key by user id
|
* Look up a reveiver's public key by user id
|
||||||
* @param userId [String] the receiver's email address
|
* @param userId [String] the receiver's email address
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.getReceiverPublicKey = function(userId, callback) {
|
Keychain.prototype.getReceiverPublicKey = function(userId, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// search local keyring for public key
|
// search local keyring for public key
|
||||||
|
@ -266,7 +269,7 @@ KeychainDAO.prototype.getReceiverPublicKey = function(userId, callback) {
|
||||||
* @param {String} deviceName The device name
|
* @param {String} deviceName The device name
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.setDeviceName = function(deviceName, callback) {
|
Keychain.prototype.setDeviceName = function(deviceName, callback) {
|
||||||
if (!deviceName) {
|
if (!deviceName) {
|
||||||
callback(new Error('Please set a device name!'));
|
callback(new Error('Please set a device name!'));
|
||||||
return;
|
return;
|
||||||
|
@ -280,7 +283,7 @@ KeychainDAO.prototype.setDeviceName = function(deviceName, callback) {
|
||||||
* @param {Function} callback(error, deviceName)
|
* @param {Function} callback(error, deviceName)
|
||||||
* @return {String} The device name
|
* @return {String} The device name
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.getDeviceName = function(callback) {
|
Keychain.prototype.getDeviceName = function(callback) {
|
||||||
// check if deviceName is already persisted in storage
|
// check if deviceName is already persisted in storage
|
||||||
this._localDbDao.read(DB_DEVICENAME, function(err, deviceName) {
|
this._localDbDao.read(DB_DEVICENAME, function(err, deviceName) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -301,7 +304,7 @@ KeychainDAO.prototype.getDeviceName = function(callback) {
|
||||||
* Geneate a device specific key and secret to authenticate to the private key service.
|
* Geneate a device specific key and secret to authenticate to the private key service.
|
||||||
* @param {Function} callback(error, deviceSecret:[base64 encoded string])
|
* @param {Function} callback(error, deviceSecret:[base64 encoded string])
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.getDeviceSecret = function(callback) {
|
Keychain.prototype.getDeviceSecret = function(callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// generate random deviceSecret or get from storage
|
// generate random deviceSecret or get from storage
|
||||||
|
@ -336,7 +339,7 @@ KeychainDAO.prototype.getDeviceSecret = function(callback) {
|
||||||
* @param {String} options.userId The user's email address
|
* @param {String} options.userId The user's email address
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.registerDevice = function(options, callback) {
|
Keychain.prototype.registerDevice = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
devName;
|
devName;
|
||||||
|
|
||||||
|
@ -435,7 +438,7 @@ KeychainDAO.prototype.registerDevice = function(options, callback) {
|
||||||
* @param {Function} callback(error, authSessionKey)
|
* @param {Function} callback(error, authSessionKey)
|
||||||
* @return {Object} {sessionId:String, sessionKey:[base64 encoded]}
|
* @return {Object} {sessionId:String, sessionKey:[base64 encoded]}
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype._authenticateToPrivateKeyServer = function(userId, callback) {
|
Keychain.prototype._authenticateToPrivateKeyServer = function(userId, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
sessionId;
|
sessionId;
|
||||||
|
|
||||||
|
@ -552,7 +555,7 @@ KeychainDAO.prototype._authenticateToPrivateKeyServer = function(userId, callbac
|
||||||
* @param {String} options.code The randomly generated or self selected code used to derive the key for the encryption of the private PGP key
|
* @param {String} options.code The randomly generated or self selected code used to derive the key for the encryption of the private PGP key
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.uploadPrivateKey = function(options, callback) {
|
Keychain.prototype.uploadPrivateKey = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
keySize = config.symKeySize,
|
keySize = config.symKeySize,
|
||||||
salt;
|
salt;
|
||||||
|
@ -646,7 +649,7 @@ KeychainDAO.prototype.uploadPrivateKey = function(options, callback) {
|
||||||
* @param {String} options.keyId The private PGP key id
|
* @param {String} options.keyId The private PGP key id
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.requestPrivateKeyDownload = function(options, callback) {
|
Keychain.prototype.requestPrivateKeyDownload = function(options, callback) {
|
||||||
this._privateKeyDao.requestDownload(options, callback);
|
this._privateKeyDao.requestDownload(options, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -656,7 +659,7 @@ KeychainDAO.prototype.requestPrivateKeyDownload = function(options, callback) {
|
||||||
* @param {String} options.keyId The private PGP key id
|
* @param {String} options.keyId The private PGP key id
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.hasPrivateKey = function(options, callback) {
|
Keychain.prototype.hasPrivateKey = function(options, callback) {
|
||||||
this._privateKeyDao.hasPrivateKey(options, callback);
|
this._privateKeyDao.hasPrivateKey(options, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -667,7 +670,7 @@ KeychainDAO.prototype.hasPrivateKey = function(options, callback) {
|
||||||
* @param {String} options.recoveryToken The recovery token acquired via email/sms from the key server
|
* @param {String} options.recoveryToken The recovery token acquired via email/sms from the key server
|
||||||
* @param {Function} callback(error, encryptedPrivateKey)
|
* @param {Function} callback(error, encryptedPrivateKey)
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.downloadPrivateKey = function(options, callback) {
|
Keychain.prototype.downloadPrivateKey = function(options, callback) {
|
||||||
this._privateKeyDao.download(options, callback);
|
this._privateKeyDao.download(options, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -681,7 +684,7 @@ KeychainDAO.prototype.downloadPrivateKey = function(options, callback) {
|
||||||
* @param {String} options.iv The iv used to encrypt the private PGP key
|
* @param {String} options.iv The iv used to encrypt the private PGP key
|
||||||
* @param {Function} callback(error, keyObject)
|
* @param {Function} callback(error, keyObject)
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.decryptAndStorePrivateKeyLocally = function(options, callback) {
|
Keychain.prototype.decryptAndStorePrivateKeyLocally = function(options, callback) {
|
||||||
var self = this,
|
var self = this,
|
||||||
code = options.code,
|
code = options.code,
|
||||||
salt = options.salt,
|
salt = options.salt,
|
||||||
|
@ -756,7 +759,7 @@ KeychainDAO.prototype.decryptAndStorePrivateKeyLocally = function(options, callb
|
||||||
* If no key pair exists, null is returned.
|
* If no key pair exists, null is returned.
|
||||||
* return [Object] The user's key pair {publicKey, privateKey}
|
* return [Object] The user's key pair {publicKey, privateKey}
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.getUserKeyPair = function(userId, callback) {
|
Keychain.prototype.getUserKeyPair = function(userId, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// search for user's public key locally
|
// search for user's public key locally
|
||||||
|
@ -833,7 +836,7 @@ KeychainDAO.prototype.getUserKeyPair = function(userId, callback) {
|
||||||
* locally and in the cloud and persist arccordingly
|
* locally and in the cloud and persist arccordingly
|
||||||
* @param [Object] The user's key pair {publicKey, privateKey}
|
* @param [Object] The user's key pair {publicKey, privateKey}
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.putUserKeyPair = function(keypair, callback) {
|
Keychain.prototype.putUserKeyPair = function(keypair, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// validate input
|
// validate input
|
||||||
|
@ -872,7 +875,7 @@ KeychainDAO.prototype.putUserKeyPair = function(keypair, callback) {
|
||||||
// Helper functions
|
// Helper functions
|
||||||
//
|
//
|
||||||
|
|
||||||
KeychainDAO.prototype.lookupPublicKey = function(id, callback) {
|
Keychain.prototype.lookupPublicKey = function(id, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if (!id) {
|
if (!id) {
|
||||||
|
@ -917,30 +920,28 @@ KeychainDAO.prototype.lookupPublicKey = function(id, callback) {
|
||||||
/**
|
/**
|
||||||
* List all the locally stored public keys
|
* List all the locally stored public keys
|
||||||
*/
|
*/
|
||||||
KeychainDAO.prototype.listLocalPublicKeys = function(callback) {
|
Keychain.prototype.listLocalPublicKeys = function(callback) {
|
||||||
// search local keyring for public key
|
// search local keyring for public key
|
||||||
this._localDbDao.list(DB_PUBLICKEY, 0, null, callback);
|
this._localDbDao.list(DB_PUBLICKEY, 0, null, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
KeychainDAO.prototype.removeLocalPublicKey = function(id, callback) {
|
Keychain.prototype.removeLocalPublicKey = function(id, callback) {
|
||||||
this._localDbDao.remove(DB_PUBLICKEY + '_' + id, callback);
|
this._localDbDao.remove(DB_PUBLICKEY + '_' + id, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
KeychainDAO.prototype.lookupPrivateKey = function(id, callback) {
|
Keychain.prototype.lookupPrivateKey = function(id, callback) {
|
||||||
// lookup in local storage
|
// lookup in local storage
|
||||||
this._localDbDao.read(DB_PRIVATEKEY + '_' + id, callback);
|
this._localDbDao.read(DB_PRIVATEKEY + '_' + id, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
KeychainDAO.prototype.saveLocalPublicKey = function(pubkey, callback) {
|
Keychain.prototype.saveLocalPublicKey = function(pubkey, callback) {
|
||||||
// persist public key (email, _id)
|
// persist public key (email, _id)
|
||||||
var pkLookupKey = DB_PUBLICKEY + '_' + pubkey._id;
|
var pkLookupKey = DB_PUBLICKEY + '_' + pubkey._id;
|
||||||
this._localDbDao.persist(pkLookupKey, pubkey, callback);
|
this._localDbDao.persist(pkLookupKey, pubkey, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
KeychainDAO.prototype.saveLocalPrivateKey = function(privkey, callback) {
|
Keychain.prototype.saveLocalPrivateKey = function(privkey, callback) {
|
||||||
// persist private key (email, _id)
|
// persist private key (email, _id)
|
||||||
var prkLookupKey = DB_PRIVATEKEY + '_' + privkey._id;
|
var prkLookupKey = DB_PRIVATEKEY + '_' + privkey._id;
|
||||||
this._localDbDao.persist(prkLookupKey, privkey, callback);
|
this._localDbDao.persist(prkLookupKey, privkey, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = KeychainDAO;
|
|
|
@ -1,11 +1,18 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.service('lawnchairDAO', LawnchairDAO);
|
||||||
|
module.exports = LawnchairDAO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles generic caching of JSON objects in a lawnchair adapter
|
* Handles generic caching of JSON objects in a lawnchair adapter
|
||||||
*/
|
*/
|
||||||
|
function LawnchairDAO() {}
|
||||||
|
|
||||||
'use strict';
|
/**
|
||||||
|
* Initialize the lawnchair database
|
||||||
var LawnchairDAO = function() {};
|
* @param {String} dbName The name of the database
|
||||||
|
*/
|
||||||
LawnchairDAO.prototype.init = function(dbName, callback) {
|
LawnchairDAO.prototype.init = function(dbName, callback) {
|
||||||
if (!dbName) {
|
if (!dbName) {
|
||||||
callback({
|
callback({
|
||||||
|
@ -211,6 +218,4 @@ LawnchairDAO.prototype.removeList = function(type, callback) {
|
||||||
*/
|
*/
|
||||||
LawnchairDAO.prototype.clear = function(callback) {
|
LawnchairDAO.prototype.clear = function(callback) {
|
||||||
this._db.nuke(callback);
|
this._db.nuke(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = LawnchairDAO;
|
|
|
@ -1,8 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var PrivateKeyDAO = function(restDao) {
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.service('privateKey', PrivateKey);
|
||||||
|
module.exports = PrivateKey;
|
||||||
|
|
||||||
|
function PrivateKey(restDao) {
|
||||||
this._restDao = restDao;
|
this._restDao = restDao;
|
||||||
};
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Device registration functions
|
// Device registration functions
|
||||||
|
@ -15,7 +19,7 @@ var PrivateKeyDAO = function(restDao) {
|
||||||
* @param {Function} callback(error, regSessionKey)
|
* @param {Function} callback(error, regSessionKey)
|
||||||
* @return {Object} {encryptedRegSessionKey:[base64]}
|
* @return {Object} {encryptedRegSessionKey:[base64]}
|
||||||
*/
|
*/
|
||||||
PrivateKeyDAO.prototype.requestDeviceRegistration = function(options, callback) {
|
PrivateKey.prototype.requestDeviceRegistration = function(options, callback) {
|
||||||
var uri;
|
var uri;
|
||||||
|
|
||||||
if (!options.userId || !options.deviceName) {
|
if (!options.userId || !options.deviceName) {
|
||||||
|
@ -35,7 +39,7 @@ PrivateKeyDAO.prototype.requestDeviceRegistration = function(options, callback)
|
||||||
* @param {String} options.iv The iv used for encryption
|
* @param {String} options.iv The iv used for encryption
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
PrivateKeyDAO.prototype.uploadDeviceSecret = function(options, callback) {
|
PrivateKey.prototype.uploadDeviceSecret = function(options, callback) {
|
||||||
var uri;
|
var uri;
|
||||||
|
|
||||||
if (!options.userId || !options.deviceName || !options.encryptedDeviceSecret || !options.iv) {
|
if (!options.userId || !options.deviceName || !options.encryptedDeviceSecret || !options.iv) {
|
||||||
|
@ -57,7 +61,7 @@ PrivateKeyDAO.prototype.uploadDeviceSecret = function(options, callback) {
|
||||||
* @param {Function} callback(error, authSessionKey)
|
* @param {Function} callback(error, authSessionKey)
|
||||||
* @return {Object} {sessionId, encryptedAuthSessionKey:[base64 encoded], encryptedChallenge:[base64 encoded]}
|
* @return {Object} {sessionId, encryptedAuthSessionKey:[base64 encoded], encryptedChallenge:[base64 encoded]}
|
||||||
*/
|
*/
|
||||||
PrivateKeyDAO.prototype.requestAuthSessionKey = function(options, callback) {
|
PrivateKey.prototype.requestAuthSessionKey = function(options, callback) {
|
||||||
var uri;
|
var uri;
|
||||||
|
|
||||||
if (!options.userId) {
|
if (!options.userId) {
|
||||||
|
@ -77,7 +81,7 @@ PrivateKeyDAO.prototype.requestAuthSessionKey = function(options, callback) {
|
||||||
* @param {String} options.iv The iv used for encryption
|
* @param {String} options.iv The iv used for encryption
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
PrivateKeyDAO.prototype.verifyAuthentication = function(options, callback) {
|
PrivateKey.prototype.verifyAuthentication = function(options, callback) {
|
||||||
var uri;
|
var uri;
|
||||||
|
|
||||||
if (!options.userId || !options.sessionId || !options.encryptedChallenge || !options.encryptedDeviceSecret || !options.iv) {
|
if (!options.userId || !options.sessionId || !options.encryptedChallenge || !options.encryptedDeviceSecret || !options.iv) {
|
||||||
|
@ -97,7 +101,7 @@ PrivateKeyDAO.prototype.verifyAuthentication = function(options, callback) {
|
||||||
* @param {String} options.sessionId The session id
|
* @param {String} options.sessionId The session id
|
||||||
* @param {Function} callback(error)
|
* @param {Function} callback(error)
|
||||||
*/
|
*/
|
||||||
PrivateKeyDAO.prototype.upload = function(options, callback) {
|
PrivateKey.prototype.upload = function(options, callback) {
|
||||||
var uri;
|
var uri;
|
||||||
|
|
||||||
if (!options._id || !options.userId || !options.encryptedPrivateKey || !options.sessionId || !options.salt || !options.iv) {
|
if (!options._id || !options.userId || !options.encryptedPrivateKey || !options.sessionId || !options.salt || !options.iv) {
|
||||||
|
@ -116,7 +120,7 @@ PrivateKeyDAO.prototype.upload = function(options, callback) {
|
||||||
* @param {Function} callback(error, found)
|
* @param {Function} callback(error, found)
|
||||||
* @return {Boolean} whether the key was found on the server or not.
|
* @return {Boolean} whether the key was found on the server or not.
|
||||||
*/
|
*/
|
||||||
PrivateKeyDAO.prototype.hasPrivateKey = function(options, callback) {
|
PrivateKey.prototype.hasPrivateKey = function(options, callback) {
|
||||||
if (!options.userId || !options.keyId) {
|
if (!options.userId || !options.keyId) {
|
||||||
callback(new Error('Incomplete arguments!'));
|
callback(new Error('Incomplete arguments!'));
|
||||||
return;
|
return;
|
||||||
|
@ -147,7 +151,7 @@ PrivateKeyDAO.prototype.hasPrivateKey = function(options, callback) {
|
||||||
* @param {Function} callback(error, found)
|
* @param {Function} callback(error, found)
|
||||||
* @return {Boolean} whether the key was found on the server or not.
|
* @return {Boolean} whether the key was found on the server or not.
|
||||||
*/
|
*/
|
||||||
PrivateKeyDAO.prototype.requestDownload = function(options, callback) {
|
PrivateKey.prototype.requestDownload = function(options, callback) {
|
||||||
if (!options.userId || !options.keyId) {
|
if (!options.userId || !options.keyId) {
|
||||||
callback(new Error('Incomplete arguments!'));
|
callback(new Error('Incomplete arguments!'));
|
||||||
return;
|
return;
|
||||||
|
@ -179,7 +183,7 @@ PrivateKeyDAO.prototype.requestDownload = function(options, callback) {
|
||||||
* @param {Function} callback(error, encryptedPrivateKey)
|
* @param {Function} callback(error, encryptedPrivateKey)
|
||||||
* @return {Object} {_id:[hex encoded capital 16 char key id], encryptedPrivateKey:[base64 encoded], encryptedUserId: [base64 encoded]}
|
* @return {Object} {_id:[hex encoded capital 16 char key id], encryptedPrivateKey:[base64 encoded], encryptedUserId: [base64 encoded]}
|
||||||
*/
|
*/
|
||||||
PrivateKeyDAO.prototype.download = function(options, callback) {
|
PrivateKey.prototype.download = function(options, callback) {
|
||||||
var uri;
|
var uri;
|
||||||
|
|
||||||
if (!options.userId || !options.keyId || !options.recoveryToken) {
|
if (!options.userId || !options.keyId || !options.recoveryToken) {
|
||||||
|
@ -191,6 +195,4 @@ PrivateKeyDAO.prototype.download = function(options, callback) {
|
||||||
this._restDao.get({
|
this._restDao.get({
|
||||||
uri: uri
|
uri: uri
|
||||||
}, callback);
|
}, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = PrivateKeyDAO;
|
|
|
@ -1,13 +1,17 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var PublicKeyDAO = function(restDao) {
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.service('publicKey', PublicKey);
|
||||||
|
module.exports = PublicKey;
|
||||||
|
|
||||||
|
function PublicKey(restDao) {
|
||||||
this._restDao = restDao;
|
this._restDao = restDao;
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verify the public key behind the given uuid
|
* Verify the public key behind the given uuid
|
||||||
*/
|
*/
|
||||||
PublicKeyDAO.prototype.verify = function(uuid, callback) {
|
PublicKey.prototype.verify = function(uuid, callback) {
|
||||||
var uri = '/verify/' + uuid;
|
var uri = '/verify/' + uuid;
|
||||||
|
|
||||||
this._restDao.get({
|
this._restDao.get({
|
||||||
|
@ -27,7 +31,7 @@ PublicKeyDAO.prototype.verify = function(uuid, callback) {
|
||||||
/**
|
/**
|
||||||
* Find the user's corresponding public key
|
* Find the user's corresponding public key
|
||||||
*/
|
*/
|
||||||
PublicKeyDAO.prototype.get = function(keyId, callback) {
|
PublicKey.prototype.get = function(keyId, callback) {
|
||||||
var uri = '/publickey/key/' + keyId;
|
var uri = '/publickey/key/' + keyId;
|
||||||
|
|
||||||
this._restDao.get({
|
this._restDao.get({
|
||||||
|
@ -50,7 +54,7 @@ PublicKeyDAO.prototype.get = function(keyId, callback) {
|
||||||
/**
|
/**
|
||||||
* Find the user's corresponding public key by email
|
* Find the user's corresponding public key by email
|
||||||
*/
|
*/
|
||||||
PublicKeyDAO.prototype.getByUserId = function(userId, callback) {
|
PublicKey.prototype.getByUserId = function(userId, callback) {
|
||||||
var uri = '/publickey/user/' + userId;
|
var uri = '/publickey/user/' + userId;
|
||||||
|
|
||||||
this._restDao.get({
|
this._restDao.get({
|
||||||
|
@ -87,7 +91,7 @@ PublicKeyDAO.prototype.getByUserId = function(userId, callback) {
|
||||||
/**
|
/**
|
||||||
* Persist the user's publc key
|
* Persist the user's publc key
|
||||||
*/
|
*/
|
||||||
PublicKeyDAO.prototype.put = function(pubkey, callback) {
|
PublicKey.prototype.put = function(pubkey, callback) {
|
||||||
var uri = '/publickey/user/' + pubkey.userId + '/key/' + pubkey._id;
|
var uri = '/publickey/user/' + pubkey.userId + '/key/' + pubkey._id;
|
||||||
this._restDao.put(pubkey, uri, callback);
|
this._restDao.put(pubkey, uri, callback);
|
||||||
};
|
};
|
||||||
|
@ -95,9 +99,7 @@ PublicKeyDAO.prototype.put = function(pubkey, callback) {
|
||||||
/**
|
/**
|
||||||
* Delete the public key from the cloud storage service
|
* Delete the public key from the cloud storage service
|
||||||
*/
|
*/
|
||||||
PublicKeyDAO.prototype.remove = function(keyId, callback) {
|
PublicKey.prototype.remove = function(keyId, callback) {
|
||||||
var uri = '/publickey/key/' + keyId;
|
var uri = '/publickey/key/' + keyId;
|
||||||
this._restDao.remove(uri, callback);
|
this._restDao.remove(uri, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = PublicKeyDAO;
|
|
|
@ -1,14 +1,20 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var ngModule = angular.module('woServices');
|
||||||
|
ngModule.factory('restDao', function() {
|
||||||
|
return new RestDAO();
|
||||||
|
});
|
||||||
|
module.exports = RestDAO;
|
||||||
|
|
||||||
var config = require('../app-config').config;
|
var config = require('../app-config').config;
|
||||||
|
|
||||||
var RestDAO = function(baseUri) {
|
function RestDAO(baseUri) {
|
||||||
if (baseUri) {
|
if (baseUri) {
|
||||||
this._baseUri = baseUri;
|
this._baseUri = baseUri;
|
||||||
} else {
|
} else {
|
||||||
this._baseUri = config.cloudUrl;
|
this._baseUri = config.cloudUrl;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET (read) request
|
* GET (read) request
|
||||||
|
@ -116,6 +122,4 @@ RestDAO.prototype._processRequest = function(options, callback) {
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.send(options.payload ? JSON.stringify(options.payload) : undefined);
|
xhr.send(options.payload ? JSON.stringify(options.payload) : undefined);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = RestDAO;
|
|
Loading…
Reference in New Issue