init: pulseform v2 — Express/Prisma/React/SCSS/R3F stack

This commit is contained in:
2026-03-26 02:55:45 +00:00
commit 2d5030c521
31 changed files with 8131 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
import type { Response, NextFunction } from "express";
import jwt from "jsonwebtoken";
import type { AppRequest, AuthPayload } from "../types/context.js";
export function requireAuth(req: AppRequest, res: Response, next: NextFunction): void {
const token = req.cookies?.token as string | undefined;
if (!token) {
res.status(401).json({ message: "Non authentifié." });
return;
}
try {
const secret = process.env.JWT_SECRET as string;
const payload = jwt.verify(token, secret) as AuthPayload;
req.user = payload;
next();
} catch {
res.status(401).json({ message: "Token invalide ou expiré." });
}
}
export function requireRole(...roles: AuthPayload["role"][]) {
return (req: AppRequest, res: Response, next: NextFunction): void => {
if (!req.user || !roles.includes(req.user.role)) {
res.status(403).json({ message: "Accès refusé." });
return;
}
next();
};
}