UNPKG

@dwp/govuk-casa

Version:

A framework for building GOVUK Collect-And-Submit-Applications

77 lines 3.59 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = postMiddleware; // 2 middleware: one as a fallback 404 handler, one to handle thrown errors const logger_js_1 = __importDefault(require("../lib/logger.js")); /** * @typedef {import("express").RequestHandler} RequestHandler * @access private */ const log = (0, logger_js_1.default)("middleware:post"); /** @returns {RequestHandler[]} Middleware functions */ function postMiddleware() { return [ (req, res) => { res.status(404).render("casa/errors/404.njk"); }, /* eslint-disable-next-line no-unused-vars */ (err, req, res, next) => { // In some cases, an error may have been thrown before the template assets // have had a chance to initialise. So we use a hardcoded template in // these cases to ensure the user sees an appropriate message. let TEMPLATE = "casa/errors/500.njk"; if (!res.locals.t) { res.locals.t = () => ""; res.locals.casa = { ...res.locals?.casa, mountUrl: `${req.baseUrl}/`, }; TEMPLATE = "casa/errors/static.njk"; } // CSRF token is invalid in some way if (err?.code === "EBADCSRFTOKEN") { log.info("CSRF validation has failed. This may be caused by the user submitting a stale form from a previous session [EBADCSRFTOKEN]"); return res .status(403) .render(TEMPLATE, { errorCode: "bad_csrf_token", error: err }); } // Body parsing verification check failed if (err?.type === "entity.verify.failed") { log.info("Body parser verification has failed. This has been caused by the user submitting a payload containing invalid data [entity.verify.failed]"); return res .status(403) .render(TEMPLATE, { errorCode: "invalid_payload", error: err }); } // Too many parameters submitted if (err?.type === "parameters.too.many") { log.info("The request contains more parameters than is currently allowed [parameters.too.many]"); return res.status(413).render(TEMPLATE, { errorCode: "parameter_limit_exceeded", error: err, }); } // Overall payload too large if (err?.type === "entity.too.large") { log.info(`The request payload is too large. Received ${err.length}b with a maximum of ${err.limit}b [parameters.too.many]`); return res .status(413) .render(TEMPLATE, { errorCode: "payload_size_exceeded", error: err }); } // Unaccept request method if (err?.code === "unaccepted_request_method") { log.info(err.message); return res.status(400).render(TEMPLATE, { errorCode: "unaccepted_request_method", error: err, }); } // Unknown error log.error(`Unknown error: ${err.message}; stacktrace: ${err.stack}`); return res.status(200).render(TEMPLATE, { error: err }); }, ]; } //# sourceMappingURL=post.js.map