46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { liveLabAvailability } from "../../src/webauthn/live";
|
|
|
|
describe("live WebAuthn origin isolation", () => {
|
|
afterEach(() => vi.unstubAllGlobals());
|
|
|
|
it("rejects the shared Portal origin", () => {
|
|
vi.stubGlobal("isSecureContext", true);
|
|
expect(
|
|
liveLabAvailability({
|
|
hostname: "toolbox.add-ideas.de",
|
|
origin: "https://toolbox.add-ideas.de",
|
|
}),
|
|
).toMatchObject({ available: false, rpId: "toolbox.add-ideas.de" });
|
|
});
|
|
|
|
it("accepts only the dedicated production host and local development", () => {
|
|
vi.stubGlobal("isSecureContext", true);
|
|
expect(
|
|
liveLabAvailability({
|
|
hostname: "auth.toolbox.add-ideas.de",
|
|
origin: "https://auth.toolbox.add-ideas.de",
|
|
}).available,
|
|
).toBe(true);
|
|
expect(
|
|
liveLabAvailability({
|
|
hostname: "127.0.0.1",
|
|
origin: "http://127.0.0.1:4173",
|
|
}).available,
|
|
).toBe(true);
|
|
});
|
|
|
|
it("requires a secure context on every host", () => {
|
|
vi.stubGlobal("isSecureContext", false);
|
|
expect(
|
|
liveLabAvailability({
|
|
hostname: "auth.toolbox.add-ideas.de",
|
|
origin: "http://auth.toolbox.add-ideas.de",
|
|
}),
|
|
).toMatchObject({
|
|
available: false,
|
|
reason: "WebAuthn requires a secure context.",
|
|
});
|
|
});
|
|
});
|