/* * This is a debug tool. It helps to extract all datas of a pad and move it from * a productive environment and to a develop environment to reproduce bugs * there. It outputs a dirtydb file */ if (process.argv.length != 3) { console.error("Use: node extractPadData.js $PADID"); process.exit(1); } // get the padID var padId = process.argv[2]; var db, dirty, padManager, pad, settings; var neededDBValues = ["pad:"+padId]; var npm = require('../node_modules/ep_etherpad-lite/node_modules/npm'); var async = require('../node_modules/ep_etherpad-lite/node_modules/async'); async.series([ // load npm function(callback) { npm.load({}, function(er) { if (er) { console.error("Could not load NPM: " + er) process.exit(1); } else { callback(); } }) }, // load modules function(callback) { settings = require('../node_modules/ep_etherpad-lite/node/utils/Settings'); db = require('../node_modules/ep_etherpad-lite/node/db/DB'); dirty = require('../node_modules/ep_etherpad-lite/node_modules/ueberDB/node_modules/dirty')(padId + ".db"); callback(); }, // initialize the database function (callback) { db.init(callback); }, // get the pad function (callback) { padManager = require('../node_modules/ep_etherpad-lite/node/db/PadManager'); padManager.getPad(padId, function(err, _pad) { pad = _pad; callback(err); }); }, function (callback) { // add all authors var authors = pad.getAllAuthors(); for (var i = 0; i < authors.length; i++) { neededDBValues.push('globalAuthor:' + authors[i]); } // add all revisions var revHead = pad.head; for (var i = 0; i <= revHead; i++) { neededDBValues.push('pad:' + padId + ':revs:' + i); } // get all chat values var chatHead = pad.chatHead; for (var i = 0; i <= chatHead; i++) { neededDBValues.push('pad:' + padId + ':chat:' + i); } // get and set all values async.forEach(neededDBValues, function(dbkey, callback) { db.db.db.wrappedDB.get(dbkey, function(err, dbvalue) { if (err) { callback(err); return} if (dbvalue && typeof dbvalue != 'object') { dbvalue = JSON.parse(dbvalue); // if it's not json then parse it as json } dirty.set(dbkey, dbvalue, callback); }); }, callback); } ], function (err) { if (err) { throw err; } else { console.log("finished"); process.exit(); } });