battlelog/lib/jwt.ts

26 lines
901 B
TypeScript

import { create, verify, decode } from "https://deno.land/x/djwt@v2.8/mod.ts";
let key: CryptoKey;
try {
const storedKey = Deno.readTextFileSync('./key.txt');
key = await crypto.subtle.importKey('jwk', JSON.parse(storedKey), {name: 'HMAC', hash: 'SHA-512'}, true, ['sign', 'verify']);
} catch (_) {
key = await crypto.subtle.generateKey(
{ name: "HMAC", hash: {name: 'SHA-512'} },
true,
["sign", "verify"],
);
const keyToStore = await crypto.subtle.exportKey('jwk', key);
Deno.writeTextFileSync('./key.txt', JSON.stringify(keyToStore));
}
// console.log(key);
// Todo give this the user type
export const createUserSessionToken = async (user: any) => await create({ alg: 'HS512', typ: 'JWT' }, user, key);
export const verifyUserSessionToken = async (jwt: string) => await verify(jwt, key);
export const decodeUserSessionToken = async (jwt: string) => await decode(jwt);