84 lines
2.0 KiB
TypeScript
84 lines
2.0 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import type { NextRequest } from "next/server";
|
|
import { jwtVerify } from "jose";
|
|
|
|
if (!process.env.JWT_SECRET) {
|
|
console.error("coloca el JWT_SECRET en el .env")
|
|
}
|
|
|
|
const secret = new TextEncoder().encode(process.env.JWT_SECRET);
|
|
|
|
export async function proxy(request: NextRequest) {
|
|
const token = request.cookies.get("token")?.value;
|
|
const pathname = request.nextUrl.pathname;
|
|
|
|
if (!token && pathname !== "/") {
|
|
const response = NextResponse.redirect(new URL("/", request.url));
|
|
|
|
response.cookies.delete("user");
|
|
response.cookies.delete("token");
|
|
return response;
|
|
}
|
|
|
|
if (pathname === "/" && token) {
|
|
return NextResponse.redirect(new URL("/Impresiones", request.url));
|
|
}
|
|
|
|
if (token) {
|
|
try {
|
|
const { payload } = await jwtVerify(token, secret);
|
|
|
|
const role = payload.role as number;
|
|
|
|
const onlyImpresiones = ["/Impresiones"];
|
|
|
|
const limitedRoutes = [
|
|
"/Inscripcion",
|
|
"/Alta",
|
|
"/AgregarTiempo",
|
|
"/Impresiones",
|
|
"/AsignacionMesas",
|
|
"/AsignacionEquipo",
|
|
"/Monitor",
|
|
];
|
|
|
|
if (role === 5 && !onlyImpresiones.includes(pathname)) {
|
|
return NextResponse.redirect(new URL("/Impresiones", request.url));
|
|
}
|
|
|
|
if ((role === 2 || role === 3) && !limitedRoutes.includes(pathname)) {
|
|
return NextResponse.redirect(new URL("/Impresiones", request.url));
|
|
}
|
|
|
|
} catch (error) {
|
|
const response = NextResponse.redirect(new URL("/", request.url));
|
|
response.cookies.delete("token");
|
|
response.cookies.delete("user");
|
|
return response;
|
|
}
|
|
}
|
|
|
|
return NextResponse.next();
|
|
}
|
|
|
|
export const config = {
|
|
matcher: [
|
|
"/",
|
|
"/Reportes",
|
|
"/Monitor",
|
|
"/QuitarSancion",
|
|
"/Programas",
|
|
"/Mensajes",
|
|
"/Inscritos",
|
|
"/Inscripcion",
|
|
"/InformacionEquipo",
|
|
"/Impresiones",
|
|
"/CambiarPass",
|
|
"/BitacoraSanciones",
|
|
"/AsignacionMesas",
|
|
"/AsignacionEquipo",
|
|
"/Alta",
|
|
"/AgregarTiempo",
|
|
"/ActivosMantenimiento",
|
|
],
|
|
}; |