mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-30 11:25:04 +00:00
fix(gateway): let POST requests pass through root-mounted Control UI to plugin handlers
The Control UI handler checked HTTP method before path routing, causing all POST requests (including plugin webhook endpoints like /bluebubbles-webhook) to receive 405 Method Not Allowed. Move the method check after path-based exclusions so non-GET/HEAD requests reach plugin HTTP handlers. Closes #31344 Made-with: Cursor
This commit is contained in:
committed by
Peter Steinberger
parent
ea204e65a0
commit
c4711a9b69
@@ -554,6 +554,40 @@ describe("gateway plugin HTTP auth boundary", () => {
|
||||
});
|
||||
});
|
||||
|
||||
test("passes POST webhook routes through root-mounted control ui to plugins", async () => {
|
||||
const handlePluginRequest = vi.fn(async (req: IncomingMessage, res: ServerResponse) => {
|
||||
const pathname = new URL(req.url ?? "/", "http://localhost").pathname;
|
||||
if (req.method !== "POST" || pathname !== "/bluebubbles-webhook") {
|
||||
return false;
|
||||
}
|
||||
res.statusCode = 200;
|
||||
res.setHeader("Content-Type", "text/plain; charset=utf-8");
|
||||
res.end("plugin-webhook");
|
||||
return true;
|
||||
});
|
||||
|
||||
await withGatewayServer({
|
||||
prefix: "openclaw-plugin-http-control-ui-webhook-post-test-",
|
||||
resolvedAuth: AUTH_NONE,
|
||||
overrides: {
|
||||
controlUiEnabled: true,
|
||||
controlUiBasePath: "",
|
||||
controlUiRoot: { kind: "missing" },
|
||||
handlePluginRequest,
|
||||
},
|
||||
run: async (server) => {
|
||||
const response = await sendRequest(server, {
|
||||
path: "/bluebubbles-webhook",
|
||||
method: "POST",
|
||||
});
|
||||
|
||||
expect(response.res.statusCode).toBe(200);
|
||||
expect(response.getBody()).toBe("plugin-webhook");
|
||||
expect(handlePluginRequest).toHaveBeenCalledTimes(1);
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
test("does not let plugin handlers shadow control ui routes", async () => {
|
||||
const handlePluginRequest = vi.fn(async (req: IncomingMessage, res: ServerResponse) => {
|
||||
const pathname = new URL(req.url ?? "/", "http://localhost").pathname;
|
||||
|
||||
Reference in New Issue
Block a user