import jwt from 'jsonwebtoken'; /** * Vygeneruje a vrátí podepsaný JWT token pro daný login. * * @param login přihlašovací jméno uživatele * @param trusted příznak, zda se jedná o ověřeného uživatele * @returns JWT token */ export function generateToken(login?: string, trusted?: boolean): string { if (!process.env.JWT_SECRET) { throw Error("Není vyplněna proměnná prostředí JWT_SECRET"); } if (process.env.JWT_SECRET.length < 32) { throw Error("Proměnná prostředí JWT_SECRET musí být minimálně 32 znaků"); } if (!login || login.trim().length === 0) { throw Error("Nebyl předán login"); } const payload = { login, trusted: trusted || false, logoutUrl: process.env.LOGOUT_URL }; return jwt.sign(payload, process.env.JWT_SECRET); } /** * Vrátí true, pokud je předaný JWT token platný. * * @param token JWT token */ export function verify(token: string): boolean { if (!process.env.JWT_SECRET) { throw Error("Není vyplněna proměnná prostředí JWT_SECRET"); } try { jwt.verify(token, process.env.JWT_SECRET); return true; } catch (err) { return false; } } /** * Vrátí login z daného JWT tokenu, pokud je token platný. * * @param token JWT token */ export function getLogin(token?: string): string { if (!process.env.JWT_SECRET) { throw Error("Není vyplněna proměnná prostředí JWT_SECRET"); } if (!token) { throw Error("Nebyl předán token"); } const payload: any = jwt.verify(token, process.env.JWT_SECRET); return payload.login; } /** * Vrátí zda je uživatel používající daný token ověřený, pokud je token platný. * * @param token JWT token */ export function getTrusted(token?: string): boolean { if (!process.env.JWT_SECRET) { throw Error("Není vyplněna proměnná prostředí JWT_SECRET"); } if (!token) { throw Error("Nebyl předán token"); } const payload: any = jwt.verify(token, process.env.JWT_SECRET); return payload.trusted || false; }