virool-pivot
Version:
A web-based exploratory visualization UI for Druid.io
90 lines (89 loc) • 3.02 kB
JavaScript
"use strict";
var express = require('express');
var path = require('path');
var logger = require('morgan');
var bodyParser = require('body-parser');
var compress = require('compression');
var chronoshift_1 = require('chronoshift');
// Init chronoshift
if (!chronoshift_1.WallTime.rules) {
var tzData = require("chronoshift/lib/walltime/walltime-data.js");
chronoshift_1.WallTime.init(tzData.rules, tzData.zones);
}
var config_1 = require('./config');
var plywoodRoutes = require('./routes/plywood/plywood');
var plyqlRoutes = require('./routes/plyql/plyql');
var pivotRoutes = require('./routes/pivot/pivot');
var healthRoutes = require('./routes/health/health');
var views_1 = require('./views');
var serverRoot = '/pivot';
if (config_1.SERVER_ROOT) {
var serverRoot = config_1.SERVER_ROOT;
if (serverRoot[0] !== '/')
serverRoot = '/' + serverRoot;
}
var app = express();
app.disable('x-powered-by');
app.use(compress());
app.use(logger('dev'));
app.use('/', express.static(path.join(__dirname, '../../build/public')));
app.use(serverRoot, express.static(path.join(__dirname, '../../build/public')));
app.use('/', express.static(path.join(__dirname, '../../assets')));
app.use(serverRoot, express.static(path.join(__dirname, '../../assets')));
if (config_1.AUTH) {
app.use(config_1.AUTH.auth({
version: config_1.VERSION,
dataSourceManager: config_1.DATA_SOURCE_MANAGER
}));
app.use(function (req, res, next) {
if (!req.dataSourceManager) {
return next(new Error('no dataSourceManager'));
}
next();
});
}
else {
app.use(function (req, res, next) {
req.user = null;
req.dataSourceManager = config_1.DATA_SOURCE_MANAGER;
next();
});
}
app.use(bodyParser.json());
// Data routes
app.use('/plywood', plywoodRoutes);
app.use(serverRoot + '/plywood', plywoodRoutes);
app.use('/plyql', plyqlRoutes);
app.use(serverRoot + '/plyql', plyqlRoutes);
// View routes
if (config_1.SERVER_CONFIG.iframe === 'deny') {
app.use(function (req, res, next) {
res.setHeader("X-Frame-Options", "DENY");
res.setHeader("Content-Security-Policy", "frame-ancestors 'none'");
next();
});
}
app.use('/', pivotRoutes);
app.use(serverRoot, pivotRoutes);
app.use('/health', healthRoutes);
app.use(serverRoot + '/health', healthRoutes);
// Catch 404 and redirect to /
app.use(function (req, res, next) {
res.redirect('/');
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.send(views_1.errorLayout({ version: config_1.VERSION, title: 'Error' }, err.message, err));
});
}
// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.send(views_1.errorLayout({ version: config_1.VERSION, title: 'Error' }, err.message));
});
module.exports = app;