import { MiddlewareConsumer, Module, NestModule, RequestMethod, } from '@nestjs/common'; import { ServeStaticModule } from '@nestjs/serve-static'; import { ThrottlerModule } from '@nestjs/throttler'; import { join } from 'path'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { CSRFMiddleware } from './middleware/csrf.middleware'; import { UserMiddleware } from './middleware/user.middleware'; import { ConfigurationModule } from './modules/config/config.module'; import { LoginModule } from './modules/features/login/login.module'; import { OAuth2Module } from './modules/features/oauth2/oauth2.module'; import { RegisterModule } from './modules/features/register/register.module'; import { SettingsModule } from './modules/features/settings/settings.module'; import { TwoFactorModule } from './modules/features/two-factor/two-factor.module'; import { DatabaseModule } from './modules/objects/database/database.module'; import { EmailModule } from './modules/objects/email/email.module'; import { OAuth2ClientModule } from './modules/objects/oauth2-client/oauth2-client.module'; import { OAuth2TokenModule } from './modules/objects/oauth2-token/oauth2-token.module'; import { UploadModule } from './modules/objects/upload/upload.module'; import { UserModule } from './modules/objects/user/user.module'; import { UtilityModule } from './modules/utility/utility.module'; @Module({ imports: [ ServeStaticModule.forRoot({ rootPath: join(__dirname, '..', 'uploads'), serveRoot: '/uploads', }), ThrottlerModule.forRoot({ ttl: 10, limit: 10, }), ConfigurationModule, UtilityModule, DatabaseModule, EmailModule, UserModule, UploadModule, OAuth2ClientModule, OAuth2TokenModule, LoginModule, RegisterModule, OAuth2Module, TwoFactorModule, SettingsModule, ], controllers: [AppController], providers: [AppService, CSRFMiddleware], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer .apply(CSRFMiddleware, UserMiddleware) .exclude( { path: 'uploads*', method: RequestMethod.ALL }, { path: 'public*', method: RequestMethod.ALL }, ) .forRoutes('*'); } }