diff --git a/node/ReadOnlyManager.js b/node/ReadOnlyManager.js index de2c64446..3c90d9caf 100644 --- a/node/ReadOnlyManager.js +++ b/node/ReadOnlyManager.js @@ -60,6 +60,15 @@ exports.getReadOnlyId = function (padId, callback) }) } +/** + * returns a the padId for a read only id + * @param {String} readOnlyId read only id + */ +exports.getPadId = function(readOnlyId, callback) +{ + db.get("readonly2pad:" + readOnlyId, callback); +} + /** * Generates a random String with the given length. Is needed to generate the read only ids */ diff --git a/node/exporters/exporthtml.js b/node/exporters/exporthtml.js index 7b412d147..335d72128 100644 --- a/node/exporters/exporthtml.js +++ b/node/exporters/exporthtml.js @@ -15,6 +15,7 @@ */ var async = require("async"); var Changeset = require("../Changeset"); +var padManager = require("../PadManager"); function getPadPlainText(pad, revNum) { @@ -307,22 +308,33 @@ function _analyzeLine(text, aline, apool) { return line; } -function getPadHTMLDocument(pad, revNum, noDocType, callback) { - var head = (noDocType?'':'\n')+ '\n'+ (noDocType?'': '\n'+ '\n'+ '\n'+ - ''+'/'+pad.getId()+'\n'+ + '\n' + '\n')+ ''; - var foot = '\n\n'; + var foot = '\n\n'; - getPadHTML(pad, revNum, function (err, html) { - callback(err, head + html + foot); + getPadHTML(pad, revNum, function (err, html) { + callback(err, head + html + foot); + }); }); } @@ -410,7 +422,3 @@ function _findURLs(text) { return urls; } - - -exports.getPadHTML = getPadHTML; -exports.getPadHTMLDocument = getPadHTMLDocument; \ No newline at end of file diff --git a/node/server.js b/node/server.js index febf2c963..5b2c904ba 100644 --- a/node/server.js +++ b/node/server.js @@ -31,6 +31,8 @@ var async = require('async'); var express = require('express'); var path = require('path'); var minify = require('./minify'); +var exporthtml; +var readOnlyManager; //try to get the git version var version = ""; @@ -63,6 +65,10 @@ async.waterfall([ //create server var app = express.createServer(); + //load modules that needs a initalized db + readOnlyManager = require("./ReadOnlyManager"); + exporthtml = require("./exporters/exporthtml"); + //set logging if(settings.logHTTP) app.use(express.logger({ format: ':date: :status, :method :url' })); @@ -92,6 +98,55 @@ async.waterfall([ } }); + //serve read only pad + app.get('/ro/:id', function(req, res) + { + res.header("Server", serverName); + + var html; + var padId; + var pad; + + async.series([ + //translate the read only pad to a padId + function(callback) + { + readOnlyManager.getPadId(req.params.id, function(err, _padId) + { + padId = _padId; + callback(err); + }); + }, + //render the html document + function(callback) + { + //return if the there is no padId + if(padId == null) + { + callback("notfound"); + return; + } + + //render the html document + exporthtml.getPadHTMLDocument(padId, null, false, function(err, _html) + { + html = _html; + callback(err); + }); + } + ], function(err) + { + //throw any unexpected error + if(err && err != "notfound") + throw err; + + if(err == "notfound") + res.send('404 - Not Found', 404); + else + res.send(html); + }); + }); + //serve pad.html under /p app.get('/p/:pad', function(req, res, next) {