From dbcde233c67528da956ce76b0738a7500bd004b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20M=C3=BCller?= Date: Sat, 22 Oct 2016 15:15:46 +0200 Subject: [PATCH] minor refactorings --- server.js | 74 +++++++++++++++++------------------- src/storage.js => storage.js | 0 src/view.js => view.js | 6 +-- 3 files changed, 37 insertions(+), 43 deletions(-) rename src/storage.js => storage.js (100%) rename src/view.js => view.js (90%) diff --git a/server.js b/server.js index 41dedd7..1857826 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,6 @@ var express = require('express'); -var view = require('./src/view'); -var storage = require('./src/storage'); +var view = require('./view'); +var storage = require('./storage'); var md5 = require('md5'); var LRU = require("lru-cache") var bodyParser = require('body-parser'); @@ -40,16 +40,14 @@ var log = function() { console.log.apply(console, message); } -app.get('/TOS', function(req, res) { - res.send(view.renderTOS()); -}); +app.get('/TOS', (req, res) => res.send(view.renderTOS())); -app.get('/new', function(req, res) { +app.get('/new', (req, res) => { log(req.ip, "opens /new"); res.send(view.newNotePage(getTimeStamp() + md5(Math.random()))); }); -app.post('/note', function(req, res) { +app.post('/note', (req, res) => { var body = req.body, session = body.session, note = body.note, @@ -62,8 +60,7 @@ app.post('/note', function(req, res) { return sendResponse(res, 400, "Bad request"); if (session.indexOf(getTimeStamp()) != 0) return sendResponse(res, 400, "Session expired"); - var expectedSignature = md5(session + note.replace(/[\n\r]/g, "")); - if (expectedSignature != body.signature) + if (body.signature != md5(session + note.replace(/[\n\r]/g, ""))) return sendResponse(res, 400, "Signature mismatch"); if (action == "POST") storage.addNote(note, password).then(goToNote); @@ -82,7 +79,7 @@ app.post('/note', function(req, res) { } }); -app.get("/:year/:month/:day/:title", function(req, res) { +app.get("/:year/:month/:day/:title", (req, res) => { var P = req.params, url = P.year + "/" + P.month + "/" + P.day + "/" + P.title; log(req.ip, "resolves deprecated id", url); if (CACHE.has(url)) { @@ -102,52 +99,52 @@ app.get("/:year/:month/:day/:title", function(req, res) { }); }); -app.get(/\/([a-z0-9]+\/edit)/, function(req, res) { - var link = req.params["0"].replace("/edit", ""); - log(req.ip, "calls /edit on", link); - storage.getNote(link).then(note => res.send(note +app.get(/\/([a-z0-9]+)\/edit/, (req, res) => { + var id = req.params["0"]; + log(req.ip, "calls /edit on", id); + storage.getNote(id).then(note => res.send(note ? view.editNotePage(getTimeStamp() + md5(Math.random()), note) : notFound(res))); }); -app.get(/\/([a-z0-9]+\/export)/, function(req, res) { - var link = req.params["0"].replace("/export", ""); - log(req.ip, "calls /export on", link); +app.get(/\/([a-z0-9]+)\/export/, (req, res) => { + var id = req.params["0"]; + log(req.ip, "calls /export on", id); res.set({ 'Content-Type': 'text/plain', 'Charset': 'utf-8' }); - storage.getNote(link).then(note => note + storage.getNote(id).then(note => note ? res.send(note.text) : notFound(res)); }); -app.get(/\/([a-z0-9]+\/stats)/, function(req, res) { - var link = req.params["0"].replace("/stats", ""); - log(req.ip, "calls /stats on", link); - var promise = link in MODELS - ? new Promise(resolve => resolve(MODELS[link])) - : storage.getNote(link); +app.get(/\/([a-z0-9]+)\/stats/, (req, res) => { + var id = req.params["0"]; + log(req.ip, "calls /stats on", id); + var promise = id in MODELS + ? new Promise(resolve => resolve(MODELS[id])) + : storage.getNote(id); promise.then(note => note ? res.send(view.renderStats(note)) : notFound(res)); }); -app.get(/\/([a-z0-9]+)/, function(req, res) { - var link = req.params["0"]; - log(req.ip, "open note", link, "from", req.get("Referer")); - if (CACHE.has(link)) { - log(link, "is cached!"); - var note = MODELS[link]; +app.get(/\/([a-z0-9]+)/, (req, res) => { + var id = req.params["0"]; + log(req.ip, "open note", id, "from", req.get("Referer")); + if (CACHE.has(id)) { + log(id, "is cached!"); + var note = MODELS[id]; if (!note) return notFound(res); note.views++; - res.send(CACHE.get(link)); - } else storage.getNote(link).then(note => { - log(link, "is not cached, resolving..."); + res.send(CACHE.get(id)); + } else storage.getNote(id).then(note => { + log(id, "is not cached, resolving..."); if (!note) { - CACHE.set(link, null); + CACHE.set(id, null); return notFound(res); } var content = view.renderNote(note, blackList); - CACHE.set(link, content); - MODELS[link] = note; + CACHE.set(id, content); + MODELS[id] = note; note.views++; res.send(content); }); @@ -160,9 +157,8 @@ var sendResponse = (res, code, message) => { var notFound = res => sendResponse(res, 404, "Not found"); -var server = app.listen(process.env.PORT || 3000, function() { - log('NoteHub server listening on port', server.address().port); -}); +var server = app.listen(process.env.PORT || 3000, + () => log('NoteHub server listening on port', server.address().port)); setInterval(() => { var keys = Object.keys(MODELS); diff --git a/src/storage.js b/storage.js similarity index 100% rename from src/storage.js rename to storage.js diff --git a/src/view.js b/view.js similarity index 90% rename from src/view.js rename to view.js index a624f25..db0717f 100644 --- a/src/view.js +++ b/view.js @@ -7,14 +7,13 @@ var pageTemplate = fs.readFileSync("resources/template.html", "utf-8"); var footerTemplate = fs.readFileSync("resources/footer.html", "utf-8"); var editTemplate = fs.readFileSync("resources/edit.html", "utf-8"); var header = fs.readFileSync(process.env.HEADER || "/dev/null", "utf-8"); -var defaultBL = new Set(); var deriveTitle = text => text .split(/[\n\r]/)[0].slice(0,25) .replace(/[^a-zA-Z0-9\s]/g, ""); var renderPage = (id, title, content, footer, blackList) => pageTemplate - .replace("%HEADER%", (blackList || defaultBL).has(id) ? header : "") + .replace("%HEADER%", blackList && blackList.has(id) ? header : "") .replace("%TITLE%", title) .replace("%CONTENT%", content.replace(//gi, "").replace(//gi, "")) .replace("%FOOTER%", footer || ""); @@ -34,8 +33,7 @@ module.exports.renderStats = note => renderPage(note.id, deriveTitle(note.text), Views${note.views} `); -module.exports.renderTOS = () => - renderPage("tos", "Terms of Service", marked(TOS)); +module.exports.renderTOS = () => renderPage("tos", "Terms of Service", marked(TOS)); module.exports.renderNote = (note, blackList) => renderPage(note.id, deriveTitle(note.text),