UNPKG

ncc-prototype-email-alerts-sub

Version:

Northumberland Council Front End Email Alerts Subscription Prototype

105 lines (104 loc) 4.12 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = __importDefault(require("express")); const logger_1 = __importDefault(require("./libs/logger")); const body_parser_1 = __importDefault(require("body-parser")); const express_session_1 = __importDefault(require("express-session")); const connect_redis_1 = __importDefault(require("connect-redis")); const ioredis_1 = __importDefault(require("ioredis")); const injectRequest_1 = __importDefault(require("./middleware/injectRequest")); const helmet_1 = __importDefault(require("helmet")); const injectValidateFormRequest_1 = __importDefault(require("./middleware/injectValidateFormRequest")); const formValidationRules_1 = require("./libs/formValidationRules"); const setupRoutes_1 = require("./libs/setupRoutes"); const nunjucks_1 = __importDefault(require("nunjucks")); const globalErrorHandler_1 = require("./middleware/globalErrorHandler"); const navigator_1 = __importDefault(require("./libs/navigator")); const path_1 = __importDefault(require("path")); const csurf_1 = __importDefault(require("csurf")); const cookie_parser_1 = __importDefault(require("cookie-parser")); const getApp = (config) => { const app = (0, express_1.default)(); const nunjucksConfig = nunjucks_1.default.configure([ "routes", "views", "dist/views", "node_modules/@nccdigitaldev/ncc-templates/views", "node_modules/govuk-frontend/dist", ], { autoescape: true, express: app, }); app.set("view engine", nunjucksConfig); app.use((0, helmet_1.default)()); app.use("/public", express_1.default.static(path_1.default.join(__dirname, "/assets"))); app.disable("x-powered-by"); app.use((0, helmet_1.default)({ xPoweredBy: false, contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'", "'unsafe-inline'"], }, }, })); const redisConfig = { port: 6379, host: config.redisHostUrl, password: config.redisPassword }; app.use(body_parser_1.default.json()); app.use(body_parser_1.default.urlencoded({ extended: true })); if (config.env === "test") { app.use((0, express_session_1.default)({ secret: "NCC Scaffold", resave: false, saveUninitialized: false, cookie: { httpOnly: false, maxAge: 1000 * 60 * 15, }, })); } else { const client = new ioredis_1.default(redisConfig); client.on("error", function (err) { logger_1.default.debug("Could not establish a connection with redis. " + err + "/n" + JSON.stringify(redisConfig)); }); client.on("connect", function () { logger_1.default.debug("Connected to redis successfully"); }); app.use((0, express_session_1.default)({ store: new connect_redis_1.default({ client: client }), secret: "NCC Scaffold", resave: false, saveUninitialized: false, cookie: { httpOnly: false, maxAge: 1000 * 60 * 15, }, })); } if (config.env === 'prod') { const csrfProtection = (0, csurf_1.default)({ cookie: true }); app.use((0, cookie_parser_1.default)()); app.get("*", csrfProtection); app.post("*", csrfProtection); } app.post("*", (0, injectValidateFormRequest_1.default)(formValidationRules_1.formValidationRules)); app.use("*", injectRequest_1.default); const router = (0, setupRoutes_1.setupRoutes)(); app.use(router); app.use("*", (err, req, res, next) => { (0, globalErrorHandler_1.errorHandlerMiddleware)(err, req, res, next); }); app.use("*", navigator_1.default); return app; }; exports.default = getApp;