diff --git a/config.js b/config.js index 65807a47d..41879a2c5 100644 --- a/config.js +++ b/config.js @@ -55,9 +55,10 @@ var defaultConfig = { plugins: { //LocalStorage: true, + EncryptedLocalStorage: true, //GoogleDrive: true, //InsightStorage: true - EncryptedInsightStorage: true + //EncryptedInsightStorage: true }, EncryptedInsightStorage: { diff --git a/js/models/Identity.js b/js/models/Identity.js index 1c6191899..93134543e 100644 --- a/js/models/Identity.js +++ b/js/models/Identity.js @@ -209,14 +209,14 @@ Identity.isAvailable = function(email, opts, cb) { * @param {Function} cb */ Identity.prototype.storeWallet = function(wallet, cb) { - preconditions.checkArgument(w && _.isObject(wallet)); + preconditions.checkArgument(wallet && _.isObject(wallet)); var val = wallet.toObj(); var key = wallet.getStorageKey(); this.storage.setItem(key, val, function(err) { if (err) { - log.debug('Wallet:' + w.getName() + ' couldnt be stored'); + log.debug('Wallet:' + wallet.getName() + ' couldnt be stored'); return cb(err); } return cb(); diff --git a/js/plugins/EncryptedLocalStorage.js b/js/plugins/EncryptedLocalStorage.js new file mode 100644 index 000000000..88aec147e --- /dev/null +++ b/js/plugins/EncryptedLocalStorage.js @@ -0,0 +1,30 @@ +var cryptoUtil = require('../util/crypto'); +var LocalStorage = require('./LocalStorage'); +var inherits = require('inherits'); + +function EncryptedLocalStorage(config) { + LocalStorage.apply(this, [config]); +} +inherits(EncryptedLocalStorage, LocalStorage); + +EncryptedLocalStorage.prototype.getItem = function(name, callback) { + var key = cryptoUtil.kdf(this.password, this.email); + LocalStorage.prototype.getItem.apply(this, [name, function(err, body) { + var decryptedJson = cryptoUtil.decrypt(key, body); + if (!decryptedJson) { + return callback('Internal Error'); + } + return callback(null, decryptedJson); + }]); +}; + +EncryptedLocalStorage.prototype.setItem = function(name, value, callback) { + var key = cryptoUtil.kdf(this.password, this.email); + if (!_.isString(value)) { + value = JSON.stringify(value); + } + var record = cryptoUtil.encrypt(key, value); + LocalStorage.prototype.setItem.apply(this, [name, record, callback]); +}; + +module.exports = EncryptedLocalStorage; diff --git a/js/plugins/LocalStorage.js b/js/plugins/LocalStorage.js index b8af2ccd9..61df027ae 100644 --- a/js/plugins/LocalStorage.js +++ b/js/plugins/LocalStorage.js @@ -8,10 +8,12 @@ LocalStorage.prototype.init = function() { }; LocalStorage.prototype.setCredentials = function(email, password, opts) { + this.email = email; + this.password = password; }; LocalStorage.prototype.getItem = function(k,cb) { - return cb(localStorage.getItem(k)); + return cb(null, localStorage.getItem(k)); }; LocalStorage.prototype.setItem = function(k,v,cb) { @@ -36,7 +38,7 @@ LocalStorage.prototype.allKeys = function(cb) { for(var i=0; i