misc: addressed review comments

This commit is contained in:
Sheen Capadngan
2024-06-13 15:42:15 +08:00
parent e6ed1231cd
commit 9e24050f17
8 changed files with 287 additions and 273 deletions
+10 -23
View File
@@ -1,10 +1,8 @@
import type { RateLimitOptions, RateLimitPluginOptions } from "@fastify/rate-limit";
import { Redis } from "ioredis";
import { Knex } from "knex";
import { TRateLimit } from "@app/db/schemas";
import { getConfig } from "@app/lib/config/env";
import { rateLimitDALFactory } from "@app/services/rate-limit/rate-limit-dal";
import { rateLimitServiceFactory } from "@app/services/rate-limit/rate-limit-service";
// GET endpoints
export const readLimit: RateLimitOptions = {
@@ -63,31 +61,20 @@ export const publicEndpointLimit: RateLimitOptions = {
keyGenerator: (req) => req.realIp
};
async function fetchRateLimitsFromDb(db: Knex) {
try {
const rateLimitDAL = rateLimitDALFactory(db);
const rateLimits = await rateLimitServiceFactory({ rateLimitDAL }).getRateLimits();
readLimit.max = rateLimits.readRateLimit;
publicEndpointLimit.max = rateLimits.publicEndpointLimit;
writeLimit.max = rateLimits.writeRateLimit;
secretsLimit.max = rateLimits.secretsRateLimit;
authRateLimit.max = rateLimits.authRateLimit;
inviteUserRateLimit.max = rateLimits.inviteUserRateLimit;
mfaRateLimit.max = rateLimits.mfaRateLimit;
creationLimit.max = rateLimits.creationLimit;
} catch (error) {
console.error("Error fetching rate limits:", error);
}
}
export const globalRateLimiterCfg = async (db: Knex): Promise<RateLimitPluginOptions> => {
export const globalRateLimiterCfg = async (rateLimits: TRateLimit): Promise<RateLimitPluginOptions> => {
const appCfg = getConfig();
const redis = appCfg.isRedisConfigured
? new Redis(appCfg.REDIS_URL, { connectTimeout: 500, maxRetriesPerRequest: 1 })
: null;
await fetchRateLimitsFromDb(db);
readLimit.max = rateLimits.readRateLimit;
publicEndpointLimit.max = rateLimits.publicEndpointLimit;
writeLimit.max = rateLimits.writeRateLimit;
secretsLimit.max = rateLimits.secretsRateLimit;
authRateLimit.max = rateLimits.authRateLimit;
inviteUserRateLimit.max = rateLimits.inviteUserRateLimit;
mfaRateLimit.max = rateLimits.mfaRateLimit;
creationLimit.max = rateLimits.creationLimit;
return {
timeWindow: 60 * 1000,