Skip to content

Commit 0760b03

Browse files
authored
ensure to have only one body parser middeware, added more logs for investigation (#19)
1 parent f9bea4d commit 0760b03

File tree

13 files changed

+186
-246
lines changed

13 files changed

+186
-246
lines changed

CoreDeployable/package-lock.json

Lines changed: 137 additions & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CoreDeployable/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
"@azure/storage-blob": "^12.28.0",
5353
"@codegenie/serverless-express": "^4.16.0",
5454
"@node-saml/passport-saml": "^5.1.0",
55+
"body-parser": "^2.2.0",
56+
"cookie-parser": "^1.4.7",
5557
"core-fcads": "file:core-fcads-1.0.0.tgz",
5658
"core-gcds": "file:core-gcds-1.0.0.tgz",
5759
"core-govuk": "file:core-govuk-1.0.0.tgz",
@@ -102,6 +104,8 @@
102104
"@azure/storage-blob",
103105
"@codegenie/serverless-express",
104106
"@node-saml/passport-saml",
107+
"body-parser",
108+
"cookie-parser",
105109
"crypto-js",
106110
"core-fcads",
107111
"dompurify",

CoreDeployable/src/config/expressConfiguration.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import bodyParser from 'body-parser';
2+
import cookieParser from 'cookie-parser';
23
import envConfig from './envConfig.js';
34
import express from 'express';
45
import { getCloudServices } from '../container/CloudServicesRegistry.js';
@@ -48,6 +49,10 @@ export const expressConfiguration = (app: express.Express) => {
4849
app.use(permissionsPolicy());
4950
app.use(nocache());
5051

52+
app.use(bodyParser.json({ type: 'application/json' }));
53+
app.use(cookieParser());
54+
app.use(bodyParser.urlencoded({ extended: true }));
55+
5156
app.use(
5257
session({
5358
secret: envConfig.sessionSecret,
@@ -65,14 +70,25 @@ export const expressConfiguration = (app: express.Express) => {
6570

6671
app.post(
6772
'/login/callback',
68-
bodyParser.urlencoded({ extended: false }),
6973
passport.authenticate('saml', {
7074
failureRedirect: '/',
7175
failureFlash: true,
7276
}),
7377
function (req, res) {
74-
const redirectUrl = decodeURIComponent(req.body.RelayState);
75-
logger.debug(`Redirect to: ${redirectUrl}`);
78+
// Handle RelayState from either body or query parameters, with fallback to session
79+
const relayState = req.body?.RelayState || req.query?.RelayState || req.session?.returnTo;
80+
const redirectUrl = relayState ? decodeURIComponent(relayState) : '/';
81+
82+
logger.debug(`SAML callback - RelayState: ${relayState}, Redirect to: ${redirectUrl}`);
83+
logger.debug(`Request body:`, req.body);
84+
logger.debug(`Request query:`, req.query);
85+
logger.debug(`Session returnTo:`, req.session?.returnTo);
86+
87+
// Clear the returnTo from session after using it
88+
if (req.session?.returnTo) {
89+
delete req.session.returnTo;
90+
}
91+
7692
res.redirect(redirectUrl);
7793
},
7894
);

0 commit comments

Comments
 (0)