UNPKG

geoserver

Version:
151 lines (124 loc) 3.67 kB
// Generated by CoffeeScript 1.10.0 var app, base, base1, bodyParser, compression, express, librato, logger, mongo, origin, origins, raven, sentry, url; express = require('express'); logger = require('morgan'); url = require('url'); bodyParser = require('body-parser'); compression = require('compression'); raven = require('raven'); sentry = require('./sentry'); mongo = require('./mongo'); if ((base = process.env).LIBRATO_INTERVAL == null) { base.LIBRATO_INTERVAL = 1; } librato = { middleware: require('./librato').middleware.use, count: require('./librato').middleware.routeCount }; if ((base1 = process.env).PORT == null) { base1.PORT = 8080; } app = module.exports = express(); app.set('json spaces', 2); app.set('x-powered-by', false); app.use(bodyParser.json({ limit: process.env.UPLOAD_LIMIT || '10mb' })); if (app.get('env').toLowerCase() !== 'test') { app.use(compression()); app.use(logger('dev')); app.use('/api', librato.middleware); app.use('/api', librato.count({ name: 'request', period: 1 })); } app.use(raven.middleware.express.requestHandler(sentry)); origins = (function() { var i, len, ref, ref1, results; ref1 = ((ref = process.env.ALLOW_ORIGINS) != null ? ref.split(',') : void 0) || []; results = []; for (i = 0, len = ref1.length; i < len; i++) { origin = ref1[i]; origin = origin.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'); origin = origin.replace(/\\\*/g, '.+'); results.push(new RegExp("^" + origin + "$", 'i')); } return results; })(); app.use(function(req, res, next) { var allow, error, host, i, len; if (req.get('Origin')) { host = url.parse(req.get('Origin') || ''); allow = false; for (i = 0, len = origins.length; i < len; i++) { origin = origins[i]; if (origin.test(host.hostname)) { allow = true; } } if (!allow) { error = new Error("Bad Origin Header " + (req.get('Origin'))); error.status = 403; return next(error); } res.set('Access-Control-Allow-Origin', req.get('Origin')); res.set('Access-Control-Allow-Methods', 'GET, POST'); res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type'); res.set('Access-Control-Expose-Headers', 'X-Response-Time'); res.set('Access-Control-Allow-Max-Age', 0); } if (req.method === 'OPTIONS' && req.path !== '/CloudHealthCheck') { return res.status(200).end(); } return next(); }); app.get('/', function(req, res, next) { return res.redirect('/api/v1'); }); app.all('/CloudHealthCheck', function(req, res, next) { return mongo.db.command({ dbStats: true }, function(err) { if (err) { return next(err); } res.status(200); if (req.method === 'HEAD') { return res.end(); } return res.json({ message: 'System OK', connections: mongo.db.serverConfig.connections().length }); }); }); app.use('/api/v1', require('./routes/api_v1')); app.use(function(req, res, next) { return res.status(404).json({ message: 'Not Found' }); }); app.use(raven.middleware.express.errorHandler(sentry)); app.use(function(err, req, res, next) { res.status(err.status || 500); if (app.get('env').toLowerCase() !== 'test') { console.log(err); } if (res.statusCode >= 500) { console.error(err.message); console.error(err.stack); } if (req.method === 'HEAD') { return res.end(); } return res.json({ message: err.message || 'Unknown error' }); }); if (!module.parent) { mongo.on('ready', function() { app.listen(process.env.PORT); return console.log("Server is listening on port " + process.env.PORT); }); }