'use strict'; process.env.TZ = 'Etc/GMT'; console.log('Loading Goodtimes'); const express = require('express'), bodyParser = require('body-parser'), config = require('config'), session = require('express-session'), basePath = require('./basepath'), cookieParser = require('cookie-parser'), app = express(), csrf = require('csurf'), http = require('http'), { goodTimesDB } = require('./db.js'); require('./console-line.js'); /* Monkey-patch console.log with line numbers */ /* App is behind an nginx proxy which we trust, so use the remote address * set in the headers */ app.set('trust proxy', true); app.use(session({ secret: 'm@g1x!', resave: false, saveUninitialized: false, cookie: { secure: true } })); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(csrf({ cookie: true })); app.use(bodyParser.json()); //const ws = require('express-ws')(app, server); app.use(function (err, req, res) { console.error(err.message); res.status(err.status || 500).json({ message: err.message, error: {} }); }); /* Initialize the data base, configure routes, and open server */ goodTimesDB.init().then((db) => { console.log('DB connected. Configuring routes.'); app.locals.db = db; app.set('basePath', basePath); app.use(`${basePath}api/v1/groups`, require('./routes/groups')); app.use(`${basePath}api/v1/users`, require('./routes/users')); }).then(() => { const server = http.createServer(app), serverConfig = config.get('server'); console.log('Hosting server from: ' + basePath); app.set('port', serverConfig.port); process.on('SIGINT', () => { console.log('Gracefully shutting down from SIGINT (Ctrl-C) in 2 seconds'); setTimeout(() => process.exit(-1), 2000); server.close(() => process.exit(1)); }); server.on('error', function (error) { if (error.syscall !== 'listen') { throw error; } // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(serverConfig.port + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(serverConfig.port + ' is already in use'); process.exit(1); break; default: throw error; } }); server.listen(serverConfig.port, () => { console.log(`http server listening on ${serverConfig.port}`); }); });