Explorer
KNOW-PAT-165

OSINT — Routes lookup par service (DNS, HIBP, ARCEP…)

Domaine
cybersecu
Type
pattern
Priorité
P2

Parent : [[INDEX-CYBERSECU]]

Routes lookup OSINT par service

Problème

Un monolithe /api/osint devient ingérable avec 12+ sources (DNS, HIBP, ARCEP…).

Solution

Pattern App Router :

src/app/api/lookup/<service>/route.ts

Chaque route : GET + query params + NextResponse.json. Client (SearchHub) appelle par type de node.

Services exemple : dns, hibp, arcep, etc.

Avantages

  • Isolation erreurs par service
  • Rate limit / clés API par fichier
  • Test unitaire par lookup

Implémentation

// src/app/api/lookup/[service]/route.ts
export async function GET(req: NextRequest) {
  const service = req.nextUrl.pathname.split('/').pop();
  const query = req.nextUrl.searchParams.get('q');

  if (!query) return NextResponse.json(
    { error: 'Missing query param q' }, { status: 400 }
  );

  try {
    const result = await lookupRegistry[service](query);
    return NextResponse.json({ data: result });
  } catch (err) {
    return NextResponse.json(
      { error: { code: 'LOOKUP_FAILED', message: err.message } },
      { status: 502 }
    );
  }
}

// Registry pattern — chaque service s'enregistre
const lookupRegistry: Record<string, (q: string) => Promise<LookupResult>> = {
  dns: lookupDNS,
  hibp: lookupHIBP,
  arcep: lookupARCEP,
};

Services typiques

Service Input Output
dns domain A, AAAA, MX, TXT, NS records
hibp email Breaches list
arcep phone Operator, allocation date
shodan IP Open ports, services
whois domain Registrar, dates

Quand l'utiliser

Projet OSINT avec 3+ sources de lookup. En-dessous de 3, un seul endpoint suffit.

Source projet

  • osint-investigation-board/src/app/api/lookup/dns/route.ts
  • osint-investigation-board/src/app/api/lookup/hibp/route.ts
  • osint-investigation-board/src/app/api/lookup/arcep/route.ts

Liens connexes

  • [[KNOW-PAT-164-osint-cascade-graph-real-data|KNOW-PAT-164]]
  • [[KNOW-PAT-228]] — API REST Design (conventions routes)