31 lines
1.0 KiB
TypeScript
31 lines
1.0 KiB
TypeScript
import type { PluginRegistry } from "../../../plugins/registry.js";
|
|
import {
|
|
isProtectedPluginRoutePathFromContext,
|
|
resolvePluginRoutePathContext,
|
|
type PluginRoutePathContext,
|
|
} from "./path-context.js";
|
|
import { findMatchingPluginHttpRoutes } from "./route-match.js";
|
|
|
|
export function matchedPluginRoutesRequireGatewayAuth(
|
|
routes: readonly Pick<NonNullable<PluginRegistry["httpRoutes"]>[number], "auth">[],
|
|
): boolean {
|
|
return routes.some((route) => route.auth === "gateway");
|
|
}
|
|
|
|
export function shouldEnforceGatewayAuthForPluginPath(
|
|
registry: PluginRegistry,
|
|
pathnameOrContext: string | PluginRoutePathContext,
|
|
): boolean {
|
|
const pathContext =
|
|
typeof pathnameOrContext === "string"
|
|
? resolvePluginRoutePathContext(pathnameOrContext)
|
|
: pathnameOrContext;
|
|
if (pathContext.malformedEncoding || pathContext.decodePassLimitReached) {
|
|
return true;
|
|
}
|
|
if (isProtectedPluginRoutePathFromContext(pathContext)) {
|
|
return true;
|
|
}
|
|
return matchedPluginRoutesRequireGatewayAuth(findMatchingPluginHttpRoutes(registry, pathContext));
|
|
}
|