diff --git a/src/main.ts b/src/main.ts index f762174be4..3ef5015ff6 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,6 +11,7 @@ import { NestExpressApplication } from '@nestjs/platform-express'; import { AppModule } from './app.module'; import { AppConfig } from './config/app.config'; import { AuthConfig } from './config/auth.config'; +import { DatabaseConfig } from './config/database.config'; import { MediaConfig } from './config/media.config'; import { ErrorExceptionMapping } from './errors/error-mapping'; import { ConsoleLoggerService } from './logger/console-logger.service'; @@ -31,10 +32,11 @@ async function bootstrap(): Promise { app.useLogger(logger); const configService = app.get(ConfigService); const appConfig = configService.get('appConfig'); + const databaseConfig = configService.get('databaseConfig'); const authConfig = configService.get('authConfig'); const mediaConfig = configService.get('mediaConfig'); - if (!appConfig || !authConfig || !mediaConfig) { + if (!appConfig || !databaseConfig || !authConfig || !mediaConfig) { logger.error('Could not initialize config, aborting.', 'AppBootstrap'); process.exit(1); } @@ -55,7 +57,7 @@ async function bootstrap(): Promise { await setupSpecialGroups(app); - setupSessionMiddleware(app, authConfig); + setupSessionMiddleware(app, authConfig, databaseConfig); app.enableCors({ origin: appConfig.rendererOrigin, diff --git a/src/utils/session.ts b/src/utils/session.ts index 048c7229a3..095f35731e 100644 --- a/src/utils/session.ts +++ b/src/utils/session.ts @@ -10,16 +10,20 @@ import session from 'express-session'; import { Repository } from 'typeorm'; import { AuthConfig } from '../config/auth.config'; +import { DatabaseDialect } from '../config/database-dialect.enum'; +import { DatabaseConfig } from '../config/database.config'; import { Session } from '../users/session.entity'; /** * Setup the session middleware via the given authConfig. * @param {INestApplication} app - the nest application to configure the middleware for. * @param {AuthConfig} authConfig - the authConfig to configure the middleware with. + * @param {DatabaseConfig} dbConfig - the DatabaseConfig to configure the middleware with. */ export function setupSessionMiddleware( app: INestApplication, authConfig: AuthConfig, + dbConfig: DatabaseConfig, ): void { app.use( session({ @@ -32,6 +36,7 @@ export function setupSessionMiddleware( saveUninitialized: false, store: new TypeormStore({ cleanupLimit: 2, + limitSubquery: dbConfig.dialect !== DatabaseDialect.MARIADB, }).connect(app.get>(getRepositoryToken(Session))), }), ); diff --git a/test/test-setup.ts b/test/test-setup.ts index f9d6e9dace..35d68a2d4b 100644 --- a/test/test-setup.ts +++ b/test/test-setup.ts @@ -19,6 +19,7 @@ import { MockAuthGuard } from '../src/auth/mock-auth.guard'; import { TokenAuthGuard } from '../src/auth/token.strategy'; import { AuthorsModule } from '../src/authors/authors.module'; import { AuthConfig } from '../src/config/auth.config'; +import { DatabaseConfig } from '../src/config/database.config'; import appConfigMock from '../src/config/mock/app.config.mock'; import authConfigMock from '../src/config/mock/auth.config.mock'; import customizationConfigMock from '../src/config/mock/customization.config.mock'; @@ -267,6 +268,7 @@ export class TestSetupBuilder { setupSessionMiddleware( this.testSetup.app, this.testSetup.configService.get('authConfig'), + this.testSetup.configService.get('databaseConfig'), ); this.testSetup.app.useGlobalPipes( setupValidationPipe(