mirror of
https://github.com/BigBodyCobain/Shadowbroker.git
synced 2026-06-09 07:43:59 +02:00
af9b3d08cc
Add Telegram OSINT with hourly incremental t.me scraping, metro geocoding separate from news centroids, threat-intercept popup UI with inline media, and HTML markers above alert boxes so pins stay clickable. Expose GFW_API_TOKEN in onboarding and Settings Maritime; harden GFW/CCTV/geo fetchers. Port Osiris- derived recon, SCM, entity graph, malware/cyber feeds, sanctions, and submarine cable layers with tests and documentation. Co-authored-by: Cursor <cursoragent@cursor.com>
31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
"""Entity graph expansion (intel layer)."""
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Query, Request
|
|
|
|
from auth import require_local_operator
|
|
from limiter import limiter
|
|
from services.osint_intel.resolve import resolve_entity
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/api/entity/expand")
|
|
@limiter.limit("30/minute")
|
|
async def entity_expand(
|
|
request: Request,
|
|
_: None = Depends(require_local_operator),
|
|
type: str = Query(..., min_length=3, max_length=32),
|
|
id: str = Query(..., min_length=2, max_length=200),
|
|
registration: str | None = Query(default=None, max_length=32),
|
|
model: str | None = Query(default=None, max_length=64),
|
|
icao24: str | None = Query(default=None, max_length=16),
|
|
) -> dict:
|
|
props = {"label": id, "registration": registration, "model": model, "icao24": icao24}
|
|
try:
|
|
return resolve_entity(type, id, props)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
except Exception as exc:
|
|
raise HTTPException(status_code=502, detail="Intelligence layer unavailable") from exc
|