Compare commits

..

4 Commits

Author SHA1 Message Date
692d5c2ce3 increase rate limit to 100 per minute for each IP 2025-06-25 13:47:42 +03:00
f337e6c681 Test/prevent server block on rate limit (#421) 2025-06-24 10:55:38 +03:00
f5bf857071 Merge pull request #429 from SyncrowIOT/add-queue-event-handler
Add queue event handler
2025-06-23 08:13:36 -06:00
37b582f521 Merge pull request #428 from SyncrowIOT/add-queue-event-handler
Implement message queue for TuyaWebSocketService and batch processing
2025-06-23 07:35:22 -06:00
2 changed files with 18 additions and 15 deletions

View File

@ -1,7 +1,7 @@
import { SeederModule } from '@app/common/seed/seeder.module'; import { SeederModule } from '@app/common/seed/seeder.module';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config'; import { ConfigModule } from '@nestjs/config';
import { APP_INTERCEPTOR } from '@nestjs/core'; import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core';
import { WinstonModule } from 'nest-winston'; import { WinstonModule } from 'nest-winston';
import { AuthenticationModule } from './auth/auth.module'; import { AuthenticationModule } from './auth/auth.module';
import { AutomationModule } from './automation/automation.module'; import { AutomationModule } from './automation/automation.module';
@ -35,6 +35,8 @@ import { UserNotificationModule } from './user-notification/user-notification.mo
import { UserModule } from './users/user.module'; import { UserModule } from './users/user.module';
import { VisitorPasswordModule } from './vistor-password/visitor-password.module'; import { VisitorPasswordModule } from './vistor-password/visitor-password.module';
import { ThrottlerGuard } from '@nestjs/throttler';
import { ThrottlerModule } from '@nestjs/throttler/dist/throttler.module';
import { winstonLoggerOptions } from '../libs/common/src/logger/services/winston.logger'; import { winstonLoggerOptions } from '../libs/common/src/logger/services/winston.logger';
import { AqiModule } from './aqi/aqi.module'; import { AqiModule } from './aqi/aqi.module';
import { OccupancyModule } from './occupancy/occupancy.module'; import { OccupancyModule } from './occupancy/occupancy.module';
@ -44,9 +46,13 @@ import { WeatherModule } from './weather/weather.module';
ConfigModule.forRoot({ ConfigModule.forRoot({
load: config, load: config,
}), }),
/* ThrottlerModule.forRoot({ ThrottlerModule.forRoot({
throttlers: [{ ttl: 100000, limit: 30 }], throttlers: [{ ttl: 60000, limit: 100 }],
}), */ generateKey: (context) => {
const req = context.switchToHttp().getRequest();
return req.headers['x-forwarded-for'] || req.ip;
},
}),
WinstonModule.forRoot(winstonLoggerOptions), WinstonModule.forRoot(winstonLoggerOptions),
ClientModule, ClientModule,
AuthenticationModule, AuthenticationModule,
@ -88,10 +94,10 @@ import { WeatherModule } from './weather/weather.module';
provide: APP_INTERCEPTOR, provide: APP_INTERCEPTOR,
useClass: LoggingInterceptor, useClass: LoggingInterceptor,
}, },
/* { {
provide: APP_GUARD, provide: APP_GUARD,
useClass: ThrottlerGuard, useClass: ThrottlerGuard,
}, */ },
], ],
}) })
export class AppModule {} export class AppModule {}

View File

@ -3,7 +3,6 @@ import { SeederService } from '@app/common/seed/services/seeder.service';
import { Logger, ValidationPipe } from '@nestjs/common'; import { Logger, ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core'; import { NestFactory } from '@nestjs/core';
import { json, urlencoded } from 'body-parser'; import { json, urlencoded } from 'body-parser';
import rateLimit from 'express-rate-limit';
import helmet from 'helmet'; import helmet from 'helmet';
import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston'; import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston';
import { setupSwaggerAuthentication } from '../libs/common/src/util/user-auth.swagger.utils'; import { setupSwaggerAuthentication } from '../libs/common/src/util/user-auth.swagger.utils';
@ -22,15 +21,13 @@ async function bootstrap() {
app.use(new RequestContextMiddleware().use); app.use(new RequestContextMiddleware().use);
app.use(
rateLimit({
windowMs: 5 * 60 * 1000,
max: 500,
}),
);
app.use((req, res, next) => { app.use((req, res, next) => {
console.log('Real IP:', req.ip); console.log(
'Real IP:',
req.ip,
req.headers['x-forwarded-for'],
req.connection.remoteAddress,
);
next(); next();
}); });