diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2024-12-08 11:58:57 -0500 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2024-12-08 11:58:57 -0500 |
| commit | 91c9b67cb08094fc00eab685c0f24b2668a9d8fc (patch) | |
| tree | be839bb46a0ddfa996de3a60d2a5184d72872878 | |
| parent | increase rate limit for `/api/endpoint` based on real-world testing (diff) | |
| download | sharkey-91c9b67cb08094fc00eab685c0f24b2668a9d8fc.tar.gz sharkey-91c9b67cb08094fc00eab685c0f24b2668a9d8fc.tar.bz2 sharkey-91c9b67cb08094fc00eab685c0f24b2668a9d8fc.zip | |
bypass rate limits when factor is 0
| -rw-r--r-- | packages/backend/src/server/api/SkRateLimiterService.ts | 4 | ||||
| -rw-r--r-- | packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts | 21 |
2 files changed, 14 insertions, 11 deletions
diff --git a/packages/backend/src/server/api/SkRateLimiterService.ts b/packages/backend/src/server/api/SkRateLimiterService.ts index 027d05310b..d9abbfd406 100644 --- a/packages/backend/src/server/api/SkRateLimiterService.ts +++ b/packages/backend/src/server/api/SkRateLimiterService.ts @@ -35,7 +35,7 @@ export class SkRateLimiterService { } public async limit(limit: RateLimit, actor: string, factor = 1): Promise<LimitInfo> { - if (this.disabled) { + if (this.disabled || factor === 0) { return { blocked: false, remaining: Number.MAX_SAFE_INTEGER, @@ -46,7 +46,7 @@ export class SkRateLimiterService { }; } - if (factor <= 0) { + if (factor < 0) { throw new Error(`Rate limit factor is zero or negative: ${factor}`); } diff --git a/packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts b/packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts index 215b83b53f..c7fac85706 100644 --- a/packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts +++ b/packages/backend/test/unit/server/api/SkRateLimiterServiceTests.ts @@ -300,10 +300,11 @@ describe(SkRateLimiterService, () => { expect(counter?.t).toBe(0); }); - it('should throw if factor is zero', async () => { - const promise = serviceUnderTest().limit(limit, actor, 0); + it('should skip if factor is zero', async () => { + const info = await serviceUnderTest().limit(limit, actor, 0); - await expect(promise).rejects.toThrow(/factor is zero or negative/); + expect(info.blocked).toBeFalsy(); + expect(info.remaining).toBe(Number.MAX_SAFE_INTEGER); }); it('should throw if factor is negative', async () => { @@ -537,10 +538,11 @@ describe(SkRateLimiterService, () => { expect(minCounter?.t).toBe(0); }); - it('should throw if factor is zero', async () => { - const promise = serviceUnderTest().limit(limit, actor, 0); + it('should skip if factor is zero', async () => { + const info = await serviceUnderTest().limit(limit, actor, 0); - await expect(promise).rejects.toThrow(/factor is zero or negative/); + expect(info.blocked).toBeFalsy(); + expect(info.remaining).toBe(Number.MAX_SAFE_INTEGER); }); it('should throw if factor is negative', async () => { @@ -693,10 +695,11 @@ describe(SkRateLimiterService, () => { expect(i2.blocked).toBeFalsy(); }); - it('should throw if factor is zero', async () => { - const promise = serviceUnderTest().limit(limit, actor, 0); + it('should skip if factor is zero', async () => { + const info = await serviceUnderTest().limit(limit, actor, 0); - await expect(promise).rejects.toThrow(/factor is zero or negative/); + expect(info.blocked).toBeFalsy(); + expect(info.remaining).toBe(Number.MAX_SAFE_INTEGER); }); it('should throw if factor is negative', async () => { |