Read only access works

pull/35/head
Peter 'Pita' Martischka 2011-07-08 18:33:01 +01:00
parent 1c1e035bf1
commit 93ccbaef3a
3 changed files with 82 additions and 10 deletions

View File

@ -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
*/

View File

@ -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?'':'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" '+
exports.getPadHTMLDocument = function(padId, revNum, noDocType, callback) {
padManager.getPad(padId, function(err, pad)
{
if(err)
{
callback(err);
return;
}
var head = (noDocType?'':'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" '+
'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n')+
'<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">\n'+
(noDocType?'':
'<head>\n'+
'<meta http-equiv="Content-type" content="text/html; charset=utf-8" />\n'+
'<meta http-equiv="Content-Language" content="en-us" />\n'+
'<title>'+'/'+pad.getId()+'</title>\n'+
'<style> * { font-family: Arial, sans-serif;\n'+
'font-size: 13px;\n'+
'line-height: 17px; }</style>\n' +
'</head>\n')+
'<body>';
var foot = '</body>\n</html>\n';
var foot = '</body>\n</html>\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;

View File

@ -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)
{