var settings = require('ep_etherpad-lite/node/utils/Settings'); var eejs = require('ep_etherpad-lite/node/eejs'); var db = require('ep_etherpad-lite/node/db/DB').db; var padManager = require('ep_etherpad-lite/node/db/PadManager'); var async = require('ep_etherpad-lite/node_modules/async'); exports.handleMessage = function(hook_name, context, cb) { var isOptInPublicMessage = false; if (context && context.message && context.message.type === 'COLLABROOM') { if (context.message.data && context.message.data.type && context.message.data.type === 'opt-in_public') { isOptInPublicMessage = true; } } if (! isOptInPublicMessage) { cb(false); return false; } var msg = context.message.data; var padId = msg.padId; db.get("opt-in_index:" + padId + ":done", function(err, val) { if (err) { console.log("opt-in_index: error: " + err); return false; } if (val === true) { console.log("opt-in_index: setting publicity flag for pad " + padId + " was done already"); // done already -> cb(null) drops message cb(null); return false; } else { db.get("opt-in_index:" + padId + ":padPublishKey", function(err, key) { if (err) { console.log("opt-in_index: error: " + err); return false; } if (msg.action === "setOptInPublicFlag" && msg.message.key === key) { console.log("everything ok, setting pad " + padId + " public to " + msg.message.public); db.set("opt-in_index:" + padId, msg.message.public); db.set("opt-in_index:" + padId + ":done", true); } }); } }); }; exports.expressConfigure = function (hook_name, ctx, cb) { ctx.app.get('/list', function(req, res) { var render_args = { pads: [] }; async.waterfall([ function(cb) { padManager.listAllPads(cb); }, function(pads, cb) { async.each(pads.padIDs, function(padId, errCb) { db.get("opt-in_index:" + padId, function(err, pub) { if (err) { errCb(err); return; } if (pub) { render_args.pads.push(padId); } errCb(null); }); }, function(err) { cb(err); }); }, function(cb) { render_args.pads = render_args.pads.sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }); res.send(eejs.require('ep_opt-in_index/templates/pads.html', render_args)); cb(); } ]); }); };