feat(dashboard): add JA4 fingerprint and cluster investigation pages
- /ja4/{fingerprint} page: 8 KPIs, timeline, threat pie, IP scores
table, ASN/geo charts, HTTP logs, AI features — full JA4 investigation
- /cluster/{cid} page: 8 KPIs, timeline, threat/JA4/ASN/host charts,
member table with bulk classify — full campaign investigation
- /api/ja4/{fingerprint} and /api/cluster/{cid} API endpoints
- fmtJA4 links now navigate to /ja4/ investigation page
- campaigns.html: 'Ouvrir' button links to /cluster/{cid} full page
- Fix: double-brace {{param}} in non-f-string queries → single {param}
(was causing HTTP 500 on all parameterized ClickHouse queries)
- 50 routes total, all tests pass, 0 JS console errors
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@ -61,3 +61,13 @@ async def network(request: Request):
|
||||
@router.get("/campaigns")
|
||||
async def campaigns_page(request: Request):
|
||||
return templates.TemplateResponse("campaigns.html", _ctx(request, "campaigns"))
|
||||
|
||||
|
||||
@router.get("/ja4/{fingerprint:path}")
|
||||
async def ja4_detail_page(request: Request, fingerprint: str):
|
||||
return templates.TemplateResponse("ja4_detail.html", _ctx(request, "ja4_detail", ja4=fingerprint))
|
||||
|
||||
|
||||
@router.get("/cluster/{cid}")
|
||||
async def cluster_detail_page(request: Request, cid: int):
|
||||
return templates.TemplateResponse("cluster_detail.html", _ctx(request, "cluster_detail", cid=cid))
|
||||
|
||||
Reference in New Issue
Block a user