turnilo
Version:
Business intelligence, data exploration and visualization web application for Druid, formerly known as Swiv and Pivot
126 lines • 5.55 kB
JavaScript
"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const bodyParser = __importStar(require("body-parser"));
const compression_1 = __importDefault(require("compression"));
const express_1 = __importDefault(require("express"));
const helmet_1 = require("helmet");
const path_1 = require("path");
const liveness_1 = require("./routes/liveness/liveness");
const mkurl_1 = require("./routes/mkurl/mkurl");
const plyql_1 = require("./routes/plyql/plyql");
const plywood_1 = require("./routes/plywood/plywood");
const query_1 = require("./routes/query/query");
const readiness_1 = require("./routes/readiness/readiness");
const shorten_1 = require("./routes/shorten/shorten");
const sources_1 = require("./routes/sources/sources");
const turnilo_1 = require("./routes/turnilo/turnilo");
const load_plugin_1 = require("./utils/plugin-loader/load-plugin");
const views_1 = require("./views");
function createApp(serverSettings, settingsManager, version) {
const app = express_1.default();
app.disable("x-powered-by");
const isDev = app.get("env") === "development";
const isTrustedProxy = serverSettings.trustProxy === "always";
if (isTrustedProxy) {
app.set("trust proxy", true);
}
const timeout = serverSettings.serverTimeout;
app.use((req, res, next) => {
res.setTimeout(timeout);
next();
});
function getRoutePath(route) {
const serverRoot = serverSettings.serverRoot;
const prefix = serverRoot.length > 0 ? `/${serverRoot}` : "";
return `${prefix}${route}`;
}
function attachRouter(route, router) {
app.use(getRoutePath(route), router);
}
app.use(compression_1.default());
if (serverSettings.strictTransportSecurity === "always") {
app.use(helmet_1.hsts({
maxAge: 10886400000,
includeSubDomains: true,
preload: true
}));
}
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
if (serverSettings.iframe === "deny") {
app.use((req, res, next) => {
res.setHeader("X-Frame-Options", "DENY");
res.setHeader("Content-Security-Policy", "frame-ancestors 'none'");
next();
});
}
app.use((req, res, next) => {
req.turniloMetadata = {
loggerContext: {}
};
next();
});
serverSettings.plugins.forEach(({ path, name, settings }) => {
try {
settingsManager.logger.log(`Loading plugin ${name} module`);
const module = load_plugin_1.loadPlugin(path, settingsManager.anchorPath);
settingsManager.logger.log(`Invoking plugin ${name}`);
module.plugin(app, settings, serverSettings, settingsManager.appSettings, settingsManager.sourcesGetter, settingsManager.logger.setLoggerId(name));
}
catch (e) {
settingsManager.logger.warn(`Plugin ${name} threw an error: ${e.message}`);
}
});
if (app.get("env") === "dev-hmr") {
const webpack = require("webpack");
const webpackConfig = require("../../config/webpack.dev");
const webpackDevMiddleware = require("webpack-dev-middleware");
const webpackHotMiddleware = require("webpack-hot-middleware");
if (webpack && webpackDevMiddleware && webpackHotMiddleware) {
const webpackCompiler = webpack(webpackConfig);
app.use(webpackDevMiddleware(webpackCompiler, {
hot: true,
noInfo: true,
publicPath: webpackConfig.output.publicPath
}));
app.use(webpackHotMiddleware(webpackCompiler, {
log: console.log,
path: "/__webpack_hmr"
}));
}
}
attachRouter("/", express_1.default.static(path_1.join(__dirname, "../../build/public")));
attachRouter("/", express_1.default.static(path_1.join(__dirname, "../../assets")));
attachRouter(serverSettings.readinessEndpoint, readiness_1.readinessRouter(settingsManager));
attachRouter(serverSettings.livenessEndpoint, liveness_1.livenessRouter);
attachRouter("/sources", sources_1.sourcesRouter(settingsManager));
attachRouter("/plywood", plywood_1.plywoodRouter(settingsManager));
attachRouter("/plyql", plyql_1.plyqlRouter(settingsManager));
attachRouter("/mkurl", mkurl_1.mkurlRouter(settingsManager));
attachRouter("/query", query_1.queryRouter(settingsManager));
attachRouter("/shorten", shorten_1.shortenRouter(settingsManager, isTrustedProxy));
attachRouter("/", turnilo_1.turniloRouter(settingsManager, version));
app.use((req, res) => {
res.redirect(getRoutePath("/"));
});
app.use((err, req, res, next) => {
settingsManager.logger.error(`Server Error: ${err.message}`);
settingsManager.logger.error(err.stack);
res.status(err.status || 500);
const error = isDev ? err : null;
res.send(views_1.errorLayout({ version, title: "Error" }, err.message, error));
});
return app;
}
exports.default = createApp;
//# sourceMappingURL=app.js.map