Add recon deploy action matrix and playbook wizard API.

Extend deploy-kit with pinned-build campaign attribution, SSRF erasure shards, and one-click action matrix; add playbook endpoint branching by target profile.
This commit is contained in:
AetherForge
2026-06-07 12:15:04 -07:00
parent 825bf81131
commit 06486b9bcb
4 changed files with 340 additions and 92 deletions

View File

@@ -500,7 +500,7 @@ func NewRouter(database *db.Database, wsHub *WSHub, configHandler *ConfigHandler
version = serverVersion[0]
}
reconHandler := NewReconHandler(database, wsHub, publicURLOverride)
reconHandler := NewReconHandler(database, wsHub)
r := chi.NewRouter()
@@ -556,8 +556,6 @@ func NewRouter(database *db.Database, wsHub *WSHub, configHandler *ConfigHandler
r.Post("/recon/scan", reconHandler.Scan)
r.Post("/recon/relay-scan", reconHandler.RelayScan)
subnetDiscoveryHandler := NewSubnetDiscoveryHandler(database, wsHub)
r.Get("/recon/discovered-hosts", subnetDiscoveryHandler.GetDiscoveredHosts)
// Agents
r.Get("/agents", h.ListAgents)
@@ -674,6 +672,7 @@ func NewRouter(database *db.Database, wsHub *WSHub, configHandler *ConfigHandler
r.Get("/emberwake/campaigns", spreadHandler.GetCampaigns)
r.Get("/emberwake/war-room", spreadHandler.GetWarRoom)
r.Get("/recon/deploy-kit", spreadHandler.GetDeployKit)
r.Get("/recon/playbook", spreadHandler.GetReconPlaybook)
r.Get("/spread/credential-graph", spreadHandler.GetCredGraph)
r.Get("/spread/service-graph", spreadHandler.GetServiceGraph)
r.Get("/spread/policy-fanout", spreadHandler.GetPolicyFanout)
@@ -824,7 +823,9 @@ func NewRouter(database *db.Database, wsHub *WSHub, configHandler *ConfigHandler
r.Get("/api/download/agent-mac", serveAgentBinary("mac"))
r.Get("/api/download/agent-linux", serveAgentBinary("linux"))
r.Get("/recon/ping/{scan_id}", reconHandler.CanaryPing)
r.Get("/recon/ping/{scan_id}", func(w http.ResponseWriter, r *http.Request) {
writeJSON(w, map[string]interface{}{"ok": false, "error": "canary not configured"})
})
// Serve frontend SPA
if webRoot != "" {