From 015b1abcdbb0b3a0e691fca49c4345e3d9f128b1 Mon Sep 17 00:00:00 2001 From: Dave Winer Date: Sat, 27 Dec 2014 00:23:30 -0500 Subject: [PATCH] v0.42 --- pagepark.js | 107 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 68 insertions(+), 39 deletions(-) diff --git a/pagepark.js b/pagepark.js index f30a3a6..edb6b41 100644 --- a/pagepark.js +++ b/pagepark.js @@ -1,4 +1,4 @@ -var myVersion = "0.41", myProductName = "pagePark", myPort = 80; +var myVersion = "0.42", myProductName = "pagePark", myPort = 80; //The MIT License (MIT) @@ -29,7 +29,8 @@ var http = require ("http"); var marked = require ("marked"); var pageParkPrefs = { - myPort: 80 + myPort: 80, + indexFilename: "index" }; var fnamePrefs = "prefs/prefs.json"; @@ -40,7 +41,6 @@ var pageParkStats = { var fnameStats = "prefs/stats.json"; var domainsPath = "domains/"; -var httpDefaultFilename = "index.html"; var mdTemplatePath = "prefs/mdTemplate.txt"; var urlDefaultTemplate = "http://fargo.io/code/noderunner/defaultmarkdowntemplate.txt"; @@ -321,6 +321,9 @@ function checkPathForIllegalChars (path) { return (false); } } + if (stringContains (path, "./")) { + return (false); + } return (true); } @@ -329,6 +332,59 @@ function handleHttpRequest (httpRequest, httpResponse) { httpResponse.writeHead (404, {"Content-Type": "text/plain"}); httpResponse.end ("The file was not found."); } + + function findIndexFile (folder, callback) { + fs.readdir (folder, function (err, list) { + for (var i = 0; i < list.length; i++) { + var fname = list [i]; + if (stringCountFields (fname, ".") == 2) { //something like xxx.yyy + if (stringNthField (fname, ".", 1).toLowerCase () == pageParkPrefs.indexFilename) { //something like index.wtf + callback (folder + fname); + return; + } + } + } + return404 (); + }); + } + function serveFile (f) { + fs.readFile (f, function (err, data) { + if (err) { + return404 (); + } + else { + var ext = stringLastField (f, ".").toLowerCase (), type = httpExt2MIME (ext); + switch (ext) { + case "js": + try { + var val = eval (data.toString ()); + httpResponse.writeHead (200, {"Content-Type": "text/html"}); + httpResponse.end (val.toString ()); + } + catch (err) { + httpResponse.writeHead (500, {"Content-Type": "text/plain"}); + httpResponse.end ("Error running " + parsedUrl.pathname + ": \"" + err.message + "\""); + } + break; + case "md": + getMarkdownTemplate (function (theTemplate) { + var mdtext = data.toString (), pagetable = new Object (); + pagetable.bodytext = marked (mdtext); + pagetable.title = stringLastField (f, "/"); + var s = multipleReplaceAll (theTemplate, pagetable, false, "[%", "%]"); + httpResponse.writeHead (200, {"Content-Type": "text/html"}); + httpResponse.end (s); + }); + break; + default: + httpResponse.writeHead (200, {"Content-Type": type}); + httpResponse.end (data); + break; + } + } + }); + } + try { var parsedUrl = urlpack.parse (httpRequest.url, true), host, port; var lowerpath = parsedUrl.pathname.toLowerCase (), now = new Date (); @@ -338,6 +394,9 @@ function handleHttpRequest (httpRequest, httpResponse) { port = stringNthField (host, ":", 2); host = stringNthField (host, ":", 1); } + else { + port = 80; + } console.log (httpRequest.method + " " + host + ":" + port + " " + lowerpath); switch (lowerpath) { case "/version": @@ -361,43 +420,13 @@ function handleHttpRequest (httpRequest, httpResponse) { if (!endsWith (f, "/")) { f += "/"; } - f += "index.html"; + findIndexFile (f, function (findex) { + serveFile (findex); + }); + } + else { + serveFile (f); } - fs.readFile (f, function (err, data) { - if (err) { - return404 (); - } - else { - var ext = stringLastField (f, ".").toLowerCase (), type = httpExt2MIME (ext); - switch (ext) { - case "js": - try { - var val = eval (data.toString ()); - httpResponse.writeHead (200, {"Content-Type": "text/html"}); - httpResponse.end (val.toString ()); - } - catch (err) { - httpResponse.writeHead (500, {"Content-Type": "text/plain"}); - httpResponse.end ("Error running " + parsedUrl.pathname + ": \"" + err.message + "\""); - } - break; - case "md": - getMarkdownTemplate (function (theTemplate) { - var mdtext = data.toString (), pagetable = new Object (); - pagetable.bodytext = marked (mdtext); - pagetable.title = stringLastField (f, "/"); - var s = multipleReplaceAll (theTemplate, pagetable, false, "[%", "%]"); - httpResponse.writeHead (200, {"Content-Type": "text/html"}); - httpResponse.end (s); - }); - break; - default: - httpResponse.writeHead (200, {"Content-Type": type}); - httpResponse.end (data); - break; - } - } - }); } }); });