diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2024-12-07 10:22:45 -0500 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2024-12-07 10:22:49 -0500 |
| commit | ffc2737478c6f9efd5de9fbaf526b13164727f87 (patch) | |
| tree | 416a391cdd024e11ad34dfc7707d28dcbbecce19 /packages/backend/src/server/api/RateLimiterService.ts | |
| parent | merge: Fix Content-Length resetting for partial content length requests (!796) (diff) | |
| download | sharkey-ffc2737478c6f9efd5de9fbaf526b13164727f87.tar.gz sharkey-ffc2737478c6f9efd5de9fbaf526b13164727f87.tar.bz2 sharkey-ffc2737478c6f9efd5de9fbaf526b13164727f87.zip | |
implement SkRateLimiterService with Leaky Bucket rate limiting
Diffstat (limited to 'packages/backend/src/server/api/RateLimiterService.ts')
| -rw-r--r-- | packages/backend/src/server/api/RateLimiterService.ts | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/packages/backend/src/server/api/RateLimiterService.ts b/packages/backend/src/server/api/RateLimiterService.ts index e9afb9d05a..33db016a7c 100644 --- a/packages/backend/src/server/api/RateLimiterService.ts +++ b/packages/backend/src/server/api/RateLimiterService.ts @@ -10,28 +10,28 @@ import { DI } from '@/di-symbols.js'; import type Logger from '@/logger.js'; import { LoggerService } from '@/core/LoggerService.js'; import { bindThis } from '@/decorators.js'; +import type { LimitInfo } from '@/server/api/SkRateLimiterService.js'; +import { EnvService } from '@/core/EnvService.js'; import type { IEndpointMeta } from './endpoints.js'; @Injectable() export class RateLimiterService { - private logger: Logger; - private disabled = false; + protected readonly logger: Logger; + protected readonly disabled: boolean; constructor( @Inject(DI.redis) - private redisClient: Redis.Redis, + protected readonly redisClient: Redis.Redis, private loggerService: LoggerService, + envService: EnvService, ) { this.logger = this.loggerService.getLogger('limiter'); - - if (process.env.NODE_ENV !== 'production') { - this.disabled = true; - } + this.disabled = envService.env.NODE_ENV !== 'production'; } @bindThis - public limit(limitation: IEndpointMeta['limit'] & { key: NonNullable<string> }, actor: string, factor = 1) { + public limit(limitation: IEndpointMeta['limit'] & { key: NonNullable<string> }, actor: string, factor = 1): Promise<LimitInfo | void> { return new Promise<void>((ok, reject) => { if (this.disabled) ok(); |