black listing improved
This commit is contained in:
+1
-1
@@ -16,7 +16,7 @@
|
|||||||
"markdown",
|
"markdown",
|
||||||
"pastebin"
|
"pastebin"
|
||||||
],
|
],
|
||||||
"author": "Christian Müller <notehub@icloud.com> (http://github.com/chmllr)",
|
"author": "Christian Müller <notehub@icloud.com> (http://twitter.com/drmllr)",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/chmllr/NoteHub/issues"
|
"url": "https://github.com/chmllr/NoteHub/issues"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link href="/style.css" rel="stylesheet" type="text/css" />
|
<link href="/style.css" rel="stylesheet" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
%MISUSE%
|
%HEADER%
|
||||||
<article>
|
<article>
|
||||||
%CONTENT%
|
%CONTENT%
|
||||||
</article>
|
</article>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ var storage = require('./src/storage');
|
|||||||
var md5 = require('md5');
|
var md5 = require('md5');
|
||||||
var LRU = require("lru-cache")
|
var LRU = require("lru-cache")
|
||||||
var bodyParser = require('body-parser');
|
var bodyParser = require('body-parser');
|
||||||
|
var fs = require('fs');
|
||||||
|
var blackList = new Set();
|
||||||
|
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
@@ -143,7 +145,7 @@ app.get(/\/([a-z0-9]+)/, function(req, res) {
|
|||||||
CACHE.set(link, null);
|
CACHE.set(link, null);
|
||||||
return notFound(res);
|
return notFound(res);
|
||||||
}
|
}
|
||||||
var content = view.renderNote(note);
|
var content = view.renderNote(note, blackList);
|
||||||
CACHE.set(link, content);
|
CACHE.set(link, content);
|
||||||
MODELS[link] = note;
|
MODELS[link] = note;
|
||||||
note.views++;
|
note.views++;
|
||||||
@@ -166,4 +168,11 @@ setInterval(() => {
|
|||||||
var keys = Object.keys(MODELS);
|
var keys = Object.keys(MODELS);
|
||||||
log("saving stats for", keys.length, "models...");
|
log("saving stats for", keys.length, "models...");
|
||||||
keys.forEach(id => MODELS[id].save())
|
keys.forEach(id => MODELS[id].save())
|
||||||
}, 60 * 5 * 1000);
|
}, 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)
|
||||||
+8
-6
@@ -5,15 +5,15 @@ var TOS = fs.readFileSync("resources/TOS.md", "utf-8");
|
|||||||
var pageTemplate = fs.readFileSync("resources/template.html", "utf-8");
|
var pageTemplate = fs.readFileSync("resources/template.html", "utf-8");
|
||||||
var footerTemplate = fs.readFileSync("resources/footer.html", "utf-8");
|
var footerTemplate = fs.readFileSync("resources/footer.html", "utf-8");
|
||||||
var editTemplate = fs.readFileSync("resources/edit.html", "utf-8");
|
var editTemplate = fs.readFileSync("resources/edit.html", "utf-8");
|
||||||
var misuseScript = fs.readFileSync("resources/misuse.txt", "utf-8");
|
var header = fs.readFileSync(process.env.HEADER || "/dev/null", "utf-8");
|
||||||
var misuses = new Set(fs.readFileSync("resources/misuses.txt", "utf-8").split(/\s+/));
|
var defaultBL = new Set();
|
||||||
|
|
||||||
var deriveTitle = text => text
|
var deriveTitle = text => text
|
||||||
.split(/[\n\r]/)[0].slice(0,25)
|
.split(/[\n\r]/)[0].slice(0,25)
|
||||||
.replace(/[^a-zA-Z0-9\s]/g, "");
|
.replace(/[^a-zA-Z0-9\s]/g, "");
|
||||||
|
|
||||||
var renderPage = (id, title, content, footer) => pageTemplate
|
var renderPage = (id, title, content, footer, blackList) => pageTemplate
|
||||||
.replace("%MISUSE%", misuses.has(id) ? misuseScript : "")
|
.replace("%HEADER%", (blackList || defaultBL).has(id) ? header : "")
|
||||||
.replace("%TITLE%", title)
|
.replace("%TITLE%", title)
|
||||||
.replace("%CONTENT%", content.replace(/<meta.*?>/gi, "").replace(/<script[\s\S.]*?\/script>/gi, ""))
|
.replace("%CONTENT%", content.replace(/<meta.*?>/gi, "").replace(/<script[\s\S.]*?\/script>/gi, ""))
|
||||||
.replace("%FOOTER%", footer || "");
|
.replace("%FOOTER%", footer || "");
|
||||||
@@ -31,9 +31,11 @@ module.exports.renderStats = note => renderPage(note.id, deriveTitle(note.text),
|
|||||||
module.exports.renderTOS = () =>
|
module.exports.renderTOS = () =>
|
||||||
renderPage("tos", "Terms of Service", marked(TOS));
|
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),
|
marked(note.text),
|
||||||
footerTemplate.replace(/%LINK%/g, note.id));
|
footerTemplate.replace(/%LINK%/g, note.id),
|
||||||
|
blackList);
|
||||||
|
|
||||||
module.exports.newNotePage = session => editTemplate
|
module.exports.newNotePage = session => editTemplate
|
||||||
.replace("%ACTION%", "POST")
|
.replace("%ACTION%", "POST")
|
||||||
|
|||||||
Reference in New Issue
Block a user