diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2024-12-07 13:13:19 -0500 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2024-12-07 13:13:19 -0500 |
| commit | f6b256620b9637ffe4bd29a07cfba1a7880c9bb1 (patch) | |
| tree | 8f2e8ffee698b1f843079297921bb34c8997f876 /packages/backend/src/server/api/SigninWithPasskeyApiService.ts | |
| parent | respect rate limit factor in FileServerService (diff) | |
| download | sharkey-f6b256620b9637ffe4bd29a07cfba1a7880c9bb1.tar.gz sharkey-f6b256620b9637ffe4bd29a07cfba1a7880c9bb1.tar.bz2 sharkey-f6b256620b9637ffe4bd29a07cfba1a7880c9bb1.zip | |
separate SkRateLimiterService from RateLimiterService and update all usages
Diffstat (limited to 'packages/backend/src/server/api/SigninWithPasskeyApiService.ts')
| -rw-r--r-- | packages/backend/src/server/api/SigninWithPasskeyApiService.ts | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/packages/backend/src/server/api/SigninWithPasskeyApiService.ts b/packages/backend/src/server/api/SigninWithPasskeyApiService.ts index 9ba23c54e2..ad08dad79c 100644 --- a/packages/backend/src/server/api/SigninWithPasskeyApiService.ts +++ b/packages/backend/src/server/api/SigninWithPasskeyApiService.ts @@ -21,10 +21,11 @@ import { WebAuthnService } from '@/core/WebAuthnService.js'; import Logger from '@/logger.js'; import { LoggerService } from '@/core/LoggerService.js'; import type { IdentifiableError } from '@/misc/identifiable-error.js'; -import { RateLimiterService } from './RateLimiterService.js'; +import { SkRateLimiterService } from '@/server/api/SkRateLimiterService.js'; import { SigninService } from './SigninService.js'; import type { AuthenticationResponseJSON } from '@simplewebauthn/types'; import type { FastifyReply, FastifyRequest } from 'fastify'; +import { sendRateLimitHeaders } from '@/misc/rate-limit-utils.js'; @Injectable() export class SigninWithPasskeyApiService { @@ -43,7 +44,7 @@ export class SigninWithPasskeyApiService { private signinsRepository: SigninsRepository, private idService: IdService, - private rateLimiterService: RateLimiterService, + private rateLimiterService: SkRateLimiterService, private signinService: SigninService, private webAuthnService: WebAuthnService, private loggerService: LoggerService, @@ -84,11 +85,13 @@ export class SigninWithPasskeyApiService { return error(status ?? 500, failure ?? { id: '4e30e80c-e338-45a0-8c8f-44455efa3b76' }); }; - try { - // Not more than 1 API call per 250ms and not more than 100 attempts per 30min - // NOTE: 1 Sign-in require 2 API calls - await this.rateLimiterService.limit({ key: 'signin-with-passkey', duration: 60 * 30 * 1000, max: 200, minInterval: 250 }, getIpHash(request.ip)); - } catch (err) { + // Not more than 1 API call per 250ms and not more than 100 attempts per 30min + // NOTE: 1 Sign-in require 2 API calls + const rateLimit = await this.rateLimiterService.limit({ key: 'signin-with-passkey', duration: 60 * 30 * 1000, max: 200, minInterval: 250 }, getIpHash(request.ip)); + + sendRateLimitHeaders(reply, rateLimit); + + if (rateLimit.blocked) { reply.code(429); return { error: { |