mirror of
https://github.com/anomalyco/opencode.git
synced 2026-11-08 09:37:47 +03:00
62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
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("keeps the method and body when it replaces the referer", async () => {
|
|
const sanitized = sanitizeServerActionRequest(
|
|
new Request("https://dev.opencode.ai/_server?id=action", {
|
|
method: "POST",
|
|
headers: { referer: "https://evil.example/phishing-login" },
|
|
body: "[1]",
|
|
}),
|
|
)
|
|
|
|
expect([sanitized.method, sanitized.headers.get("referer"), await sanitized.text()]).toEqual([
|
|
"POST",
|
|
"https://dev.opencode.ai",
|
|
"[1]",
|
|
])
|
|
})
|
|
|
|
test("drops the body of a GET it rebuilds", () => {
|
|
const request = {
|
|
url: "https://dev.opencode.ai/_server?id=action",
|
|
method: "GET",
|
|
headers: new Headers({ referer: "https://evil.example/phishing-login" }),
|
|
body: new Response("[1]").body,
|
|
} as unknown as Request
|
|
|
|
expect(sanitizeServerActionRequest(request).body).toBeNull()
|
|
})
|
|
|
|
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)
|
|
})
|
|
})
|