geoserver
Version:
Geoserver written in Node.JS
151 lines (124 loc) • 3.67 kB
JavaScript
// 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);
});
}