28 lines
949 B
TypeScript
28 lines
949 B
TypeScript
|
import { sleep } from "$sb/lib/async.ts";
|
||
|
import { MemoryKvPrimitives } from "../plugos/lib/memory_kv_primitives.ts";
|
||
|
import { assertEquals } from "../test_deps.ts";
|
||
|
import { JWTIssuer } from "./crypto.ts";
|
||
|
|
||
|
Deno.test("Test JWT crypto", async () => {
|
||
|
const db = new MemoryKvPrimitives();
|
||
|
const jwt = new JWTIssuer(db);
|
||
|
await jwt.init("test");
|
||
|
// Timeout value is 0 seconds, which means it should expire immediately with a 1 second grace period
|
||
|
const token = await jwt.createJWT({ user: "pete", role: "admin" }, 0);
|
||
|
const verified = await jwt.verifyAndDecodeJWT(token);
|
||
|
assertEquals(verified.user, "pete");
|
||
|
try {
|
||
|
await jwt.verifyAndDecodeJWT(token + "bla");
|
||
|
assertEquals(true, false, "Should have thrown invalid signature");
|
||
|
} catch {
|
||
|
// expected
|
||
|
}
|
||
|
await sleep(1500);
|
||
|
try {
|
||
|
await jwt.verifyAndDecodeJWT(token);
|
||
|
assertEquals(true, false, "Should have thrown a timeout");
|
||
|
} catch {
|
||
|
// expected
|
||
|
}
|
||
|
});
|