cleanup web worker callback code to use options argument

This commit is contained in:
Tankred Hase 2013-08-31 16:29:18 +02:00
parent 873671f011
commit 04e672552b
1 changed files with 107 additions and 73 deletions

View File

@ -13,7 +13,9 @@ define(function(require) {
app = require('js/app-config'); app = require('js/app-config');
var self = {}, var self = {},
passBasedKey; passBasedKey,
BATCH_WORKER = '/crypto/crypto-batch-worker.js',
PBKDF2_WORKER = '/crypto/pbkdf2-worker.js';
/** /**
* Initializes the crypto modules by fetching the user's * Initializes the crypto modules by fetching the user's
@ -118,11 +120,16 @@ define(function(require) {
* Do PBKDF2 key derivation in a WebWorker thread * Do PBKDF2 key derivation in a WebWorker thread
*/ */
self.deriveKey = function(password, keySize, callback) { self.deriveKey = function(password, keySize, callback) {
startWorker('/crypto/pbkdf2-worker.js', { startWorker({
script: PBKDF2_WORKER,
args: {
password: password, password: password,
keySize: keySize keySize: keySize
}, callback, function() { },
callback: callback,
noWorker: function() {
return pbkdf2.getKey(password, keySize); return pbkdf2.getKey(password, keySize);
}
}); });
}; };
@ -147,27 +154,37 @@ define(function(require) {
envelopes.push(envelope); envelopes.push(envelope);
}); });
startWorker('/crypto/crypto-batch-worker.js', { startWorker({
script: BATCH_WORKER,
args: {
type: 'symEncrypt', type: 'symEncrypt',
list: envelopes list: envelopes
}, function(err, encryptedList) { },
callback: function(err, encryptedList) {
// return generated secret key // return generated secret key
callback(err, { callback(err, {
key: key, key: key,
list: encryptedList list: encryptedList
}); });
}, function() { },
noWorker: function() {
return cryptoBatch.authEncryptList(envelopes); return cryptoBatch.authEncryptList(envelopes);
}
}); });
}; };
self.symDecryptList = function(list, keys, callback) { self.symDecryptList = function(list, keys, callback) {
startWorker('/crypto/crypto-batch-worker.js', { startWorker({
script: BATCH_WORKER,
args: {
type: 'symDecrypt', type: 'symDecrypt',
list: list, list: list,
keys: keys keys: keys
}, callback, function() { },
callback: callback,
noWorker: function() {
return cryptoBatch.authDecryptList(list, keys); return cryptoBatch.authDecryptList(list, keys);
}
}); });
}; };
@ -203,13 +220,18 @@ define(function(require) {
envelopes.push(envelope); envelopes.push(envelope);
}); });
startWorker('/crypto/crypto-batch-worker.js', { startWorker({
script: BATCH_WORKER,
args: {
type: 'asymEncrypt', type: 'asymEncrypt',
list: envelopes, list: envelopes,
senderPrivkey: senderPrivkey, senderPrivkey: senderPrivkey,
receiverPubkeys: receiverPubkeys receiverPubkeys: receiverPubkeys
}, callback, function() { },
callback: callback,
noWorker: function() {
return cryptoBatch.encryptListForUser(envelopes, receiverPubkeys, senderPrivkey); return cryptoBatch.encryptListForUser(envelopes, receiverPubkeys, senderPrivkey);
}
}); });
}; };
@ -227,13 +249,18 @@ define(function(require) {
privateKey: keypair.privkeyPem privateKey: keypair.privkeyPem
}; };
startWorker('/crypto/crypto-batch-worker.js', { startWorker({
script: BATCH_WORKER,
args: {
type: 'asymDecrypt', type: 'asymDecrypt',
list: list, list: list,
receiverPrivkey: receiverPrivkey, receiverPrivkey: receiverPrivkey,
senderPubkeys: senderPubkeys senderPubkeys: senderPubkeys
}, callback, function() { },
callback: callback,
noWorker: function() {
return cryptoBatch.decryptListForUser(list, senderPubkeys, receiverPrivkey); return cryptoBatch.decryptListForUser(list, senderPubkeys, receiverPrivkey);
}
}); });
}; };
@ -248,24 +275,34 @@ define(function(require) {
privateKey: keypair.privkeyPem privateKey: keypair.privkeyPem
}; };
startWorker('/crypto/crypto-batch-worker.js', { startWorker({
script: BATCH_WORKER,
args: {
type: 'reencrypt', type: 'reencrypt',
list: list, list: list,
receiverPrivkey: receiverPrivkey, receiverPrivkey: receiverPrivkey,
senderPubkeys: senderPubkeys, senderPubkeys: senderPubkeys,
symKey: passBasedKey symKey: passBasedKey
}, callback, function() { },
callback: callback,
noWorker: function() {
return cryptoBatch.reencryptListKeysForUser(list, senderPubkeys, receiverPrivkey, passBasedKey); return cryptoBatch.reencryptListKeysForUser(list, senderPubkeys, receiverPrivkey, passBasedKey);
}
}); });
}; };
self.decryptKeysAndList = function(list, callback) { self.decryptKeysAndList = function(list, callback) {
startWorker('/crypto/crypto-batch-worker.js', { startWorker({
script: BATCH_WORKER,
args: {
type: 'decryptItems', type: 'decryptItems',
list: list, list: list,
symKey: passBasedKey symKey: passBasedKey
}, callback, function() { },
callback: callback,
noWorker: function() {
return cryptoBatch.decryptKeysAndList(list, passBasedKey); return cryptoBatch.decryptKeysAndList(list, passBasedKey);
}
}); });
}; };
@ -273,39 +310,36 @@ define(function(require) {
// helper functions // helper functions
// //
function startWorker(script, args, callback, noWorker) { function startWorker(options) {
// check for WebWorker support // check for WebWorker support
if (window.Worker) { if (window.Worker) {
// init webworker thread // init webworker thread
var worker = new Worker(app.config.workerPath + script); var worker = new Worker(app.config.workerPath + options.script);
worker.onmessage = function(e) { worker.onmessage = function(e) {
if (e.data.err) { if (e.data.err) {
callback(e.data.err); options.callback(e.data.err);
return; return;
} }
// return result from the worker // return result from the worker
callback(null, e.data); options.callback(null, e.data);
}; };
// send data to the worker // send data to the worker
worker.postMessage(args); worker.postMessage(options.args);
return;
}
} else {
// no WebWorker support... do synchronous call // no WebWorker support... do synchronous call
var result; var result;
try { try {
result = noWorker(); result = options.noWorker();
} catch (e) { } catch (e) {
callback({ // return error
options.callback({
errMsg: (e.message) ? e.message : e errMsg: (e.message) ? e.message : e
}); });
return; return;
} }
options.callback(null, result);
callback(null, result);
}
} }
return self; return self;