From 7677f9c4e60725665d918e22c56f288d852909a5 Mon Sep 17 00:00:00 2001 From: Alexey Yarmosh Date: Tue, 24 Sep 2024 12:42:18 +0200 Subject: [PATCH] refactor: move post rate limiter --- config/default.cjs | 2 ++ .../{rate-limiter.ts => rate-limiter/rate-limiter-post.ts} | 6 +++--- src/limits/route/get-limits.ts | 2 +- src/measurement/route/get-measurement.ts | 4 +++- src/measurement/runner.ts | 2 +- test/tests/integration/limits.test.ts | 2 +- test/tests/integration/ratelimit.test.ts | 2 +- 7 files changed, 12 insertions(+), 8 deletions(-) rename src/lib/{rate-limiter.ts => rate-limiter/rate-limiter-post.ts} (96%) diff --git a/config/default.cjs b/config/default.cjs index 7845c8dd..ede1f065 100644 --- a/config/default.cjs +++ b/config/default.cjs @@ -72,8 +72,10 @@ module.exports = { limits: { anonymousTestsPerLocation: 200, anonymousTestsPerMeasurement: 500, + anonymousGetMeasurement: 5, // per 2 seconds per IP authenticatedTestsPerLocation: 500, authenticatedTestsPerMeasurement: 500, + authenticatedGetMeasurement: 5, // per 2 seconds per user }, globalDistribution: { AF: 5, diff --git a/src/lib/rate-limiter.ts b/src/lib/rate-limiter/rate-limiter-post.ts similarity index 96% rename from src/lib/rate-limiter.ts rename to src/lib/rate-limiter/rate-limiter-post.ts index 9eb9ab7f..7f1685f7 100644 --- a/src/lib/rate-limiter.ts +++ b/src/lib/rate-limiter/rate-limiter-post.ts @@ -1,10 +1,10 @@ import config from 'config'; import { RateLimiterRedis, RateLimiterRes } from 'rate-limiter-flexible'; import requestIp from 'request-ip'; -import { getPersistentRedisClient } from './redis/persistent-client.js'; +import { getPersistentRedisClient } from '../redis/persistent-client.js'; import createHttpError from 'http-errors'; -import type { ExtendedContext } from '../types.js'; -import { credits } from './credits.js'; +import type { ExtendedContext } from '../../types.js'; +import { credits } from '../credits.js'; const redisClient = getPersistentRedisClient(); diff --git a/src/limits/route/get-limits.ts b/src/limits/route/get-limits.ts index 7cc35ec6..27fcc99f 100644 --- a/src/limits/route/get-limits.ts +++ b/src/limits/route/get-limits.ts @@ -1,5 +1,5 @@ import type Router from '@koa/router'; -import { getRateLimitState } from '../../lib/rate-limiter.js'; +import { getRateLimitState } from '../../lib/rate-limiter/rate-limiter-post.js'; import type { ExtendedContext } from '../../types.js'; import { credits } from '../../lib/credits.js'; import { authenticate } from '../../lib/http/middleware/authenticate.js'; diff --git a/src/measurement/route/get-measurement.ts b/src/measurement/route/get-measurement.ts index 3d47ec01..615b3003 100644 --- a/src/measurement/route/get-measurement.ts +++ b/src/measurement/route/get-measurement.ts @@ -1,6 +1,8 @@ import type { DefaultContext, DefaultState, ParameterizedContext } from 'koa'; import type Router from '@koa/router'; import { getMeasurementStore } from '../store.js'; +import { corsAuthHandler } from '../../lib/http/middleware/cors.js'; +import { authenticate } from '../../lib/http/middleware/authenticate.js'; const store = getMeasurementStore(); @@ -24,5 +26,5 @@ const handle = async (ctx: ParameterizedContext { - router.get('/measurements/:id', '/measurements/:id([a-zA-Z0-9]+)', handle); + router.get('/measurements/:id', '/measurements/:id([a-zA-Z0-9]+)', corsAuthHandler(), authenticate(), handle); }; diff --git a/src/measurement/runner.ts b/src/measurement/runner.ts index 4df73064..eab52df5 100644 --- a/src/measurement/runner.ts +++ b/src/measurement/runner.ts @@ -8,7 +8,7 @@ import { getMetricsAgent, type MetricsAgent } from '../lib/metrics.js'; import type { MeasurementStore } from './store.js'; import { getMeasurementStore } from './store.js'; import type { MeasurementRequest, MeasurementResultMessage, MeasurementProgressMessage, UserRequest } from './types.js'; -import { rateLimit } from '../lib/rate-limiter.js'; +import { rateLimit } from '../lib/rate-limiter/rate-limiter-post.js'; import type { ExtendedContext } from '../types.js'; export class MeasurementRunner { diff --git a/test/tests/integration/limits.test.ts b/test/tests/integration/limits.test.ts index 16af97a4..787ed5b0 100644 --- a/test/tests/integration/limits.test.ts +++ b/test/tests/integration/limits.test.ts @@ -4,7 +4,7 @@ import requestIp from 'request-ip'; import { expect } from 'chai'; import { getTestServer, addFakeProbe, deleteFakeProbes, waitForProbesUpdate } from '../../utils/server.js'; import nockGeoIpProviders from '../../utils/nock-geo-ip.js'; -import { anonymousRateLimiter, authenticatedRateLimiter } from '../../../src/lib/rate-limiter.js'; +import { anonymousRateLimiter, authenticatedRateLimiter } from '../../../src/lib/rate-limiter/rate-limiter-post.js'; import { client } from '../../../src/lib/sql/client.js'; import { GP_TOKENS_TABLE } from '../../../src/lib/http/auth.js'; import { CREDITS_TABLE } from '../../../src/lib/credits.js'; diff --git a/test/tests/integration/ratelimit.test.ts b/test/tests/integration/ratelimit.test.ts index 1ba2a7c6..7e5098b7 100644 --- a/test/tests/integration/ratelimit.test.ts +++ b/test/tests/integration/ratelimit.test.ts @@ -4,7 +4,7 @@ import requestIp from 'request-ip'; import { expect } from 'chai'; import { getTestServer, addFakeProbe, deleteFakeProbes, waitForProbesUpdate } from '../../utils/server.js'; import nockGeoIpProviders from '../../utils/nock-geo-ip.js'; -import { anonymousRateLimiter, authenticatedRateLimiter } from '../../../src/lib/rate-limiter.js'; +import { anonymousRateLimiter, authenticatedRateLimiter } from '../../../src/lib/rate-limiter/rate-limiter-post.js'; import { client } from '../../../src/lib/sql/client.js'; import { GP_TOKENS_TABLE } from '../../../src/lib/http/auth.js'; import { CREDITS_TABLE } from '../../../src/lib/credits.js';