Files

87 lines
2.1 KiB
TypeScript
Raw Permalink Normal View History

2025-09-12 20:40:17 -06:00
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
2026-02-20 14:19:51 -06:00
import { jwtVerify } from "jose";
2025-09-12 20:40:17 -06:00
2026-02-20 14:19:51 -06:00
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) {
2026-01-09 15:29:35 -06:00
const token = request.cookies.get("token")?.value;
const pathname = request.nextUrl.pathname;
2026-02-20 18:58:04 -06:00
if (!token && pathname !== "/") {
const response = NextResponse.redirect(new URL("/", request.url));
response.cookies.delete("user");
response.cookies.delete("token");
return response;
2026-02-20 14:19:51 -06:00
}
2026-01-12 13:57:08 -06:00
if (pathname === "/" && token) {
return NextResponse.redirect(new URL("/Impresiones", request.url));
2026-01-09 15:29:35 -06:00
}
2025-09-12 20:40:17 -06:00
2026-02-20 14:19:51 -06:00
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",
2026-02-23 15:00:49 -06:00
"/ActivosMantenimiento",
2026-02-25 20:22:19 -05:00
"/Periodo",
2026-02-20 14:19:51 -06:00
];
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) {
2026-02-20 18:58:04 -06:00
const response = NextResponse.redirect(new URL("/", request.url));
response.cookies.delete("token");
response.cookies.delete("user");
return response;
2026-02-20 14:19:51 -06:00
}
2025-09-12 20:40:17 -06:00
}
return NextResponse.next();
}
export const config = {
2026-02-20 14:19:51 -06:00
matcher: [
"/",
2026-01-09 15:15:55 -06:00
"/Reportes",
2026-02-25 20:22:19 -05:00
"/Periodo",
2026-01-09 15:15:55 -06:00
"/Monitor",
"/QuitarSancion",
"/Programas",
"/Mensajes",
"/Inscritos",
2026-02-12 18:53:29 -06:00
"/Inscripcion",
2026-01-09 15:15:55 -06:00
"/InformacionEquipo",
"/Impresiones",
"/CambiarPass",
"/BitacoraSanciones",
"/AsignacionMesas",
"/AsignacionEquipo",
"/Alta",
"/AgregarTiempo",
"/ActivosMantenimiento",
],
2026-02-20 14:19:51 -06:00
};