HttpOnly Cookies y Filtros Avanzados
1. Seguridad: Cookies HttpOnly Backend (ChatbotApi): AuthController.cs : Ahora setea una cookie HttpOnly, Secure y SameSite=Strict llamada X-Access-Token en lugar de devolver el token en el cuerpo de la respuesta. AuthController.cs : Añadido endpoint logout para invalidar la cookie. Program.cs : Configurado JwtBearer para leer el token desde la cookie si está presente. Frontend (chatbot-admin): apiClient.ts : Configurado con withCredentials: true para enviar cookies automáticamente. Eliminado el interceptor de localStorage. Login.tsx : Eliminado manejo de token manual. Ahora solo comprueba éxito (200 OK). App.tsx : Refactorizado para comprobar autenticación mediante una petición a /api/admin/contexto al inicio, en lugar de leer localStorage. 2. Filtros y Búsqueda Logs ( AdminController.cs & LogsViewer.tsx ): Implementado filtrado en servidor por Fecha Inicio, Fecha Fin y Búsqueda de texto. Frontend actualizado con selectores de fecha y barra de búsqueda. Contexto y Fuentes ( ContextManager.tsx & SourceManager.tsx ): Añadida barra de búsqueda en el cliente para filtrar rápidamente por nombre, valor o descripción.
This commit is contained in:
@@ -76,12 +76,35 @@ namespace ChatbotApi.Controllers
|
||||
}
|
||||
|
||||
[HttpGet("logs")]
|
||||
public async Task<IActionResult> GetConversationLogs()
|
||||
public async Task<IActionResult> GetConversationLogs(
|
||||
[FromQuery] DateTime? startDate,
|
||||
[FromQuery] DateTime? endDate,
|
||||
[FromQuery] string? search)
|
||||
{
|
||||
// Limitamos a 200 para evitar sobrecarga
|
||||
var logs = await _context.ConversacionLogs
|
||||
var query = _context.ConversacionLogs.AsQueryable();
|
||||
|
||||
if (startDate.HasValue)
|
||||
{
|
||||
query = query.Where(l => l.Fecha >= startDate.Value);
|
||||
}
|
||||
|
||||
if (endDate.HasValue)
|
||||
{
|
||||
// Ajustamos al final del día si es necesario, o asumimos fecha exacta
|
||||
query = query.Where(l => l.Fecha <= endDate.Value);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(search))
|
||||
{
|
||||
query = query.Where(l =>
|
||||
l.UsuarioMensaje.Contains(search) ||
|
||||
l.BotRespuesta.Contains(search));
|
||||
}
|
||||
|
||||
// Limitamos a 500 para evitar sobrecarga pero permitiendo ver resultados de búsqueda
|
||||
var logs = await query
|
||||
.OrderByDescending(log => log.Fecha)
|
||||
.Take(200)
|
||||
.Take(500)
|
||||
.ToListAsync();
|
||||
return Ok(logs);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user