From 72b68e772b1942b7fdc48d54d4ccc3af5f069407 Mon Sep 17 00:00:00 2001 From: counterweight Date: Thu, 6 Mar 2025 00:30:28 +0100 Subject: [PATCH] another --- src/middlewares/createSessionMiddleware.js | 56 ++++++++++++---------- src/middlewares/index.js | 8 +++- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/middlewares/createSessionMiddleware.js b/src/middlewares/createSessionMiddleware.js index 8d181d6..53e15dd 100644 --- a/src/middlewares/createSessionMiddleware.js +++ b/src/middlewares/createSessionMiddleware.js @@ -1,33 +1,39 @@ const uuid = require('uuid'); -const sessionService = require('../services/sessionService'); -const constants = require('../constants'); - -async function setAndPersistNewSession(res) { - const sessionUuid = uuid.v7(); - res.cookie('sessionUuid', sessionUuid, { - httpOnly: true, - maxAge: constants.DEFAULT_SESSION_DURATION_SECONDS * 1000, - }); - return await sessionService.createSession(sessionUuid); -} - -async function createSessionMiddleware(req, res, next) { - const sessionUuid = req.cookies.sessionUuid; - - if (!sessionUuid) { - const newSession = await setAndPersistNewSession(res); - req.cookies.sessionUuid = newSession.uuid; +class CreateSessionMiddlewareProvider { + constructor({ constants, sessionService }) { + this.constants = constants; + this.sessionService = sessionService; } - if (sessionUuid) { - if (!(await sessionService.isSessionValid(sessionUuid))) { - const newSession = await setAndPersistNewSession(res); - req.cookies.sessionUuid = newSession.uuid; - } + provide() { + return async (req, res, next) => { + const sessionUuid = req.cookies.sessionUuid; + + if (!sessionUuid) { + const newSession = await this.setAndPersistNewSession(res); + req.cookies.sessionUuid = newSession.uuid; + } + + if (sessionUuid) { + if (!(await this.sessionService.isSessionValid(sessionUuid))) { + const newSession = await this.setAndPersistNewSession(res); + req.cookies.sessionUuid = newSession.uuid; + } + } + + next(); + }; } - next(); + async setAndPersistNewSession(res) { + const sessionUuid = uuid.v7(); + res.cookie('sessionUuid', sessionUuid, { + httpOnly: true, + maxAge: this.constants.DEFAULT_SESSION_DURATION_SECONDS * 1000, + }); + return await this.sessionService.createSession(sessionUuid); + } } -module.exports = createSessionMiddleware; +module.exports = CreateSessionMiddlewareProvider; diff --git a/src/middlewares/index.js b/src/middlewares/index.js index 289f72e..8ad10ef 100644 --- a/src/middlewares/index.js +++ b/src/middlewares/index.js @@ -2,7 +2,6 @@ const redirectIfNotAuthorizedMiddleware = require('./redirectIfNotAuthorizedMidd const redirectIfMissingProfileDetailsMiddleware = require('./redirectIfMissingProfileDetailsMiddleware'); const redirectHomeIfAuthorized = require('./redirectHomeIfAuthorized'); const rejectIfNotAuthorizedMiddleware = require('./rejectIfNotAuthorizedMiddleware'); -const createSessionMiddleware = require('./createSessionMiddleware'); const sessionService = require('../services/sessionService'); const AttachPublicKeyMiddlewareProvider = require('./attachPublicKeyMiddleware'); @@ -10,6 +9,13 @@ const attachPublicKeyMiddleware = new AttachPublicKeyMiddlewareProvider( sessionService ).provide(); +const constants = require('../constants'); +const CreateSessionMiddlewareProvider = require('./createSessionMiddleware'); +const createSessionMiddleware = new CreateSessionMiddlewareProvider({ + constants, + sessionService, +}).provide(); + module.exports = { redirectIfNotAuthorizedMiddleware, attachPublicKeyMiddleware,