import { SignJWT } from "jose"; import { describe, expect, it } from "vitest"; import { sitzungErzeugen, sitzungLesen } from "@/lib/sitzung"; describe("Sitzungscookie", () => { it("liest ein selbst ausgestelltes Token zurück", async () => { const jwt = await sitzungErzeugen({ benutzerId: "b1", herkunft: "passwort" }); expect(await sitzungLesen(jwt)).toMatchObject({ benutzerId: "b1", herkunft: "passwort" }); }); it("verwirft fehlende, verfälschte und fremd signierte Tokens", async () => { expect(await sitzungLesen(undefined)).toBeUndefined(); const jwt = await sitzungErzeugen({ benutzerId: "b1", herkunft: "passwort" }); expect(await sitzungLesen(jwt.slice(0, -2) + "xx")).toBeUndefined(); const fremd = await new SignJWT({ herkunft: "passwort" }) .setProtectedHeader({ alg: "HS256" }) .setSubject("b1") .setIssuer("proxdeploy") .setAudience("proxdeploy-web") .setIssuedAt() .setExpirationTime("1h") .sign(new TextEncoder().encode("ein-ganz-anderes-geheimnis-mit-genug-zeichen")); expect(await sitzungLesen(fremd)).toBeUndefined(); }); it("enthält keine Rolle – die kommt je Anfrage aus der Datenbank", async () => { const jwt = await sitzungErzeugen({ benutzerId: "b1", herkunft: "oidc" }); const inhalt = JSON.parse(Buffer.from(jwt.split(".")[1]!, "base64url").toString()); expect(inhalt).not.toHaveProperty("rolle"); }); });