From 2f58647033ecaf0dbbc99bdd2a448d453fa9f45c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 13 Mar 2026 17:52:40 +0000 Subject: [PATCH] refactor: share plugin route auth test harness --- src/gateway/server/plugins-http.test.ts | 67 ++++++++++++------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/src/gateway/server/plugins-http.test.ts b/src/gateway/server/plugins-http.test.ts index 476f76f8850..e5062686246 100644 --- a/src/gateway/server/plugins-http.test.ts +++ b/src/gateway/server/plugins-http.test.ts @@ -86,6 +86,31 @@ async function createSubagentRuntime(): Promise { return call.runtimeOptions.subagent; } +function createSecurePluginRouteHandler(params: { + exactPluginHandler: () => boolean | Promise; + prefixGatewayHandler: () => boolean | Promise; +}) { + return createGatewayPluginRequestHandler({ + registry: createTestRegistry({ + httpRoutes: [ + createRoute({ + path: "/plugin/secure/report", + match: "exact", + auth: "plugin", + handler: params.exactPluginHandler, + }), + createRoute({ + path: "/plugin/secure", + match: "prefix", + auth: "gateway", + handler: params.prefixGatewayHandler, + }), + ], + }), + log: createPluginLog(), + }); +} + describe("createGatewayPluginRequestHandler", () => { it("caps unauthenticated plugin routes to non-admin subagent scopes", async () => { loadOpenClawPlugins.mockReset(); @@ -209,24 +234,9 @@ describe("createGatewayPluginRequestHandler", () => { it("fails closed when a matched gateway route reaches dispatch without auth", async () => { const exactPluginHandler = vi.fn(async () => false); const prefixGatewayHandler = vi.fn(async () => true); - const handler = createGatewayPluginRequestHandler({ - registry: createTestRegistry({ - httpRoutes: [ - createRoute({ - path: "/plugin/secure/report", - match: "exact", - auth: "plugin", - handler: exactPluginHandler, - }), - createRoute({ - path: "/plugin/secure", - match: "prefix", - auth: "gateway", - handler: prefixGatewayHandler, - }), - ], - }), - log: createPluginLog(), + const handler = createSecurePluginRouteHandler({ + exactPluginHandler, + prefixGatewayHandler, }); const { res } = makeMockHttpResponse(); @@ -246,24 +256,9 @@ describe("createGatewayPluginRequestHandler", () => { it("allows gateway route fallthrough only after gateway auth succeeds", async () => { const exactPluginHandler = vi.fn(async () => false); const prefixGatewayHandler = vi.fn(async () => true); - const handler = createGatewayPluginRequestHandler({ - registry: createTestRegistry({ - httpRoutes: [ - createRoute({ - path: "/plugin/secure/report", - match: "exact", - auth: "plugin", - handler: exactPluginHandler, - }), - createRoute({ - path: "/plugin/secure", - match: "prefix", - auth: "gateway", - handler: prefixGatewayHandler, - }), - ], - }), - log: createPluginLog(), + const handler = createSecurePluginRouteHandler({ + exactPluginHandler, + prefixGatewayHandler, }); const { res } = makeMockHttpResponse();