diff --git a/src/gateway/origin-check.test.ts b/src/gateway/origin-check.test.ts index e267afbf0..e0dd33a80 100644 --- a/src/gateway/origin-check.test.ts +++ b/src/gateway/origin-check.test.ts @@ -36,6 +36,15 @@ describe("checkBrowserOrigin", () => { expect(result.ok).toBe(true); }); + it("accepts wildcard allowedOrigins", () => { + const result = checkBrowserOrigin({ + requestHost: "gateway.example.com:18789", + origin: "https://any-origin.example.com", + allowedOrigins: ["*"], + }); + expect(result.ok).toBe(true); + }); + it("rejects missing origin", () => { const result = checkBrowserOrigin({ requestHost: "gateway.example.com:18789", diff --git a/src/gateway/origin-check.ts b/src/gateway/origin-check.ts index 7ba207416..0900ed678 100644 --- a/src/gateway/origin-check.ts +++ b/src/gateway/origin-check.ts @@ -32,10 +32,10 @@ export function checkBrowserOrigin(params: { return { ok: false, reason: "origin missing or invalid" }; } - const allowlist = (params.allowedOrigins ?? []) - .map((value) => value.trim().toLowerCase()) - .filter(Boolean); - if (allowlist.includes(parsedOrigin.origin)) { + const allowlist = new Set( + (params.allowedOrigins ?? []).map((value) => value.trim().toLowerCase()).filter(Boolean), + ); + if (allowlist.has("*") || allowlist.has(parsedOrigin.origin)) { return { ok: true }; }