diff --git a/node/server.js b/node/server.js index 1e0b6283c..b5d2dc0cb 100644 --- a/node/server.js +++ b/node/server.js @@ -199,24 +199,27 @@ async.waterfall([ res.send(html); }); }); - - //serve pad.html under /p - app.get('/p/:pad', function(req, res, next) + + //serve pad.html under / and /p for compatibility + app.get( "(/p)?/:pad", function(req, res, next) { - //ensure the padname is valid and the url doesn't end with a / - if(!padManager.isValidPadId(req.params.pad) || /\/$/.test(req.url)) - { - res.send('Such a padname is forbidden', 404); + // ensure the padname is valid and the url doesn't end with a / + // and that reserved pathnames are served as files, not as pads + if( !padManager.isValidPadId(req.params.pad) || /\/+$/.test(req.url)) { + res.send('Such a padname is forbidden.', 404); return; + } else if ( /(favicon\.ico|robots\.txt)/.test(req.url) ) + { + next(); + return; } - res.header("Server", serverName); var filePath = path.normalize(__dirname + "/../static/pad.html"); res.sendfile(filePath, { maxAge: exports.maxAge }); }); - - //serve timeslider.html under /p/$padname/timeslider - app.get('/p/:pad/timeslider', function(req, res, next) + + //serve timeslider.html under /$padname/timeslider + app.get('/:pad/timeslider', function(req, res, next) { //ensure the padname is valid and the url doesn't end with a / if(!padManager.isValidPadId(req.params.pad) || /\/$/.test(req.url)) @@ -229,9 +232,9 @@ async.waterfall([ var filePath = path.normalize(__dirname + "/../static/timeslider.html"); res.sendfile(filePath, { maxAge: exports.maxAge }); }); - - //serve timeslider.html under /p/$padname/timeslider - app.get('/p/:pad/export/:type', function(req, res, next) + + //serve export files under /$padname/export + app.get('/:pad/export/:type', function(req, res, next) { //ensure the padname is valid and the url doesn't end with a / if(!padManager.isValidPadId(req.params.pad) || /\/$/.test(req.url)) @@ -265,7 +268,7 @@ async.waterfall([ }); //handle import requests - app.post('/p/:pad/import', function(req, res, next) + app.post('/:pad/import', function(req, res, next) { //ensure the padname is valid and the url doesn't end with a / if(!padManager.isValidPadId(req.params.pad) || /\/$/.test(req.url)) @@ -358,9 +361,9 @@ async.waterfall([ var filePath = path.normalize(__dirname + "/../static/index.html"); res.sendfile(filePath, { maxAge: exports.maxAge }); }); - + //serve robots.txt - app.get('/robots.txt', function(req, res) + app.get( /.*\/robots.txt/, function(req, res) { res.header("Server", serverName); var filePath = path.normalize(__dirname + "/../static/robots.txt"); @@ -368,7 +371,7 @@ async.waterfall([ }); //serve favicon.ico - app.get('/favicon.ico', function(req, res) + app.get( /.*\/favicon\.ico/, function(req, res) { res.header("Server", serverName); var filePath = path.normalize(__dirname + "/../static/custom/favicon.ico"); @@ -382,7 +385,7 @@ async.waterfall([ } }); }); - + //let the server listen app.listen(settings.port, settings.ip); console.log("Server is listening at " + settings.ip + ":" + settings.port); diff --git a/static/favicon.ico b/static/favicon.ico deleted file mode 100644 index 2529c923f..000000000 Binary files a/static/favicon.ico and /dev/null differ diff --git a/static/img/etherpad_lite_icons.png b/static/img/etherpad_lite_icons.png index 606612313..590a49653 100644 Binary files a/static/img/etherpad_lite_icons.png and b/static/img/etherpad_lite_icons.png differ diff --git a/static/index.html b/static/index.html index 2bed58f98..3159288ee 100644 --- a/static/index.html +++ b/static/index.html @@ -1,6 +1,6 @@ -