feat(14-03): wire 5 frontend leak sources in RegisterAll (40 -> 45 sources)

- Register SourceMapSource, WebpackSource, EnvLeakSource, SwaggerSource, DeployPreviewSource
- Update test expectations from 40 to 45 sources
This commit is contained in:
salvacybersec
2026-04-06 13:19:34 +03:00
parent 7d8a4182d7
commit 0a8be81f0c
3 changed files with 22 additions and 9 deletions

View File

@@ -641,8 +641,8 @@ func TestRegisterAll_Phase12(t *testing.T) {
}) })
names := eng.List() names := eng.List()
if n := len(names); n != 40 { if n := len(names); n != 45 {
t.Fatalf("expected 40 sources from RegisterAll, got %d: %v", n, names) t.Fatalf("expected 45 sources from RegisterAll, got %d: %v", n, names)
} }
// Build lookup for source access. // Build lookup for source access.

View File

@@ -56,8 +56,9 @@ type SourcesConfig struct {
} }
// RegisterAll registers every Phase 10 code-hosting, Phase 11 search engine / // RegisterAll registers every Phase 10 code-hosting, Phase 11 search engine /
// paste site, Phase 12 IoT scanner / cloud storage, and Phase 13 package // paste site, Phase 12 IoT scanner / cloud storage, Phase 13 package
// registry / container / IaC source on engine (40 sources total). // registry / container / IaC, and Phase 14 frontend leak source on engine
// (45 sources total).
// //
// All sources are registered unconditionally so that cmd/recon.go can surface // All sources are registered unconditionally so that cmd/recon.go can surface
// the full catalog via `keyhunter recon list` regardless of which credentials // the full catalog via `keyhunter recon list` regardless of which credentials
@@ -228,4 +229,11 @@ func RegisterAll(engine *recon.Engine, cfg SourcesConfig) {
engine.Register(&KubernetesSource{Registry: reg, Limiters: lim}) engine.Register(&KubernetesSource{Registry: reg, Limiters: lim})
engine.Register(&TerraformSource{Registry: reg, Limiters: lim}) engine.Register(&TerraformSource{Registry: reg, Limiters: lim})
engine.Register(&HelmSource{Registry: reg, Limiters: lim}) engine.Register(&HelmSource{Registry: reg, Limiters: lim})
// Phase 14: Frontend leak sources (credentialless).
engine.Register(&SourceMapSource{Registry: reg, Limiters: lim})
engine.Register(&WebpackSource{Registry: reg, Limiters: lim})
engine.Register(&EnvLeakSource{Registry: reg, Limiters: lim})
engine.Register(&SwaggerSource{Registry: reg, Limiters: lim})
engine.Register(&DeployPreviewSource{Registry: reg, Limiters: lim})
} }

View File

@@ -16,9 +16,9 @@ func registerTestRegistry() *providers.Registry {
}) })
} }
// TestRegisterAll_WiresAllFortySources asserts that RegisterAll registers // TestRegisterAll_WiresAllFortyFiveSources asserts that RegisterAll registers
// every Phase 10 + Phase 11 + Phase 12 + Phase 13 source by its stable name on a fresh engine. // every Phase 10-14 source by its stable name on a fresh engine.
func TestRegisterAll_WiresAllFortySources(t *testing.T) { func TestRegisterAll_WiresAllFortyFiveSources(t *testing.T) {
eng := recon.NewEngine() eng := recon.NewEngine()
cfg := SourcesConfig{ cfg := SourcesConfig{
Registry: registerTestRegistry(), Registry: registerTestRegistry(),
@@ -37,7 +37,9 @@ func TestRegisterAll_WiresAllFortySources(t *testing.T) {
"codeberg", "codeberg",
"codesandbox", "codesandbox",
"crates", "crates",
"deploypreview",
"dockerhub", "dockerhub",
"dotenv",
"duckduckgo", "duckduckgo",
"fofa", "fofa",
"gcs", "gcs",
@@ -64,8 +66,11 @@ func TestRegisterAll_WiresAllFortySources(t *testing.T) {
"s3", "s3",
"sandboxes", "sandboxes",
"shodan", "shodan",
"sourcemaps",
"spaces", "spaces",
"swagger",
"terraform", "terraform",
"webpack",
"yandex", "yandex",
"zoomeye", "zoomeye",
} }
@@ -85,8 +90,8 @@ func TestRegisterAll_MissingCredsStillRegistered(t *testing.T) {
Limiters: recon.NewLimiterRegistry(), Limiters: recon.NewLimiterRegistry(),
}) })
if n := len(eng.List()); n != 40 { if n := len(eng.List()); n != 45 {
t.Fatalf("expected 40 sources registered, got %d: %v", n, eng.List()) t.Fatalf("expected 45 sources registered, got %d: %v", n, eng.List())
} }
// SweepAll with an empty config should filter out cred-gated sources // SweepAll with an empty config should filter out cred-gated sources