import { CanActivate, ExecutionContext, Injectable, UnauthorizedException, } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { AdministradorService } from 'src/administrador/administrador.service'; @Injectable() export class JwtValidationGuard implements CanActivate { constructor( private jwtService: JwtService, private administradorService: AdministradorService, ) {} async canActivate(context: ExecutionContext): Promise { const request = context.switchToHttp().getRequest(); const authHeader = request.headers.authorization; if (!authHeader) { throw new UnauthorizedException('Token no proporcionado'); } const token = authHeader.split(' ')[1]; try { const decodedToken = this.jwtService.verify(token, { secret: process.env.JWT_SECRET, }); const administrador = await this.administradorService.getAdminById( decodedToken.sub, ); if (!administrador) { throw new UnauthorizedException('Usuario no encontrado'); } request.user = administrador; } catch (error) { if (error.name === 'TokenExpiredError') { throw new UnauthorizedException( `La sesión ha expirado, inicia sesión nuevamente.`, ); } throw new UnauthorizedException('Token inválido'); } return true; } }