mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-03 19:26:07 +00:00
apply nits for rate limits
This commit is contained in:
@@ -20,7 +20,7 @@ export async function up(knex: Knex): Promise<void> {
|
|||||||
|
|
||||||
await createOnUpdateTrigger(knex, TableName.RateLimit);
|
await createOnUpdateTrigger(knex, TableName.RateLimit);
|
||||||
|
|
||||||
// create rate limit entry
|
// create init rate limit entry with defaults
|
||||||
await knex(TableName.RateLimit).insert({});
|
await knex(TableName.RateLimit).insert({});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,21 @@ import { Redis } from "ioredis";
|
|||||||
import { getConfig } from "@app/lib/config/env";
|
import { getConfig } from "@app/lib/config/env";
|
||||||
import { getRateLimiterConfig } from "@app/services/rate-limit/rate-limit-service";
|
import { getRateLimiterConfig } from "@app/services/rate-limit/rate-limit-service";
|
||||||
|
|
||||||
|
export const globalRateLimiterCfg = (): RateLimitPluginOptions => {
|
||||||
|
const appCfg = getConfig();
|
||||||
|
const redis = appCfg.isRedisConfigured
|
||||||
|
? new Redis(appCfg.REDIS_URL, { connectTimeout: 500, maxRetriesPerRequest: 1 })
|
||||||
|
: null;
|
||||||
|
|
||||||
|
return {
|
||||||
|
timeWindow: 60 * 1000,
|
||||||
|
max: 600,
|
||||||
|
redis,
|
||||||
|
allowList: (req) => req.url === "/healthcheck" || req.url === "/api/status",
|
||||||
|
keyGenerator: (req) => req.realIp
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
// GET endpoints
|
// GET endpoints
|
||||||
export const readLimit: RateLimitOptions = {
|
export const readLimit: RateLimitOptions = {
|
||||||
timeWindow: 60 * 1000,
|
timeWindow: 60 * 1000,
|
||||||
@@ -60,18 +75,3 @@ export const publicEndpointLimit: RateLimitOptions = {
|
|||||||
max: () => getRateLimiterConfig().publicEndpointLimit,
|
max: () => getRateLimiterConfig().publicEndpointLimit,
|
||||||
keyGenerator: (req) => req.realIp
|
keyGenerator: (req) => req.realIp
|
||||||
};
|
};
|
||||||
|
|
||||||
export const globalRateLimiterCfg = (): RateLimitPluginOptions => {
|
|
||||||
const appCfg = getConfig();
|
|
||||||
const redis = appCfg.isRedisConfigured
|
|
||||||
? new Redis(appCfg.REDIS_URL, { connectTimeout: 500, maxRetriesPerRequest: 1 })
|
|
||||||
: null;
|
|
||||||
|
|
||||||
return {
|
|
||||||
timeWindow: 60 * 1000,
|
|
||||||
max: 600,
|
|
||||||
redis,
|
|
||||||
allowList: (req) => req.url === "/healthcheck" || req.url === "/api/status",
|
|
||||||
keyGenerator: (req) => req.realIp
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ export const rateLimitServiceFactory = ({ rateLimitDAL }: TRateLimitServiceFacto
|
|||||||
creationLimit: rateLimit.creationLimit
|
creationLimit: rateLimit.creationLimit
|
||||||
};
|
};
|
||||||
|
|
||||||
logger.info(`Rate limit configuration: %o`, newRateLimitMaxConfiguration);
|
logger.info(`syncRateLimitConfiguration: rate limit configuration: %o`, newRateLimitMaxConfiguration);
|
||||||
Object.freeze(newRateLimitMaxConfiguration);
|
Object.freeze(newRateLimitMaxConfiguration);
|
||||||
rateLimitMaxConfiguration = newRateLimitMaxConfiguration;
|
rateLimitMaxConfiguration = newRateLimitMaxConfiguration;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ export const RateLimitPanel = () => {
|
|||||||
>
|
>
|
||||||
<div className="mb-8 flex flex-col justify-start">
|
<div className="mb-8 flex flex-col justify-start">
|
||||||
<div className="mb-4 text-xl font-semibold text-mineshaft-100">
|
<div className="mb-4 text-xl font-semibold text-mineshaft-100">
|
||||||
Set Rate Limits for your Infisical Instance
|
Configure rate limits
|
||||||
</div>
|
</div>
|
||||||
<Controller
|
<Controller
|
||||||
control={control}
|
control={control}
|
||||||
@@ -95,7 +95,7 @@ export const RateLimitPanel = () => {
|
|||||||
defaultValue={300}
|
defaultValue={300}
|
||||||
render={({ field, fieldState: { error } }) => (
|
render={({ field, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Global Read Requests per minute"
|
label="Global read requests per minute"
|
||||||
className="w-72"
|
className="w-72"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
@@ -114,7 +114,7 @@ export const RateLimitPanel = () => {
|
|||||||
name="writeRateLimit"
|
name="writeRateLimit"
|
||||||
render={({ field, fieldState: { error } }) => (
|
render={({ field, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Global Write Requests per minute"
|
label="Global write requests per minute"
|
||||||
className="w-72"
|
className="w-72"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
@@ -133,7 +133,7 @@ export const RateLimitPanel = () => {
|
|||||||
name="secretsRateLimit"
|
name="secretsRateLimit"
|
||||||
render={({ field, fieldState: { error } }) => (
|
render={({ field, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Secret Requests per minute"
|
label="Secret requests per minute"
|
||||||
className="w-72"
|
className="w-72"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
@@ -152,7 +152,7 @@ export const RateLimitPanel = () => {
|
|||||||
name="authRateLimit"
|
name="authRateLimit"
|
||||||
render={({ field, fieldState: { error } }) => (
|
render={({ field, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Auth Requests per minute"
|
label="Auth requests per minute"
|
||||||
className="w-72"
|
className="w-72"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
@@ -171,7 +171,7 @@ export const RateLimitPanel = () => {
|
|||||||
name="inviteUserRateLimit"
|
name="inviteUserRateLimit"
|
||||||
render={({ field, fieldState: { error } }) => (
|
render={({ field, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Invite User Requests per minute"
|
label="User invitation requests per minute"
|
||||||
className="w-72"
|
className="w-72"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
@@ -190,7 +190,7 @@ export const RateLimitPanel = () => {
|
|||||||
name="mfaRateLimit"
|
name="mfaRateLimit"
|
||||||
render={({ field, fieldState: { error } }) => (
|
render={({ field, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Multi Factor Auth Requests per minute"
|
label="Multi factor auth requests per minute"
|
||||||
className="w-72"
|
className="w-72"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
@@ -209,7 +209,7 @@ export const RateLimitPanel = () => {
|
|||||||
name="creationLimit"
|
name="creationLimit"
|
||||||
render={({ field, fieldState: { error } }) => (
|
render={({ field, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Creation Requests per minute"
|
label="New resource creation requests per minute"
|
||||||
className="w-72"
|
className="w-72"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
@@ -228,7 +228,7 @@ export const RateLimitPanel = () => {
|
|||||||
name="publicEndpointLimit"
|
name="publicEndpointLimit"
|
||||||
render={({ field, fieldState: { error } }) => (
|
render={({ field, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Secret Sharing Requests per minute"
|
label="Secret sharing requests per minute"
|
||||||
className="w-72"
|
className="w-72"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
|
|||||||
Reference in New Issue
Block a user