misc: added license check in backend for custom rate limits

This commit is contained in:
Sheen Capadngan
2024-06-14 18:32:50 +08:00
parent dd6fb4232e
commit 3dd024c90a
4 changed files with 22 additions and 9 deletions
@@ -575,6 +575,9 @@ export const licenseServiceFactory = ({
getInstanceType() { getInstanceType() {
return instanceType; return instanceType;
}, },
get onPremFeatures() {
return onPremFeatures;
},
getPlan, getPlan,
updateSubscriptionOrgMemberCount, updateSubscriptionOrgMemberCount,
refreshPlan, refreshPlan,
@@ -2,6 +2,7 @@ import { CronJob } from "cron";
import { logger } from "@app/lib/logger"; import { logger } from "@app/lib/logger";
import { TLicenseServiceFactory } from "../license/license-service";
import { TRateLimitDALFactory } from "./rate-limit-dal"; import { TRateLimitDALFactory } from "./rate-limit-dal";
import { TRateLimit, TRateLimitUpdateDTO } from "./rate-limit-types"; import { TRateLimit, TRateLimitUpdateDTO } from "./rate-limit-types";
@@ -24,11 +25,12 @@ export const getRateLimiterConfig = () => {
type TRateLimitServiceFactoryDep = { type TRateLimitServiceFactoryDep = {
rateLimitDAL: TRateLimitDALFactory; rateLimitDAL: TRateLimitDALFactory;
licenseService: Pick<TLicenseServiceFactory, "onPremFeatures">;
}; };
export type TRateLimitServiceFactory = ReturnType<typeof rateLimitServiceFactory>; export type TRateLimitServiceFactory = ReturnType<typeof rateLimitServiceFactory>;
export const rateLimitServiceFactory = ({ rateLimitDAL }: TRateLimitServiceFactoryDep) => { export const rateLimitServiceFactory = ({ rateLimitDAL, licenseService }: TRateLimitServiceFactoryDep) => {
const DEFAULT_RATE_LIMIT_CONFIG_ID = "00000000-0000-0000-0000-000000000000"; const DEFAULT_RATE_LIMIT_CONFIG_ID = "00000000-0000-0000-0000-000000000000";
const getRateLimits = async (): Promise<TRateLimit | undefined> => { const getRateLimits = async (): Promise<TRateLimit | undefined> => {
@@ -78,7 +80,16 @@ export const rateLimitServiceFactory = ({ rateLimitDAL }: TRateLimitServiceFacto
} }
}; };
const initializeBackgroundSync = () => { const initializeBackgroundSync = async () => {
if (!licenseService.onPremFeatures.customRateLimits) {
logger.info("Current license does not support custom rate limit configuration");
return;
}
logger.info("Setting up backround sync process for rate limits");
// initial sync upon startup
await syncRateLimitConfiguration();
// sync rate limits configuration every 10 minutes // sync rate limits configuration every 10 minutes
const job = new CronJob("*/10 * * * *", syncRateLimitConfiguration); const job = new CronJob("*/10 * * * *", syncRateLimitConfiguration);
job.start(); job.start();
-5
View File
@@ -14,8 +14,6 @@ import fasitfy from "fastify";
import { Knex } from "knex"; import { Knex } from "knex";
import { Logger } from "pino"; import { Logger } from "pino";
import { rateLimitDALFactory } from "@app/ee/services/rate-limit/rate-limit-dal";
import { rateLimitServiceFactory } from "@app/ee/services/rate-limit/rate-limit-service";
import { TKeyStoreFactory } from "@app/keystore/keystore"; import { TKeyStoreFactory } from "@app/keystore/keystore";
import { getConfig } from "@app/lib/config/env"; import { getConfig } from "@app/lib/config/env";
import { TQueueServiceFactory } from "@app/queue"; import { TQueueServiceFactory } from "@app/queue";
@@ -71,9 +69,6 @@ export const main = async ({ db, smtp, logger, queue, keyStore }: TMain) => {
// Rate limiters and security headers // Rate limiters and security headers
if (appCfg.isProductionMode) { if (appCfg.isProductionMode) {
const rateLimitDAL = rateLimitDALFactory(db);
const rateLimitService = rateLimitServiceFactory({ rateLimitDAL });
await rateLimitService.syncRateLimitConfiguration();
await server.register<FastifyRateLimitOptions>(ratelimiter, globalRateLimiterCfg()); await server.register<FastifyRateLimitOptions>(ratelimiter, globalRateLimiterCfg());
} }
+6 -2
View File
@@ -449,7 +449,8 @@ export const registerRoutes = async (
keyStore keyStore
}); });
const rateLimitService = rateLimitServiceFactory({ const rateLimitService = rateLimitServiceFactory({
rateLimitDAL rateLimitDAL,
licenseService
}); });
const apiKeyService = apiKeyServiceFactory({ apiKeyDAL, userDAL }); const apiKeyService = apiKeyServiceFactory({ apiKeyDAL, userDAL });
@@ -910,7 +911,10 @@ export const registerRoutes = async (
const cronJobs: CronJob[] = []; const cronJobs: CronJob[] = [];
if (appCfg.isProductionMode) { if (appCfg.isProductionMode) {
cronJobs.push(rateLimitService.initializeBackgroundSync()); const rateLimitJob = await rateLimitService.initializeBackgroundSync();
if (rateLimitJob) {
cronJobs.push(rateLimitJob);
}
} }
server.decorate<FastifyZodProvider["store"]>("store", { server.decorate<FastifyZodProvider["store"]>("store", {