diff --git a/package.json b/package.json index 3c57f9b..846c461 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "markdown", "pastebin" ], - "author": "Christian Müller (http://github.com/chmllr)", + "author": "Christian Müller (http://twitter.com/drmllr)", "license": "ISC", "bugs": { "url": "https://github.com/chmllr/NoteHub/issues" diff --git a/resources/misuse.txt b/resources/misuse.txt deleted file mode 100644 index e69de29..0000000 diff --git a/resources/misuses.txt b/resources/misuses.txt deleted file mode 100644 index e69de29..0000000 diff --git a/resources/template.html b/resources/template.html index 9aaeef4..b127591 100644 --- a/resources/template.html +++ b/resources/template.html @@ -7,7 +7,7 @@ - %MISUSE% + %HEADER%
%CONTENT%
diff --git a/server.js b/server.js index 389c012..a741bd8 100644 --- a/server.js +++ b/server.js @@ -4,6 +4,8 @@ var storage = require('./src/storage'); var md5 = require('md5'); var LRU = require("lru-cache") var bodyParser = require('body-parser'); +var fs = require('fs'); +var blackList = new Set(); var app = express(); @@ -143,7 +145,7 @@ app.get(/\/([a-z0-9]+)/, function(req, res) { CACHE.set(link, null); return notFound(res); } - var content = view.renderNote(note); + var content = view.renderNote(note, blackList); CACHE.set(link, content); MODELS[link] = note; note.views++; @@ -166,4 +168,11 @@ setInterval(() => { var keys = Object.keys(MODELS); log("saving stats for", keys.length, "models..."); keys.forEach(id => MODELS[id].save()) -}, 60 * 5 * 1000); \ No newline at end of file +}, 5 * 60 * 1000); + +setInterval(() => { + var ids = fs.readFileSync(process.env.BLACK_LIST || "/dev/null", "utf-8").split(/\n+/).filter(Boolean); + ids.forEach(id => CACHE.del(id)) + blackList = new Set(ids); + log("black list updated:", blackList.size, "entries:", blackList); +}, 10 * 1000) \ No newline at end of file diff --git a/src/view.js b/src/view.js index b288110..4d99a51 100644 --- a/src/view.js +++ b/src/view.js @@ -5,15 +5,15 @@ var TOS = fs.readFileSync("resources/TOS.md", "utf-8"); 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 misuseScript = fs.readFileSync("resources/misuse.txt", "utf-8"); -var misuses = new Set(fs.readFileSync("resources/misuses.txt", "utf-8").split(/\s+/)); +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) => pageTemplate - .replace("%MISUSE%", misuses.has(id) ? misuseScript : "") +var renderPage = (id, title, content, footer, blackList) => pageTemplate + .replace("%HEADER%", (blackList || defaultBL).has(id) ? header : "") .replace("%TITLE%", title) .replace("%CONTENT%", content.replace(//gi, "").replace(//gi, "")) .replace("%FOOTER%", footer || ""); @@ -31,9 +31,11 @@ module.exports.renderStats = note => renderPage(note.id, deriveTitle(note.text), module.exports.renderTOS = () => renderPage("tos", "Terms of Service", marked(TOS)); -module.exports.renderNote = note => renderPage(note.id, deriveTitle(note.text), +module.exports.renderNote = (note, blackList) => renderPage(note.id, + deriveTitle(note.text), marked(note.text), - footerTemplate.replace(/%LINK%/g, note.id)); + footerTemplate.replace(/%LINK%/g, note.id), + blackList); module.exports.newNotePage = session => editTemplate .replace("%ACTION%", "POST")