ncc-prototype-email-alerts-sub
Version:
Northumberland Council Front End Email Alerts Subscription Prototype
105 lines (104 loc) • 4.12 kB
JavaScript
"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;