| import { describe, expect, test } from "bun:test" |
| import { sanitizeServerActionRequest } from "../src/lib/server-action" |
|
|
| describe("server action referer", () => { |
| test("preserves same-origin return locations", () => { |
| const request = new Request("https://dev.opencode.ai/_server?id=action", { |
| headers: { referer: "https://dev.opencode.ai/auth?next=%2Fconsole" }, |
| }) |
|
|
| expect(sanitizeServerActionRequest(request)).toBe(request) |
| }) |
|
|
| test("replaces unsafe return locations with the request origin", () => { |
| const referers = ["https://evil.example/phishing-login", "not a url", undefined] |
|
|
| expect( |
| referers.map((referer) => |
| sanitizeServerActionRequest( |
| new Request("https://dev.opencode.ai/_server?id=action", { |
| headers: referer === undefined ? undefined : { referer }, |
| }), |
| ).headers.get("referer"), |
| ), |
| ).toEqual(["https://dev.opencode.ai", "https://dev.opencode.ai", "https://dev.opencode.ai"]) |
| }) |
|
|
| test("does not change other routes", () => { |
| const request = new Request("https://dev.opencode.ai/auth", { |
| headers: { referer: "https://evil.example/phishing-login" }, |
| }) |
|
|
| expect(sanitizeServerActionRequest(request)).toBe(request) |
| }) |
| }) |
|
|