const express = require('express'); require('express-async-errors'); const bodyParser = require('body-parser'); const basicAuth = require('express-basic-auth'); const webpack = require('webpack'); const path = require('path'); const getConfig = require('server/config'); const { getLogger } = require('server/modules/logger'); const { getDBConnection } = require('server/modules/db'); const { apiRoutes } = require('server/routes'); const webpackConfig = require('../../webpack.config'); function setupDevServer(config, db, logger, app) { if (!config.__DEV__ || process.env.SKIP_APP === 'true') { return; } const compiler = webpack(webpackConfig); const serverOptions = { quiet: true, publicPath: webpackConfig.output.publicPath, hot: true }; // eslint-disable-next-line global-require app.use(require('webpack-dev-middleware')(compiler, serverOptions)); // eslint-disable-next-line global-require app.use(require('webpack-hot-middleware')(compiler)); } function clientRoute(config, db, logger, app) { app.use(express.static(path.resolve(__dirname, '../../static'))); } function getUnauthorisedResponse(req) { let message = 'No credentials provided'; if (req.auth) { message = `Credentials ${req.auth.user}:${req.auth.password} rejected`; } return `

401 - ${message}

`; } function setupMiddleware(config, app) { app.use(bodyParser.json()); app.use(basicAuth({ users: { admin: config.password }, challenge: true, unauthorizedResponse: getUnauthorisedResponse, realm: 'gurubota0e7b34ca' })); } async function run() { const config = getConfig(); const logger = getLogger(config); try { const db = await getDBConnection(config, logger); const app = express(); setupMiddleware(config, app); app.use('/api1', apiRoutes(config, db, logger)); setupDevServer(config, db, logger, app); clientRoute(config, db, logger, app); const port = process.env.PORT || 3000; app.listen(port, () => { logger.info('Listening on port', port); }); } catch (err) { logger.error('Error setting up app'); logger.error(err.stack); } } module.exports = { run };