Files
formbricks/apps/web/app/middleware/route-config.ts
T
Matti Nannt bebe29815d feat: domain based access control (#5985)
Co-authored-by: Piyush Gupta <56182734+gupta-piyush19@users.noreply.github.com>
Co-authored-by: Piyush Gupta <piyushguptaa2z123@gmail.com>
Co-authored-by: Dhruwang <dhruwangjariwala18@gmail.com>
Co-authored-by: pandeymangg <anshuman.pandey9999@gmail.com>
2025-06-16 11:37:02 +00:00

55 lines
1.4 KiB
TypeScript

/**
* Routes that should be accessible on the public domain (PUBLIC_URL)
* Uses whitelist approach - only these routes are allowed on public domain
*/
const PUBLIC_ROUTES = {
// Survey routes
SURVEY_ROUTES: [
/^\/s\/[^/]+/, // /s/[surveyId] - survey pages
/^\/c\/[^/]+/, // /c/[jwt] - contact survey pages
],
// API routes accessible from public domain
API_ROUTES: [
/^\/api\/v[12]\/client\//, // /api/v1/client/** and /api/v2/client/**
],
// Share routes
SHARE_ROUTES: [
/^\/share\//, // /share/** - shared survey results
],
} as const;
const COMMON_ROUTES = {
HEALTH_ROUTES: [/^\/health$/], // /health endpoint
PUBLIC_STORAGE_ROUTES: [
/^\/storage\/[^/]+\/public\//, // /storage/[environmentId]/public/** - public storage
],
} as const;
/**
* Get public only route patterns as a flat array
*/
export const getPublicDomainRoutePatterns = (): RegExp[] => {
return Object.values(PUBLIC_ROUTES).flat();
};
/**
* Get all public route patterns as a flat array
*/
export const getAllPubliclyAccessibleRoutePatterns = (): RegExp[] => {
const routes = {
...PUBLIC_ROUTES,
...COMMON_ROUTES,
};
return Object.values(routes).flat();
};
/**
* Check if a URL matches any of the given route patterns
*/
export const matchesAnyPattern = (url: string, patterns: RegExp[]): boolean => {
return patterns.some((pattern) => pattern.test(url));
};