diff --git a/package-lock.json b/package-lock.json index 90d77011..5e8edd0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,8 +36,8 @@ "morgan": "^1.10.1", "multer": "2.1.1", "nunjucks": "3.2.4", - "passport": "~0.5.3", - "passport-github": "1.1.0", + "passport": "~0.7.0", + "passport-github2": "^0.1.12", "qs": "6.15.0", "rfc822-validate": "^1.0.0", "sass": "^1.62.1", @@ -60,7 +60,7 @@ "@types/morgan": "^1.9.2", "@types/multer": "^1.4.5", "@types/node": "20.5.9", - "@types/passport": "1.0.6", + "@types/passport": "^1.0.17", "@types/qs": "6.9.6", "@types/stripe": "6.25.8", "chai": "^4.3.4", @@ -2878,10 +2878,11 @@ "dev": true }, "node_modules/@types/passport": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.6.tgz", - "integrity": "sha512-9oKfrJXuAxvyxdrtMCxKkHgmd6DMO8NDOLvMJ1LvIWd6/xP+i81PAkpTaEca7VhJX9S009RciwZL/j6dsLsHrA==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.17.tgz", + "integrity": "sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } @@ -8192,13 +8193,14 @@ } }, "node_modules/passport": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz", - "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", + "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==", "license": "MIT", "dependencies": { "passport-strategy": "1.x.x", - "pause": "0.0.1" + "pause": "0.0.1", + "utils-merge": "^1.0.1" }, "engines": { "node": ">= 0.4.0" @@ -8208,15 +8210,15 @@ "url": "https://github.com/sponsors/jaredhanson" } }, - "node_modules/passport-github": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/passport-github/-/passport-github-1.1.0.tgz", - "integrity": "sha512-XARXJycE6fFh/dxF+Uut8OjlwbFEXgbPVj/+V+K7cvriRK7VcAOm+NgBmbiLM9Qv3SSxEAV+V6fIk89nYHXa8A==", + "node_modules/passport-github2": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/passport-github2/-/passport-github2-0.1.12.tgz", + "integrity": "sha512-3nPUCc7ttF/3HSP/k9sAXjz3SkGv5Nki84I05kSQPo01Jqq1NzJACgMblCK0fGcv9pKCG/KXU3AJRDGLqHLoIw==", "dependencies": { "passport-oauth2": "1.x.x" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 0.8.0" } }, "node_modules/passport-oauth2": { diff --git a/package.json b/package.json index 7ae2aa05..3aeada1b 100644 --- a/package.json +++ b/package.json @@ -56,8 +56,8 @@ "morgan": "^1.10.1", "multer": "2.1.1", "nunjucks": "3.2.4", - "passport": "~0.5.3", - "passport-github": "1.1.0", + "passport": "~0.7.0", + "passport-github2": "^0.1.12", "qs": "6.15.0", "rfc822-validate": "^1.0.0", "sass": "^1.62.1", @@ -80,7 +80,7 @@ "@types/morgan": "^1.9.2", "@types/multer": "^1.4.5", "@types/node": "20.5.9", - "@types/passport": "1.0.6", + "@types/passport": "^1.0.17", "@types/qs": "6.9.6", "@types/stripe": "6.25.8", "chai": "^4.3.4", diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 8d166a9d..92eb6d62 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -36,8 +36,10 @@ export function unauthorised(req: Request, res: Response) { res.status(403).send('User does not have permissions to access the resource') } -export function revokeSession(req: Request, res: Response) { +export function revokeSession(req: Request, res: Response, next: NextFunction) { logger.info(`Revoking session for user ${req.user && req.user.username}`) - req.logout() - res.redirect('/') + req.logout((err?: unknown) => { + if (err) return next(err); + res.redirect('/'); + }); } diff --git a/src/lib/auth/github/strategy.js b/src/lib/auth/github/strategy.js index 97e9710c..16d8a058 100644 --- a/src/lib/auth/github/strategy.js +++ b/src/lib/auth/github/strategy.js @@ -1,5 +1,5 @@ // github OAuth strategy -const { Strategy } = require('passport-github') +const { Strategy } = require('passport-github2') const config = require('../../../config') const logger = require('../../logger') diff --git a/src/web/server.js b/src/web/server.js index 4cf50ac5..478ce3eb 100644 --- a/src/web/server.js +++ b/src/web/server.js @@ -101,6 +101,23 @@ function configureClientSessions(instance) { })) } +// Shim for passport version 0.6+ necessary to navigate the use of req.session.regenerate issue +function configureServerSessions(instance) { + instance.use((req, res, next) => { + if (req.session && !req.session.regenerate) { + req.session.regenerate = (cb) => { + cb() + } + } + if (req.session && !req.session.save) { + req.session.save = (cb) => { + cb() + } + } + next() + }) +} + function configureAuth(instance) { const exposeAuthenticatedUserToTemplate = (req, res, next) => { res.locals.user = req.user @@ -205,6 +222,7 @@ const configure = [ configureSentryRequestHandler, configureRequestParsing, configureClientSessions, + configureServerSessions, configureAuth, configureSecureHeaders, configureServingPublicStaticFiles,