UNPKG

@ima-worldhealth/sunfish

Version:

A webapp for configuring DHIS2 email reports

114 lines (87 loc) 2.79 kB
require('dotenv').config(); const express = require('express'); const helmet = require('helmet'); const fs = require('fs'); const passport = require('passport'); const flash = require('express-flash'); const session = require('express-session'); const Redis = require('ioredis'); const RedisStore = require('connect-redis')(session); const i18next = require('i18next'); const i18nextBackend = require('i18next-node-fs-backend'); const i18nextMiddleware = require('i18next-http-middleware'); const path = require('path'); const healthcheck = require('./lib/healthcheck'); const app = express(); const client = new Redis(); app.use(helmet()); app.set('view engine', 'pug'); app.use(express.json()); app.use(express.urlencoded({ extended : true })); app.use(session({ store : new RedisStore({ client }), resave : true, saveUninitialized : true, secret : 'b1e9d8a4-39a4-11e9-b7e2-03fe5e35051c', })); app.get('/logo.svg', (req, res) => { fs.createReadStream('./views/includes/logo.svg').pipe(res); }); app.use(passport.initialize()); app.use(passport.session()); app.use(flash()); // preload english and french dictionaries i18next .use(i18nextMiddleware.LanguageDetector) .use(i18nextBackend) .init({ preload : ['en', 'fr'], backend : { loadPath : path.join(__dirname, '/locales/{{lng}}/{{lng}}.json') }, }); // make it so that we don't have issues with language app.use(i18nextMiddleware.handle(i18next, { removeLngFromUrl : true, })); app.use((req, res, next) => { res.locals.app = { url : process.env.APP_URL, name : process.env.APP_NAME, email : process.env.APP_EMAIL, }; next(); }); app.use('/setup', require('./controllers/setup')); // redirect to setup page if the application is not installed app.use((req, res, next) => { if (!healthcheck.isInstalled()) { res.redirect('/setup'); } else { next(); } }); app.use('/auth', require('./controllers/auth')); // make sure the user is logged in app.use((req, res, next) => { if (!req.user) { res.redirect('/auth/login'); } else { res.locals.user = req.user; next(); } }); app.use('/schedules', require('./controllers/schedules')); app.use('/userGroups', require('./controllers/userGroups')); app.use('/dashboards', require('./controllers/dashboards')); app.use('/datasources', require('./controllers/datasources')); app.get('/', (req, res) => { res.redirect('/schedules'); }); // listen to events app.use('/events', require('./controllers/event-stream')); app.listen(process.env.PORT, () => console.log(`Listening on ${process.env.PORT}`)); process.on('uncaughtException', (exception) => { console.error(exception); process.exit(1); }); process.on('unhandledRejection', (rejection) => { console.error(rejection); process.exit(1); });