NewsBlur-viq/node/original_page.js
2016-11-30 16:09:26 -08:00

80 lines
2.4 KiB
JavaScript

// Generated by CoffeeScript 1.8.0
(function() {
var DB_PATH, DEV, app, fs, mkdirp, path, server, splitFeedId;
app = require('express')();
server = require('http').Server(app);
path = require('path');
fs = require('fs');
mkdirp = require('mkdirp');
DEV = process.env.NODE_ENV === 'development';
DB_PATH = DEV ? 'originals' : '/srv/originals';
server.listen(3060);
app.get(/^\/original_page\/(\d+)\/?/, (function(_this) {
return function(req, res) {
var etag, feedId, feedIdDir, filePath, lastModified;
feedId = parseInt(req.params[0], 10);
etag = req.header('If-None-Match');
lastModified = req.header('If-Modified-Since');
feedIdDir = splitFeedId(feedId);
filePath = "" + DB_PATH + "/" + feedIdDir + ".zhtml";
return path.exists(filePath, function(exists, err) {
console.log((" ---> Loading: " + feedId + " (" + filePath + "). ") + ("" + (exists ? "" : "NOT FOUND")));
if (!exists) {
return res.send(404);
}
return fs.stat(filePath, function(err, stats) {
if (!err && etag && stats.mtime === etag) {
return res.send(304);
}
if (!err && lastModified && stats.mtime === lastModified) {
return res.send(304);
}
return fs.readFile(filePath, function(err, content) {
res.header('Etag', Date.parse(stats.mtime));
return res.send(content);
});
});
});
};
})(this));
app.post(/^\/original_page\/(\d+)\/?/, (function(_this) {
return function(req, res) {
var feedId, feedIdDir, filePath, filePathDir, html;
feedId = parseInt(req.params, 10);
feedIdDir = splitFeedId(feedId);
html = req.param("original_page");
filePath = "" + DB_PATH + "/" + feedIdDir + ".zhtml";
filePathDir = path.dirname(filePath);
return mkdirp(filePathDir, function(err) {
return fs.rename(req.files.original_page.path, filePath, function(err) {
if (err) {
console.log(err);
}
console.log(" ---> Saving: " + feedId + " (" + filePath + ")");
return res.send("OK");
});
});
};
})(this));
splitFeedId = function(feedId) {
var rgx;
feedId += '';
rgx = /(\d+)(\d{3})/;
while (rgx.test(feedId)) {
feedId = feedId.replace(rgx, '$1' + '/' + '$2');
}
return feedId;
};
}).call(this);