mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-15 01:52:22 +00:00
feat: custom rate limit for self hosters
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
import { TDbClient } from "@app/db";
|
||||
import { TableName } from "@app/db/schemas";
|
||||
import { ormify } from "@app/lib/knex";
|
||||
|
||||
export type TRateLimitDALFactory = ReturnType<typeof rateLimitDALFactory>;
|
||||
|
||||
export const rateLimitDALFactory = (db: TDbClient) => ormify(db, TableName.RateLimit, {});
|
||||
@@ -0,0 +1,44 @@
|
||||
import { BadRequestError } from "@app/lib/errors";
|
||||
|
||||
import { TRateLimitDALFactory } from "./rate-limit-dal";
|
||||
import { TRateLimit, TRateLimitUpdateDTO } from "./rate-limit-types";
|
||||
|
||||
type TRateLimitServiceFactoryDep = {
|
||||
rateLimitDAL: TRateLimitDALFactory;
|
||||
};
|
||||
|
||||
export type TRateLimitServiceFactory = ReturnType<typeof rateLimitServiceFactory>;
|
||||
|
||||
export const rateLimitServiceFactory = ({ rateLimitDAL }: TRateLimitServiceFactoryDep) => {
|
||||
const initRateLimits = async (): Promise<TRateLimit> => {
|
||||
const rateLimit = await rateLimitDAL.create({});
|
||||
return rateLimit;
|
||||
};
|
||||
|
||||
const getRateLimits = async (): Promise<TRateLimit> => {
|
||||
let rateLimit = (await rateLimitDAL.find({}))[0];
|
||||
if (!rateLimit) {
|
||||
rateLimit = await initRateLimits();
|
||||
}
|
||||
return rateLimit;
|
||||
};
|
||||
|
||||
const updateRateLimit = async (updates: TRateLimitUpdateDTO): Promise<TRateLimit> => {
|
||||
const rateLimit = await rateLimitDAL.findOne({});
|
||||
if (!rateLimit) throw new BadRequestError({ name: "Rate Limit Update", message: "Rate Limit does not exist yet" });
|
||||
|
||||
const updateData: Record<string, number> = {};
|
||||
for (const [key, value] of Object.entries(updates)) {
|
||||
updateData[key] = value;
|
||||
}
|
||||
|
||||
const updatedRateLimit = await rateLimitDAL.updateById(rateLimit.id, updateData);
|
||||
return updatedRateLimit;
|
||||
};
|
||||
|
||||
return {
|
||||
initRateLimits,
|
||||
getRateLimits,
|
||||
updateRateLimit
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
export type TRateLimitUpdateDTO = {
|
||||
readRateLimit: number;
|
||||
writeRateLimit: number;
|
||||
secretsRateLimit: number;
|
||||
authRateLimit: number;
|
||||
inviteUserRateLimit: number;
|
||||
mfaRateLimit: number;
|
||||
creationLimit: number;
|
||||
publicEndpointLimit: number;
|
||||
};
|
||||
|
||||
export type TRateLimit = {
|
||||
id: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
} & TRateLimitUpdateDTO;
|
||||
Reference in New Issue
Block a user