move routes into modules (readonly, export, import)

I moved the routes for requests that handle readonly, export or import
requests into seperate modules.
This commit is contained in:
booo 2012-02-08 15:21:33 +01:00
parent 7d12ca2076
commit 11a1ea0d80
4 changed files with 189 additions and 131 deletions

53
node/routes/export.js Normal file
View file

@ -0,0 +1,53 @@
var ERR = require("async-stacktrace");
module.exports = function(app)
{
//TODO put this into module
//checks for padAccess
function hasPadAccess(req, res, callback)
{
app.securityManager.checkAccess(req.params.pad, req.cookies.sessionid, req.cookies.token, req.cookies.password, function(err, accessObj)
{
if(ERR(err, callback)) return;
//there is access, continue
if(accessObj.accessStatus == "grant")
{
callback();
}
//no access
else
{
res.send("403 - Can't touch this", 403);
}
});
}
//serve timeslider.html under /p/$padname/timeslider
app.get('/p/:pad/:rev?/export/:type', function(req, res, next)
{
var types = ["pdf", "doc", "txt", "html", "odt", "dokuwiki"];
//send a 404 if we don't support this filetype
if(types.indexOf(req.params.type) == -1)
{
next();
return;
}
//if abiword is disabled, and this is a format we only support with abiword, output a message
if(app.settings.abiword == null &&
["odt", "pdf", "doc"].indexOf(req.params.type) !== -1)
{
res.send("Abiword is not enabled at this Etherpad Lite instance. Set the path to Abiword in settings.json to enable this feature");
return;
}
res.header("Access-Control-Allow-Origin", "*");
hasPadAccess(req, res, function()
{
app.exportHandler.doExport(req, res, req.params.pad, req.params.type);
});
});
};

41
node/routes/import.js Normal file
View file

@ -0,0 +1,41 @@
var ERR = require("async-stacktrace");
module.exports = function(app)
{
//TODO put this into module
//checks for padAccess
function hasPadAccess(req, res, callback)
{
app.securityManager.checkAccess(req.params.pad, req.cookies.sessionid, req.cookies.token, req.cookies.password, function(err, accessObj)
{
if(ERR(err, callback)) return;
//there is access, continue
if(accessObj.accessStatus == "grant")
{
callback();
}
//no access
else
{
res.send("403 - Can't touch this", 403);
}
});
}
//handle import requests
app.post('/p/:pad/import', function(req, res, next)
{
//if abiword is disabled, skip handling this request
if(app.settings.abiword == null)
{
next();
return;
}
hasPadAccess(req, res, function()
{
app.importHandler.doImport(req, res, req.params.pad);
});
});
};

83
node/routes/readonly.js Normal file
View file

@ -0,0 +1,83 @@
var async = require('async');
var ERR = require('async-stacktrace');
module.exports = function(app)
{
//TODO put this into module
//checks for padAccess
function hasPadAccess(req, res, callback)
{
app.securityManager.checkAccess(req.params.pad, req.cookies.sessionid, req.cookies.token, req.cookies.password, function(err, accessObj)
{
if(ERR(err, callback)) return;
//there is access, continue
if(accessObj.accessStatus == "grant")
{
callback();
}
//no access
else
{
res.send("403 - Can't touch this", 403);
}
});
}
//serve read only pad
app.get('/ro/:id', function(req, res)
{
var html;
var padId;
var pad;
async.series([
//translate the read only pad to a padId
function(callback)
{
app.readOnlyManager.getPadId(req.params.id, function(err, _padId)
{
if(ERR(err, callback)) return;
padId = _padId;
//we need that to tell hasPadAcess about the pad
req.params.pad = padId;
callback();
});
},
//render the html document
function(callback)
{
//return if the there is no padId
if(padId == null)
{
callback("notfound");
return;
}
hasPadAccess(req, res, function()
{
//render the html document
app.exporthtml.getPadHTMLDocument(padId, null, false, function(err, _html)
{
if(ERR(err, callback)) return;
html = _html;
callback();
});
});
}
], function(err)
{
//throw any unexpected error
if(err && err != "notfound")
ERR(err);
if(err == "notfound")
res.send('404 - Not Found', 404);
else
res.send(html);
});
});
};