Commit 0f3f9fa1 authored by Sven Franck's avatar Sven Franck

jslint pass cryptstorage.js

parent 59d01abf
/*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */
/*global jIO: true, sjcl: true, $: true, setTimeout: true */
jIO.addStorageType('crypt', function (spec, my) { jIO.addStorageType('crypt', function (spec, my) {
spec = spec || {}; spec = spec || {};
var that = my.basicStorage( spec, my ), priv = {}; var that = my.basicStorage(spec, my),
priv = {},
is_valid_storage = (spec.storage ? true : false),
super_serialized = that.serialized;
var is_valid_storage = (spec.storage?true:false); priv.username = spec.username || '';
priv.password = spec.password || '';
priv.sub_storage_spec = spec.storage || {
type: 'base'
};
priv.sub_storage_string = JSON.stringify(priv.sub_storage_string);
priv.username = spec.username || ''; that.serialized = function () {
priv.password = spec.password || ''; var o = super_serialized();
priv.sub_storage_spec = spec.storage || {type:'base'}; o.username = priv.username;
priv.sub_storage_string = JSON.stringify (priv.sub_storage_string); o.password = priv.password; // TODO : unsecured !!!
o.storage = priv.sub_storage_string;
return o;
};
var super_serialized = that.serialized; that.validateState = function () {
that.serialized = function () { if (priv.username && is_valid_storage) {
var o = super_serialized(); return '';
o.username = priv.username; }
o.password = priv.password; // TODO : unsecured !!! return 'Need at least two parameters: "username" and "storage".';
o.storage = priv.sub_storage_string; };
return o;
};
that.validateState = function () { // TODO : IT IS NOT SECURE AT ALL!
if (priv.username && is_valid_storage) { // WE MUST REWORK CRYPTED STORAGE!
return ''; priv.encrypt_param_object = {
} "iv": "kaprWwY/Ucr7pumXoTHbpA",
return 'Need at least two parameters: "username" and "storage".'; "v": 1,
}; "iter": 1000,
"ks": 256,
"ts": 128,
"mode": "ccm",
"adata": "",
"cipher": "aes",
"salt": "K4bmZG9d704"
};
priv.decrypt_param_object = {
"iv": "kaprWwY/Ucr7pumXoTHbpA",
"ks": 256,
"ts": 128,
"salt": "K4bmZG9d704"
};
priv.encrypt = function (data, callback) {
// end with a callback in order to improve encrypt to an
// asynchronous encryption.
var tmp = sjcl.encrypt(priv.username + ':' + priv.password, data,
priv.encrypt_param_object);
callback(JSON.parse(tmp).ct);
};
priv.decrypt = function (data, callback) {
var tmp, param = $.extend(true, {}, priv.decrypt_param_object);
param.ct = data || '';
param = JSON.stringify(param);
try {
tmp = sjcl.decrypt(priv.username + ':' + priv.password, param);
} catch (e) {
callback({
status: 403,
statusText: 'Forbidden',
error: 'forbidden',
message: 'Unable to decrypt.',
reason: 'unable to decrypt'
});
return;
}
callback(undefined, tmp);
};
// TODO : IT IS NOT SECURE AT ALL! priv.newAsyncModule = function () {
// WE MUST REWORK CRYPTED STORAGE! var async = {};
priv.encrypt_param_object = { async.call = function (obj, function_name, arglist) {
"iv":"kaprWwY/Ucr7pumXoTHbpA", obj._wait = obj._wait || {};
"v":1, if (obj._wait[function_name]) {
"iter":1000, obj._wait[function_name] -= 1;
"ks":256, return function () {};
"ts":128, }
"mode":"ccm", // ok if undef or 0
"adata":"", arglist = arglist || [];
"cipher":"aes", setTimeout(function () {
"salt":"K4bmZG9d704" obj[function_name].apply(obj[function_name], arglist);
});
}; };
priv.decrypt_param_object = { async.neverCall = function (obj, function_name) {
"iv":"kaprWwY/Ucr7pumXoTHbpA", obj._wait = obj._wait || {};
"ks":256, obj._wait[function_name] = -1;
"ts":128,
"salt":"K4bmZG9d704"
}; };
priv.encrypt = function (data,callback) { async.wait = function (obj, function_name, times) {
// end with a callback in order to improve encrypt to an obj._wait = obj._wait || {};
// asynchronous encryption. obj._wait[function_name] = times;
var tmp = sjcl.encrypt (priv.username+':'+
priv.password, data,
priv.encrypt_param_object);
callback(JSON.parse(tmp).ct);
}; };
priv.decrypt = function (data,callback) { async.end = function () {
var tmp, param = $.extend(true,{},priv.decrypt_param_object); async.call = function () {};
param.ct = data || '';
param = JSON.stringify (param);
try {
tmp = sjcl.decrypt (priv.username+':'+
priv.password,
param);
} catch (e) {
callback({status:403,statusText:'Forbidden',error:'forbidden',
message:'Unable to decrypt.',reason:'unable to decrypt'});
return;
}
callback(undefined,tmp);
}; };
return async;
};
priv.newAsyncModule = function () { that.post = function (command) {
var async = {}; that.put(command);
async.call = function (obj,function_name,arglist) { };
obj._wait = obj._wait || {};
if (obj._wait[function_name]) { /**
obj._wait[function_name]--; * Saves a document.
return function () {}; * @method put
} */
// ok if undef or 0 that.put = function (command) {
arglist = arglist || []; var new_file_name, new_file_content, am = priv.newAsyncModule(),
setTimeout(function (){ o = {};
obj[function_name].apply(obj[function_name],arglist); o.encryptFilePath = function () {
}); priv.encrypt(command.getDocId(), function (res) {
}; new_file_name = res;
async.neverCall = function (obj,function_name) { am.call(o, 'save');
obj._wait = obj._wait || {}; });
obj._wait[function_name] = -1;
};
async.wait = function (obj,function_name,times) {
obj._wait = obj._wait || {};
obj._wait[function_name] = times;
};
async.end = function () {
async.call = function(){};
};
return async;
}; };
o.encryptFileContent = function () {
priv.encrypt(command.getDocContent(), function (res) {
new_file_content = res;
am.call(o, 'save');
});
};
o.save = function () {
var success = function (val) {
val.id = command.getDocId();
that.success(val);
},
error = function (err) {
that.error(err);
},
cloned_doc = command.cloneDoc();
that.post = function (command) { cloned_doc._id = new_file_name;
that.put (command); cloned_doc.content = new_file_content;
that.addJob('put', priv.sub_storage_spec, cloned_doc,
command.cloneOption(), success, error);
}; };
am.wait(o, 'save', 1);
am.call(o, 'encryptFilePath');
am.call(o, 'encryptFileContent');
}; // end put
/** /**
* Saves a document. * Loads a document.
* @method put * @method get
*/ */
that.put = function (command) { that.get = function (command) {
var new_file_name, new_file_content, am = priv.newAsyncModule(), o = {}; var new_file_name, am = priv.newAsyncModule(),
o.encryptFilePath = function () { o = {};
priv.encrypt(command.getDocId(),function(res) { o.encryptFilePath = function () {
new_file_name = res; priv.encrypt(command.getDocId(), function (res) {
am.call(o,'save'); new_file_name = res;
}); am.call(o, 'get');
}; });
o.encryptFileContent = function () { };
priv.encrypt(command.getDocContent(),function(res) { o.get = function () {
new_file_content = res; that.addJob('get', priv.sub_storage_spec, new_file_name,
am.call(o,'save'); command.cloneOption(), o.success, o.error);
}); };
}; o.success = function (val) {
o.save = function () { val._id = command.getDocId();
var success = function (val) { if (command.getOption('metadata_only')) {
val.id = command.getDocId(); that.success(val);
that.success (val); } else {
}, priv.decrypt(val.content, function (err, res) {
error = function (err) { if (err) {
that.error (err); that.error(err);
}, } else {
cloned_doc = command.cloneDoc(); val.content = res;
cloned_doc._id = new_file_name; that.success(val);
cloned_doc.content = new_file_content; }
that.addJob ('put',priv.sub_storage_spec,cloned_doc, });
command.cloneOption(),success,error); }
}; };
am.wait(o,'save',1); o.error = function (error) {
am.call(o,'encryptFilePath'); that.error(error);
am.call(o,'encryptFileContent'); };
}; // end put am.call(o, 'encryptFilePath');
}; // end get
/** /**
* Loads a document. * Gets a document list.
* @method get * @method allDocs
*/ */
that.get = function (command) { that.allDocs = function (command) {
var new_file_name, option, am = priv.newAsyncModule(), o = {}; var result_array = [],
o.encryptFilePath = function () { am = priv.newAsyncModule(),
priv.encrypt(command.getDocId(),function(res) { o = {};
new_file_name = res; o.allDocs = function () {
am.call(o,'get'); that.addJob('allDocs', priv.sub_storage_spec, null,
}); command.cloneOption(), o.onSuccess, o.error);
}; };
o.get = function () { o.onSuccess = function (val) {
that.addJob('get',priv.sub_storage_spec,new_file_name, if (val.total_rows === 0) {
command.cloneOption(),o.success,o.error); return am.call(o, 'success');
}; }
o.success = function (val) { result_array = val.rows;
val._id = command.getDocId(); var i, decrypt = function (c) {
if (command.getOption('metadata_only')) { priv.decrypt(result_array[c].id, function (err, res) {
that.success (val); if (err) {
} else { am.call(o, 'error', [err]);
priv.decrypt (val.content, function(err,res){ } else {
if (err) { result_array[c].id = res;
that.error(err); result_array[c].key = res;
} else { am.call(o, 'success');
val.content = res; }
that.success (val); });
} if (!command.getOption('metadata_only')) {
}); priv.decrypt(
} result_array[c].value.content,
};
o.error = function (error) {
that.error(error);
};
am.call(o,'encryptFilePath');
}; // end get
/** function (err, res) {
* Gets a document list. if (err) {
* @method allDocs am.call(o, 'error', [err]);
*/ } else {
that.allDocs = function (command) { result_array[c].value.content = res;
var result_array = [], am = priv.newAsyncModule(), o = {}; am.call(o, 'success');
o.allDocs = function () { }
that.addJob ('allDocs', priv.sub_storage_spec, null,
command.cloneOption(), o.onSuccess, o.error);
};
o.onSuccess = function (val) {
if (val.total_rows === 0) {
return am.call(o,'success');
}
result_array = val.rows;
var i, decrypt = function (c) {
priv.decrypt (result_array[c].id,function (err,res) {
if (err) {
am.call(o,'error',[err]);
} else {
result_array[c].id = res;
result_array[c].key = res;
am.call(o,'success');
}
});
if (!command.getOption('metadata_only')) {
priv.decrypt (
result_array[c].value.content,
function (err,res) {
if (err) {
am.call(o,'error',[err]);
} else {
result_array[c].value.content = res;
am.call(o,'success');
}
});
}
};
if (command.getOption('metadata_only')) {
am.wait(o,'success',val.total_rows*1-1);
} else {
am.wait(o,'success',val.total_rows*2-1);
} }
for (i = 0; i < result_array.length; i+= 1) { );
decrypt(i); }
} };
}; if (command.getOption('metadata_only')) {
o.error = function (error) { am.wait(o, 'success', val.total_rows - 1);
am.end(); } else {
that.error (error); am.wait(o, 'success', val.total_rows * 2 - 1);
}; }
o.success = function () { for (i = 0; i < result_array.length; i += 1) {
am.end(); decrypt(i);
that.success ({total_rows:result_array.length,rows:result_array}); }
}; };
am.call(o,'allDocs'); o.error = function (error) {
}; // end allDocs am.end();
that.error(error);
};
o.success = function () {
am.end();
that.success({
total_rows: result_array.length,
rows: result_array
});
};
am.call(o, 'allDocs');
}; // end allDocs
/** /**
* Removes a document. * Removes a document.
* @method remove * @method remove
*/ */
that.remove = function (command) { that.remove = function (command) {
var new_file_name, o = {}; var new_file_name, o = {};
o.encryptDocId = function () { o.encryptDocId = function () {
priv.encrypt(command.getDocId(),function(res) { priv.encrypt(command.getDocId(), function (res) {
new_file_name = res; new_file_name = res;
o.removeDocument(); o.removeDocument();
}); });
}; };
o.removeDocument = function () { o.removeDocument = function () {
var cloned_doc = command.cloneDoc(); var cloned_doc = command.cloneDoc();
cloned_doc._id = new_file_name; cloned_doc._id = new_file_name;
that.addJob ('remove', priv.sub_storage_spec, cloned_doc, that.addJob('remove', priv.sub_storage_spec, cloned_doc,
command.cloneOption(), o.success, that.error); command.cloneOption(), o.success, that.error);
}; };
o.success = function (val) { o.success = function (val) {
val.id = command.getDocId(); val.id = command.getDocId();
that.success (val); that.success(val);
}; };
o.encryptDocId(); o.encryptDocId();
}; // end remove }; // end remove
return that; return that;
}; });
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment