Add rate limits to sensitve pages

This commit is contained in:
Owen
2026-08-03 14:07:57 -04:00
parent 3ef3ede7df
commit e84da6a8df
+20 -1
View File
@@ -58,6 +58,8 @@ import { build } from "@server/build";
const redirectHttpsMiddlewareName = "redirect-to-https"; const redirectHttpsMiddlewareName = "redirect-to-https";
const redirectToRootMiddlewareName = "redirect-to-root"; const redirectToRootMiddlewareName = "redirect-to-root";
const badgerMiddlewareName = "badger"; const badgerMiddlewareName = "badger";
const landingRateLimitMiddlewareName = "landing-ratelimit";
const bgRateLimitMiddlewareName = "bg-ratelimit";
// Define extended target type with site information // Define extended target type with site information
type TargetWithSite = Target & { type TargetWithSite = Target & {
@@ -432,6 +434,18 @@ export async function getTraefikConfig(
replacement: "${1}://${2}/auth/org", replacement: "${1}://${2}/auth/org",
permanent: false permanent: false
} }
},
[landingRateLimitMiddlewareName]: {
rateLimit: {
average: 3,
burst: 6
}
},
[bgRateLimitMiddlewareName]: {
rateLimit: {
average: 3,
burst: 6
}
} }
} }
} }
@@ -1055,6 +1069,7 @@ export async function getTraefikConfig(
config.getRawConfig().traefik.additional_middlewares || []; config.getRawConfig().traefik.additional_middlewares || [];
const routerMiddlewares = [ const routerMiddlewares = [
badgerMiddlewareName, badgerMiddlewareName,
bgRateLimitMiddlewareName,
...additionalMiddlewares ...additionalMiddlewares
]; ];
@@ -1539,6 +1554,7 @@ export async function getTraefikConfig(
entryPoints: [ entryPoints: [
config.getRawConfig().traefik.https_entrypoint config.getRawConfig().traefik.https_entrypoint
], ],
middlewares: [landingRateLimitMiddlewareName],
service: "landing-service", service: "landing-service",
rule: `Host(\`${fullDomain}\`) && (PathRegexp(\`^/auth/resource/[^/]+$\`) || PathRegexp(\`^/auth/idp/[0-9]+/oidc/callback\`) || PathPrefix(\`/_next\`) || Path(\`/auth/org\`) || PathRegexp(\`^/__nextjs*\`) || Path(\`/favicon.ico\`))`, rule: `Host(\`${fullDomain}\`) && (PathRegexp(\`^/auth/resource/[^/]+$\`) || PathRegexp(\`^/auth/idp/[0-9]+/oidc/callback\`) || PathPrefix(\`/_next\`) || Path(\`/auth/org\`) || PathRegexp(\`^/__nextjs*\`) || Path(\`/favicon.ico\`))`,
priority: 203, priority: 203,
@@ -1557,7 +1573,10 @@ export async function getTraefikConfig(
entryPoints: [ entryPoints: [
config.getRawConfig().traefik.https_entrypoint config.getRawConfig().traefik.https_entrypoint
], ],
middlewares: [redirectToRootMiddlewareName], middlewares: [
landingRateLimitMiddlewareName,
redirectToRootMiddlewareName
],
service: "landing-service", service: "landing-service",
rule: `Host(\`${fullDomain}\`)`, rule: `Host(\`${fullDomain}\`)`,
priority: 202, priority: 202,