Egosurfing: búsqueda real de huella digital con resultados top 5

Backend:
- Nuevo route GET /api/egosearch con rate limit (8 req/min)
- Usa Google Custom Search API si GOOGLE_API_KEY+CSE_ID configurados
- Fallback a instancias públicas SearXNG con JSON API (sin API key)
- Devuelve top 5: title, url, snippet, domain, engine

Frontend egosurfing.html:
- Barra de búsqueda prominente con 5 modos (nombre/email/usuario/teléfono/libre)
- Resultados en cards: dominio, título, snippet, acciones (ver, RTBF, GDPR)
- RTBF link contextual según el dominio del resultado
- Google dorking rápido: plantillas con 1 clic que se lanzan al buscador
- Herramientas complementarias: HIBP, TinEye, WhatsMyName, formularios RTBF

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hacklab 2026-04-07 12:52:35 +02:00
parent 7507b3b8e3
commit f1d80dde13
4 changed files with 728 additions and 392 deletions

View file

@ -6,8 +6,9 @@ const express = require('express');
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const eraseRoute = require('./routes/erase');
const gmailOAuth = require('./routes/gmail_oauth');
const eraseRoute = require('./routes/erase');
const gmailOAuth = require('./routes/gmail_oauth');
const egosearch = require('./routes/egosearch');
const app = express();
@ -30,10 +31,18 @@ const emailLimit = rateLimit({
message: { error: 'Demasiadas solicitudes de envío. Espera antes de reintentar.' }
});
// ── Rate limits específicos ───────────────────────────────────────
const searchLimit = rateLimit({
windowMs: 60 * 1000, // 1 minuto
max: 8,
message: { error: 'Demasiadas búsquedas. Espera un momento.' }
});
// ── Rutas ────────────────────────────────────────────────────────
app.post('/api/erase', emailLimit, eraseRoute);
app.get('/api/gmail/auth', emailLimit, gmailOAuth.authInit);
app.get('/api/gmail/callback', gmailOAuth.authCallback);
app.post('/api/erase', emailLimit, eraseRoute);
app.get('/api/egosearch', searchLimit, egosearch);
app.get('/api/gmail/auth', emailLimit, gmailOAuth.authInit);
app.get('/api/gmail/callback', gmailOAuth.authCallback);
// Health check
app.get('/api/health', (req, res) => res.json({ status: 'ok' }));