flocore-node/util/migration.js
Matias Alejo Garcia b617b500cf add tools
2014-11-11 08:59:20 -03:00

64 lines
2.0 KiB
JavaScript

var levelup = require('levelup');
var bitcore = require('bitcore');
var _ = require('lodash');
var home = process.env['HOME'];
var db = new levelup(process.argv[2] || (home + '/.insight/testnet/emailstore'));
var newDb = new levelup(process.argv[3] || (home + '/.insight/testnet/emailstore.migrated'));
var transformStoredValue = function(key) {
var oldKey = key.substr('credentials-store-'.length);
return 'emailstore-' + bitcore.util.twoSha256(oldKey).toString('hex');
};
var transformPending = function(key) {
var oldKey = key.substr('validation-code-'.length);
return 'pending-' + oldKey;
};
var transformPassphrase = function(key) {
var oldKey = key.substr('map-email-'.length);
return 'email-to-passphrase-' + bitcore.util.twoSha256(oldKey).toString('hex');
};
var transformValidated = function(key) {
var oldKey = key.substr('validated-email-'.length);
return 'validated-' + bitcore.util.twoSha256(oldKey).toString('hex');
};
var checks = {
'credentials-store-': transformStoredValue,
'validation-code-': transformPending,
'map-email-': transformPassphrase,
'validated-email': transformValidated
};
db.createReadStream()
.on('data', function(data) {
console.log('- Analizing key: ' + data.key);
_.each(checks, function(checkFunction, checkName) {
if (data.key.indexOf(checkName) === 0) {
db.get('migration-' + data.key, function(err, value) {
if ((err && err.notFound) || data.value !== value) {
var newKey = checkFunction(data.key);
if (data.value !== value) {
console.log(' - ' + newKey + ' outdated, migrating...')
} else {
console.log(' - ' + data.key + ' not migrated, migrating to ' + newKey);
}
newDb.put(newKey, data.value, function(err) {
if (err) {
console.log(' - Error migrating ' + data.key + '!', err);
} else {
db.put('migration-' + data.key, data.value, function() {});
}
});
}
});
}
});
});