71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
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;
|
|
} |