2026-07-14 10:31:30 +02:00
|
|
|
//====================================================
|
|
|
|
|
// File: auth.ts
|
|
|
|
|
// File middleware per gestionre dell'autenticazione
|
|
|
|
|
// e le autorizzazini dei dipendenti/referenti academy
|
|
|
|
|
// author: "villari.andrea@libero.it"
|
|
|
|
|
// version: "1.0.0 2026-07-14"
|
|
|
|
|
//====================================================
|
2026-07-12 18:26:28 +02:00
|
|
|
import { getSession } from "@auth/express";
|
|
|
|
|
import type { NextFunction, Request, Response } from "express";
|
|
|
|
|
import { authConfig } from "../auth/config.js";
|
|
|
|
|
import type { Ruolo } from "../types/index.js";
|
|
|
|
|
|
|
|
|
|
export async function requireAuth(req: Request, res: Response, next: NextFunction) {
|
|
|
|
|
const session = await getSession(req, authConfig);
|
|
|
|
|
if (!session?.user?.id) {
|
|
|
|
|
res.status(401).json({ error: "Autenticazione richiesta" });
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
req.user = {
|
|
|
|
|
id: Number(session.user.id),
|
|
|
|
|
email: session.user.email,
|
|
|
|
|
name: session.user.name,
|
|
|
|
|
ruolo: session.user.ruolo,
|
|
|
|
|
};
|
|
|
|
|
next();
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-14 10:31:30 +02:00
|
|
|
export function requireReferenteAcademy(req: Request, res: Response, next: NextFunction) {
|
|
|
|
|
if (req.user?.ruolo !== "Referente Academy") {
|
|
|
|
|
res.status(403).json({ error: "Operazione riservata ai referenti Academy" });
|
2026-07-12 18:26:28 +02:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
next();
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-14 10:31:30 +02:00
|
|
|
/** @deprecated Usare requireReferenteAcademy */
|
|
|
|
|
export const requireAmministratore = requireReferenteAcademy;
|
|
|
|
|
|
2026-07-12 18:26:28 +02:00
|
|
|
declare global {
|
|
|
|
|
namespace Express {
|
|
|
|
|
interface Request {
|
|
|
|
|
user?: {
|
|
|
|
|
id: number;
|
|
|
|
|
email: string;
|
|
|
|
|
name: string;
|
|
|
|
|
ruolo: Ruolo;
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|