This commit is contained in:
counterweight 2025-03-06 00:30:28 +01:00
parent 3c5aa812ab
commit 72b68e772b
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
2 changed files with 38 additions and 26 deletions

View file

@ -1,33 +1,39 @@
const uuid = require('uuid'); const uuid = require('uuid');
const sessionService = require('../services/sessionService'); class CreateSessionMiddlewareProvider {
const constants = require('../constants'); constructor({ constants, sessionService }) {
this.constants = constants;
this.sessionService = sessionService;
}
async function setAndPersistNewSession(res) { provide() {
const sessionUuid = uuid.v7(); return async (req, res, next) => {
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; const sessionUuid = req.cookies.sessionUuid;
if (!sessionUuid) { if (!sessionUuid) {
const newSession = await setAndPersistNewSession(res); const newSession = await this.setAndPersistNewSession(res);
req.cookies.sessionUuid = newSession.uuid; req.cookies.sessionUuid = newSession.uuid;
} }
if (sessionUuid) { if (sessionUuid) {
if (!(await sessionService.isSessionValid(sessionUuid))) { if (!(await this.sessionService.isSessionValid(sessionUuid))) {
const newSession = await setAndPersistNewSession(res); const newSession = await this.setAndPersistNewSession(res);
req.cookies.sessionUuid = newSession.uuid; 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;

View file

@ -2,7 +2,6 @@ const redirectIfNotAuthorizedMiddleware = require('./redirectIfNotAuthorizedMidd
const redirectIfMissingProfileDetailsMiddleware = require('./redirectIfMissingProfileDetailsMiddleware'); const redirectIfMissingProfileDetailsMiddleware = require('./redirectIfMissingProfileDetailsMiddleware');
const redirectHomeIfAuthorized = require('./redirectHomeIfAuthorized'); const redirectHomeIfAuthorized = require('./redirectHomeIfAuthorized');
const rejectIfNotAuthorizedMiddleware = require('./rejectIfNotAuthorizedMiddleware'); const rejectIfNotAuthorizedMiddleware = require('./rejectIfNotAuthorizedMiddleware');
const createSessionMiddleware = require('./createSessionMiddleware');
const sessionService = require('../services/sessionService'); const sessionService = require('../services/sessionService');
const AttachPublicKeyMiddlewareProvider = require('./attachPublicKeyMiddleware'); const AttachPublicKeyMiddlewareProvider = require('./attachPublicKeyMiddleware');
@ -10,6 +9,13 @@ const attachPublicKeyMiddleware = new AttachPublicKeyMiddlewareProvider(
sessionService sessionService
).provide(); ).provide();
const constants = require('../constants');
const CreateSessionMiddlewareProvider = require('./createSessionMiddleware');
const createSessionMiddleware = new CreateSessionMiddlewareProvider({
constants,
sessionService,
}).provide();
module.exports = { module.exports = {
redirectIfNotAuthorizedMiddleware, redirectIfNotAuthorizedMiddleware,
attachPublicKeyMiddleware, attachPublicKeyMiddleware,