enhance(server): productionじゃない限りレートリミットを無効に

This commit is contained in:
syuilo 2023-01-01 11:58:16 +09:00
parent 86e88647fd
commit ee6e022b2a

View file

@ -4,12 +4,13 @@ import Redis from 'ioredis';
import { DI } from '@/di-symbols.js'; import { DI } from '@/di-symbols.js';
import type Logger from '@/logger.js'; import type Logger from '@/logger.js';
import { LoggerService } from '@/core/LoggerService.js'; import { LoggerService } from '@/core/LoggerService.js';
import type { IEndpointMeta } from './endpoints.js';
import { bindThis } from '@/decorators.js'; import { bindThis } from '@/decorators.js';
import type { IEndpointMeta } from './endpoints.js';
@Injectable() @Injectable()
export class RateLimiterService { export class RateLimiterService {
private logger: Logger; private logger: Logger;
private disabled = false;
constructor( constructor(
@Inject(DI.redis) @Inject(DI.redis)
@ -18,13 +19,17 @@ export class RateLimiterService {
private loggerService: LoggerService, private loggerService: LoggerService,
) { ) {
this.logger = this.loggerService.getLogger('limiter'); this.logger = this.loggerService.getLogger('limiter');
if (process.env.NODE_ENV !== 'production') {
this.disabled = true;
}
} }
@bindThis @bindThis
public limit(limitation: IEndpointMeta['limit'] & { key: NonNullable<string> }, actor: string) { public limit(limitation: IEndpointMeta['limit'] & { key: NonNullable<string> }, actor: string) {
return new Promise<void>((ok, reject) => { return new Promise<void>((ok, reject) => {
if (process.env.NODE_ENV === 'test') ok(); if (this.disabled) ok();
// Short-term limit // Short-term limit
const min = (): void => { const min = (): void => {
const minIntervalLimiter = new Limiter({ const minIntervalLimiter = new Limiter({