| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | const express     = require('express');const bodyParser  = require('body-parser');const fileUpload  = require('express-fileupload');const compression = require('compression');const log         = require('./logger').express;/** * App */const app = express();app.use(fileUpload());app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: true}));// Gzipapp.use(compression());/** * General Logging, BEFORE routes */app.disable('x-powered-by');app.enable('trust proxy', ['loopback', 'linklocal', 'uniquelocal']);app.enable('strict routing');// pretty print JSON when not liveif (process.env.NODE_ENV !== 'production') {	app.set('json spaces', 2);}// CORS for everythingapp.use(require('./lib/express/cors'));// General security/cache related headers + server headerapp.use(function (req, res, next) {	let x_frame_options = 'DENY';	if (typeof process.env.X_FRAME_OPTIONS !== 'undefined' && process.env.X_FRAME_OPTIONS) {		x_frame_options = process.env.X_FRAME_OPTIONS;	}	res.set({		'Strict-Transport-Security': 'includeSubDomains; max-age=631138519; preload',		'X-XSS-Protection':          '1; mode=block',		'X-Content-Type-Options':    'nosniff',		'X-Frame-Options':           x_frame_options,		'Cache-Control':             'no-cache, no-store, max-age=0, must-revalidate',		Pragma:                      'no-cache',		Expires:                     0	});	next();});app.use(require('./lib/express/jwt')());app.use('/', require('./routes/api/main'));// production error handler// no stacktraces leaked to user// eslint-disable-next-lineapp.use(function (err, req, res, next) {	let payload = {		error: {			code:    err.status,			message: err.public ? err.message : 'Internal Error'		}	};	if (process.env.NODE_ENV === 'development' || (req.baseUrl + req.path).includes('nginx/certificates')) {		payload.debug = {			stack:    typeof err.stack !== 'undefined' && err.stack ? err.stack.split('\n') : null,			previous: err.previous		};	}	// Not every error is worth logging - but this is good for now until it gets annoying.	if (process.env.NODE_ENV === 'development' || process.env.DEBUG) {		log.debug(err);	} else if (typeof err.stack !== 'undefined' && err.stack && (typeof err.public == 'undefined' || !err.public)) {		log.warn(err.message);	}	res		.status(err.status || 500)		.send(payload);});module.exports = app;
 |