arcos-backend/app/Http/Middleware/ArcoTokenMiddleware.php
Juan Felipe Zapata Moreno 50e028827f wip: encriptacion
2026-01-07 17:25:16 -06:00

61 lines
1.8 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Models\Arco;
use Closure;
use Illuminate\Http\Request;
use Notsoweb\ApiResponse\Enums\ApiResponse;
use Symfony\Component\HttpFoundation\Response;
class ArcoTokenMiddleware
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next): Response
{
$tokenPlano = $request->bearerToken();
if (!$tokenPlano) {
return ApiResponse::UNAUTHORIZED->response([
'message' => 'Token de arco no proporcionado'
]);
}
// Buscar arco por token plano (el método desencripta internamente)
$arco = Arco::buscarPorToken($tokenPlano);
if (!$arco) {
return ApiResponse::UNAUTHORIZED->response([
'message' => 'Token de arco inválido'
]);
}
if (!$arco->activo) {
return ApiResponse::FORBIDDEN->response([
'message' => 'Arco desactivado'
]);
}
// Validación de IP deshabilitada para desarrollo
// TODO: Habilitar en producción o configurar nginx para enviar X-Forwarded-For
// $requestIp = $request->ip();
// if ($arco->ip_address !== $requestIp) {
// return ApiResponse::FORBIDDEN->response([
// 'message' => 'Token no autorizado para esta IP',
// 'detail' => [
// 'ip_registrada_arco' => $arco->ip_address,
// 'ip_del_request' => $requestIp,
// 'arco_nombre' => $arco->nombre
// ]
// ]);
// }
// Agregar el arco al request para uso posterior
$request->merge(['arco_autenticado' => $arco]);
return $next($request);
}
}