fix: refactor session store

This commit is contained in:
Mohamed Marrouchi 2024-10-26 12:02:39 +01:00
parent acc6fcaa88
commit e745b97e87
4 changed files with 23 additions and 16 deletions

View File

@ -134,12 +134,12 @@ export const config: Config = {
max: 100, // Maximum number of items in cache (defaults to 100) max: 100, // Maximum number of items in cache (defaults to 100)
}, },
mongo: { mongo: {
user: process.env.MONGO_USER, user: process.env.MONGO_USER || 'dev_only',
password: process.env.MONGO_PASSWORD, password: process.env.MONGO_PASSWORD || 'dev_only',
uri: process.env.MONGO_URI, uri: process.env.MONGO_URI || 'mongodb://dev_only:dev_only@mongo:27017/',
dbName: process.env.MONGO_DB, dbName: process.env.MONGO_DB || 'hexabot',
}, },
env: process.env.NODE_ENV, env: process.env.NODE_ENV || 'development',
authentication: { authentication: {
jwtOptions: { jwtOptions: {
salt: parseInt(process.env.SALT_LENGTH || '12'), salt: parseInt(process.env.SALT_LENGTH || '12'),

View File

@ -23,7 +23,7 @@ import { config } from './config';
import { LoggerService } from './logger/logger.service'; import { LoggerService } from './logger/logger.service';
import { seedDatabase } from './seeder'; import { seedDatabase } from './seeder';
import { swagger } from './swagger'; import { swagger } from './swagger';
import { sessionStore } from './utils/constants/session-store'; import { getSessionStore } from './utils/constants/session-store';
import { ObjectIdPipe } from './utils/pipes/object-id.pipe'; import { ObjectIdPipe } from './utils/pipes/object-id.pipe';
async function bootstrap() { async function bootstrap() {
@ -63,7 +63,7 @@ async function bootstrap() {
proxy: config.security.trustProxy, proxy: config.security.trustProxy,
resave: true, resave: true,
saveUninitialized: false, saveUninitialized: false,
store: sessionStore, store: getSessionStore(),
cookie: { cookie: {
httpOnly: true, httpOnly: true,
secure: config.security.httpsEnabled, secure: config.security.httpsEnabled,

View File

@ -10,8 +10,15 @@ import MongoStore from 'connect-mongo';
import { config } from '@/config'; import { config } from '@/config';
export const sessionStore = MongoStore.create({ let sessionStore: MongoStore = null;
mongoUrl: config.mongo.uri,
dbName: config.mongo.dbName, export const getSessionStore = () => {
collectionName: 'sessions', if (!sessionStore) {
}); sessionStore = MongoStore.create({
mongoUrl: config.mongo.uri,
dbName: config.mongo.dbName,
collectionName: 'sessions',
});
}
return sessionStore;
};

View File

@ -33,7 +33,7 @@ import {
import { OutgoingMessage, StdEventType } from '@/chat/schemas/types/message'; import { OutgoingMessage, StdEventType } from '@/chat/schemas/types/message';
import { config } from '@/config'; import { config } from '@/config';
import { LoggerService } from '@/logger/logger.service'; import { LoggerService } from '@/logger/logger.service';
import { sessionStore } from '@/utils/constants/session-store'; import { getSessionStore } from '@/utils/constants/session-store';
import { IOIncomingMessage, IOMessagePipe } from './pipes/io-message.pipe'; import { IOIncomingMessage, IOMessagePipe } from './pipes/io-message.pipe';
import { SocketEventDispatcherService } from './services/socket-event-dispatcher.service'; import { SocketEventDispatcherService } from './services/socket-event-dispatcher.service';
@ -134,7 +134,7 @@ export class WebsocketGateway
}, },
passport: { user: {} }, passport: { user: {} },
}; // Initialize your session object as needed }; // Initialize your session object as needed
sessionStore.set(sid, newSession, (err) => { getSessionStore().set(sid, newSession, (err) => {
if (err) { if (err) {
this.logger.error('Error saving session:', err); this.logger.error('Error saving session:', err);
return next(new Error('Unable to establish a new socket session')); return next(new Error('Unable to establish a new socket session'));
@ -179,7 +179,7 @@ export class WebsocketGateway
); );
return; return;
} }
sessionStore.set(sessionID, session, (err) => { getSessionStore().set(sessionID, session, (err) => {
if (err) { if (err) {
this.logger.error( this.logger.error(
'Error saving session in `config.sockets.afterDisconnect`:', 'Error saving session in `config.sockets.afterDisconnect`:',
@ -195,7 +195,7 @@ export class WebsocketGateway
sessionID: string, sessionID: string,
next: (err: Error, session: any) => void, next: (err: Error, session: any) => void,
): void { ): void {
sessionStore.get(sessionID, (err, session) => { getSessionStore().get(sessionID, (err, session) => {
this.logger.verbose('Retrieved socket session', err || session); this.logger.verbose('Retrieved socket session', err || session);
return next(err, session); return next(err, session);
}); });