26 lines
905 B
TypeScript
26 lines
905 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 (error) {
|
|
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);
|