// Generated by CoffeeScript 1.8.0 (function() { var DEV, MONGODB_PORT, MONGODB_SERVER, app, log, mongo, server, url; app = require('express')(); server = require('http').Server(app); mongo = require('mongodb'); log = require('./log.js'); DEV = process.env.NODE_ENV === 'development'; MONGODB_SERVER = DEV ? 'localhost' : 'db_mongo'; MONGODB_PORT = parseInt(process.env.MONGODB_PORT || 27017, 10); log.debug("Starting NewsBlur Favicon server..."); if (!DEV && !process.env.NODE_ENV) { log.debug("Specify NODE_ENV="); return; } else if (DEV) { log.debug("Running as development server"); } else { log.debug("Running as production server"); } if (DEV) { url = "mongodb://" + MONGODB_SERVER + ":" + MONGODB_PORT + "/newsblur"; } else { url = "mongodb://" + MONGODB_SERVER + ":" + MONGODB_PORT + "/newsblur?replicaSet=nbset&readPreference=secondaryPreferred"; } mongo.MongoClient.connect(url, (function(_this) { return function(err, db) { log.debug("Connected to " + (db != null ? db.serverConfig.s.host : void 0) + ":" + (db != null ? db.serverConfig.s.port : void 0) + " / " + err); return _this.collection = db != null ? db.collection("feed_icons") : void 0; }; })(this)); app.get(/\/rss_feeds\/icon\/(\d+)\/?/, (function(_this) { return function(req, res) { var etag, feed_id; feed_id = parseInt(req.params[0], 10); etag = req.header('If-None-Match'); log.debug(("Feed: " + feed_id + " ") + (etag ? " / " + etag : "")); return _this.collection.findOne({ _id: feed_id }, function(err, docs) { var body; if (!err && etag && docs && (docs != null ? docs.color : void 0) === etag) { log.debug(("Cached: " + feed_id + ", etag: " + etag + "/" + (docs != null ? docs.color : void 0) + " ") + (err ? "(err: " + err + ")" : "")); return res.sendStatus(304); } else if (!err && docs && docs.data) { log.debug(("Req: " + feed_id + ", etag: " + etag + "/" + (docs != null ? docs.color : void 0) + " ") + (err ? "(err: " + err + ")" : "")); res.header('etag', docs.color); body = new Buffer(docs.data, 'base64'); res.set("Content-Type", "image/png"); return res.status(200).send(body); } else { log.debug(("Redirect: " + feed_id + ", etag: " + etag + "/" + (docs != null ? docs.color : void 0) + " ") + (err ? "(err: " + err + ")" : "")); if (DEV) { return res.redirect('/media/img/icons/circular/world.png'); } else { return res.redirect('https://www.newsblur.com/media/img/icons/circular/world.png'); } } }); }; })(this)); app.listen(3030); }).call(this);