diff --git a/.env.example b/.env.example index 1e64e077bf..fa432bbca4 100644 --- a/.env.example +++ b/.env.example @@ -141,3 +141,6 @@ ENTERPRISE_LICENSE_KEY= # Send new users to customer.io # CUSTOMER_IO_API_KEY= # CUSTOMER_IO_SITE_ID= + +# Ignore Rate Limiting across the Formbricks app +# RATE_LIMITING_DISABLED=1 \ No newline at end of file diff --git a/apps/formbricks-com/app/docs/self-hosting/external-auth-providers/page.mdx b/apps/formbricks-com/app/docs/self-hosting/external-auth-providers/page.mdx index d87a7030ad..79d7c636ab 100644 --- a/apps/formbricks-com/app/docs/self-hosting/external-auth-providers/page.mdx +++ b/apps/formbricks-com/app/docs/self-hosting/external-auth-providers/page.mdx @@ -94,6 +94,7 @@ These variables can be provided at the runtime i.e. in your docker-compose file. | EMAIL_AUTH_DISABLED | Disables the ability for users to signup or login via email and password if set to `1`. | optional | | | PASSWORD_RESET_DISABLED | Disables password reset functionality if set to `1`. | optional | | | EMAIL_VERIFICATION_DISABLED | Disables email verification if set to `1`. | optional | | +| RATE_LIMITING_DISABLED | Disables rate limiting if set to `1`. | optional | | | INVITE_DISABLED | Disables the ability for invited users to create an account if set to `1`. | optional | | | MAIL_FROM | Email address to send emails from. | optional (required if email services are to be enabled) | | | SMTP_HOST | Host URL of your SMTP server. | optional (required if email services are to be enabled) | | diff --git a/apps/web/middleware.ts b/apps/web/middleware.ts index d754b73bf0..9f45da52a6 100644 --- a/apps/web/middleware.ts +++ b/apps/web/middleware.ts @@ -17,7 +17,7 @@ import { getToken } from "next-auth/jwt"; import { NextResponse } from "next/server"; import type { NextRequest } from "next/server"; -import { WEBAPP_URL } from "@formbricks/lib/constants"; +import { RATE_LIMITING_DISABLED, WEBAPP_URL } from "@formbricks/lib/constants"; export async function middleware(request: NextRequest) { const token = await getToken({ req: request }); @@ -35,7 +35,7 @@ export async function middleware(request: NextRequest) { return NextResponse.redirect(WEBAPP_URL + callbackUrl); } - if (process.env.NODE_ENV !== "production") { + if (process.env.NODE_ENV !== "production" || RATE_LIMITING_DISABLED) { return NextResponse.next(); } diff --git a/packages/lib/constants.ts b/packages/lib/constants.ts index 0698516a85..3898a1b2f8 100644 --- a/packages/lib/constants.ts +++ b/packages/lib/constants.ts @@ -144,3 +144,5 @@ export const DEBUG = process.env.DEBUG === "1"; // Enterprise License constant export const ENTERPRISE_LICENSE_KEY = env.ENTERPRISE_LICENSE_KEY; + +export const RATE_LIMITING_DISABLED = env.RATE_LIMITING_DISABLED === "1"; diff --git a/packages/lib/env.mjs b/packages/lib/env.mjs index 066db718fa..d257599868 100644 --- a/packages/lib/env.mjs +++ b/packages/lib/env.mjs @@ -71,6 +71,7 @@ export const env = createEnv({ DEFAULT_TEAM_ROLE: z.enum(["owner", "admin", "editor", "developer", "viewer"]).optional(), ONBOARDING_DISABLED: z.string().optional(), ENTERPRISE_LICENSE_KEY: z.string().optional(), + RATE_LIMITING_DISABLED: z.enum(["1", "0"]).optional(), }, /* @@ -152,5 +153,6 @@ export const env = createEnv({ DEFAULT_TEAM_ROLE: process.env.DEFAULT_TEAM_ROLE, ONBOARDING_DISABLED: process.env.ONBOARDING_DISABLED, ENTERPRISE_LICENSE_KEY: process.env.ENTERPRISE_LICENSE_KEY, + RATE_LIMITING_DISABLED: process.env.RATE_LIMITING_DISABLED, }, });