@dwp/govuk-casa
Version:
A framework for building GOVUK Collect-And-Submit-Applications
48 lines • 1.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = endSession;
const logger_js_1 = __importDefault(require("./logger.js"));
const log = (0, logger_js_1.default)("lib:end-session");
/**
* A convenience for ending the current session, but retaining some data in it,
* like the current language. It persists an empty session before regenerating a
* new ID.
*
* Note: this will not remove the session from server-side storage, which will
* instead be left up to the storage mechanism to clean up.
*
* @memberof module:@dwp/govuk-casa
* @param {import("express").Request} req HTTP request
* @param {Function} next Chain
* @returns {void}
*/
function endSession(req, next) {
const { language } = req.session;
for (const key of Object.keys(req.session)) {
if (!["cookie"].includes(key)) {
// ESLint disabled as `Object.keys()` returns "own" properties, and
// all values are being null'd, so not assigned any user-controlled values
/* eslint-disable-next-line security/detect-object-injection */
req.session[key] = null;
}
}
req.session.save((saveErr) => {
if (saveErr) {
log.error(saveErr);
}
req.session.regenerate((err) => {
if (err) {
log.error(err);
next(err);
}
else {
req.session.language = language;
req.session.save(next);
}
});
});
}
//# sourceMappingURL=end-session.js.map