32 lines
798 B
TypeScript
32 lines
798 B
TypeScript
import { SignJWT, jwtVerify } from "jose";
|
|
|
|
const SESSION_COOKIE_NAME = "fpt_session";
|
|
const SESSION_DURATION = "30d";
|
|
|
|
function getSecretKey() {
|
|
const secret = process.env.SESSION_SECRET;
|
|
if (!secret) {
|
|
throw new Error("SESSION_SECRET ist nicht gesetzt.");
|
|
}
|
|
return new TextEncoder().encode(secret);
|
|
}
|
|
|
|
export async function createSessionToken(): Promise<string> {
|
|
return new SignJWT({ auth: true })
|
|
.setProtectedHeader({ alg: "HS256" })
|
|
.setIssuedAt()
|
|
.setExpirationTime(SESSION_DURATION)
|
|
.sign(getSecretKey());
|
|
}
|
|
|
|
export async function verifySessionToken(token: string): Promise<boolean> {
|
|
try {
|
|
const { payload } = await jwtVerify(token, getSecretKey());
|
|
return payload.auth === true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export { SESSION_COOKIE_NAME };
|