From 301d072fd6883cb0c350e25ad2b9537618ae2a65 Mon Sep 17 00:00:00 2001 From: Spencer Schrock Date: Fri, 9 Feb 2024 15:12:32 -0800 Subject: [PATCH] try using probe registration data Signed-off-by: Spencer Schrock --- internal/probes/probes.go | 8 ++++ pkg/scorecard.go | 9 ++--- pkg/scorecard_result.go | 22 +++++++---- probes/entries.go | 81 --------------------------------------- 4 files changed, 26 insertions(+), 94 deletions(-) diff --git a/internal/probes/probes.go b/internal/probes/probes.go index cd275590a683..8b67daac3bc1 100644 --- a/internal/probes/probes.go +++ b/internal/probes/probes.go @@ -54,3 +54,11 @@ func Register(probe Probe) error { registered[probe.Name] = probe return nil } + +func Get(name string) (Probe, error) { + p, ok := registered[name] + if !ok { + return Probe{}, errors.CreateInternal(errors.ErrorUnsupportedCheck, "probe not found") + } + return p, nil +} diff --git a/pkg/scorecard.go b/pkg/scorecard.go index 2a21c74f699d..7a1bf6430746 100644 --- a/pkg/scorecard.go +++ b/pkg/scorecard.go @@ -30,6 +30,7 @@ import ( "github.com/ossf/scorecard/v4/clients" sce "github.com/ossf/scorecard/v4/errors" "github.com/ossf/scorecard/v4/finding" + proberegistration "github.com/ossf/scorecard/v4/internal/probes" "github.com/ossf/scorecard/v4/options" "github.com/ossf/scorecard/v4/probes" "github.com/ossf/scorecard/v4/probes/zrunner" @@ -198,14 +199,12 @@ func runEnabledProbes(request *checker.CheckRequest, probeFindings := make([]finding.Finding, 0) for _, probeName := range probesToRun { - // Get the probe Run func - probeRunner, err := probes.GetProbeRunner(probeName) + probe, err := proberegistration.Get(probeName) if err != nil { - msg := fmt.Sprintf("could not find probe: %s", probeName) - return sce.WithMessage(sce.ErrScorecardInternal, msg) + return err } // Run probe - findings, _, err := probeRunner(&ret.RawResults) + findings, _, err := probe.Implementation(&ret.RawResults) if err != nil { return sce.WithMessage(sce.ErrScorecardInternal, "ending run") } diff --git a/pkg/scorecard_result.go b/pkg/scorecard_result.go index 4d6a3176df43..604e84eb3d5f 100644 --- a/pkg/scorecard_result.go +++ b/pkg/scorecard_result.go @@ -32,10 +32,10 @@ import ( docChecks "github.com/ossf/scorecard/v4/docs/checks" sce "github.com/ossf/scorecard/v4/errors" "github.com/ossf/scorecard/v4/finding" + proberegistration "github.com/ossf/scorecard/v4/internal/probes" "github.com/ossf/scorecard/v4/log" "github.com/ossf/scorecard/v4/options" spol "github.com/ossf/scorecard/v4/policy" - "github.com/ossf/scorecard/v4/probes" ) // ScorecardInfo contains information about the scorecard code that was run. @@ -313,14 +313,20 @@ func assignRawData(probeCheckName string, request *checker.CheckRequest, ret *Sc } func populateRawResults(request *checker.CheckRequest, probesToRun []string, ret *ScorecardResult) error { - probeCheckNames := make([]string, 0) + seen := map[string]bool{} for _, probeName := range probesToRun { - probeCheckName := probes.CheckMap[probeName] - if !contains(probeCheckNames, probeCheckName) { - probeCheckNames = append(probeCheckNames, probeCheckName) - err := assignRawData(probeCheckName, request, ret) - if err != nil { - return err + p, err := proberegistration.Get(probeName) + if err != nil { + return err + } + for _, checkName := range p.RequiredRawData { + checkName := string(checkName) + if !seen[checkName] { + err := assignRawData(checkName, request, ret) + if err != nil { + return err + } + seen[checkName] = true } } } diff --git a/probes/entries.go b/probes/entries.go index 7765da3bdd9e..9088eb01a7e6 100644 --- a/probes/entries.go +++ b/probes/entries.go @@ -155,80 +155,6 @@ var ( releasesHaveProvenance.Run, } - probeRunners = map[string]func(*checker.RawResults) ([]finding.Finding, string, error){ - securityPolicyPresent.Probe: securityPolicyPresent.Run, - securityPolicyContainsLinks.Probe: securityPolicyContainsLinks.Run, - securityPolicyContainsVulnerabilityDisclosure.Probe: securityPolicyContainsVulnerabilityDisclosure.Run, - securityPolicyContainsText.Probe: securityPolicyContainsText.Run, - toolRenovateInstalled.Probe: toolRenovateInstalled.Run, - toolDependabotInstalled.Probe: toolDependabotInstalled.Run, - toolPyUpInstalled.Probe: toolPyUpInstalled.Run, - fuzzedWithOSSFuzz.Probe: fuzzedWithOSSFuzz.Run, - fuzzedWithGoNative.Probe: fuzzedWithGoNative.Run, - fuzzedWithPythonAtheris.Probe: fuzzedWithPythonAtheris.Run, - fuzzedWithCLibFuzzer.Probe: fuzzedWithCLibFuzzer.Run, - fuzzedWithCppLibFuzzer.Probe: fuzzedWithCppLibFuzzer.Run, - fuzzedWithSwiftLibFuzzer.Probe: fuzzedWithSwiftLibFuzzer.Run, - fuzzedWithRustCargofuzz.Probe: fuzzedWithRustCargofuzz.Run, - fuzzedWithJavaJazzerFuzzer.Probe: fuzzedWithJavaJazzerFuzzer.Run, - fuzzedWithClusterFuzzLite.Probe: fuzzedWithClusterFuzzLite.Run, - fuzzedWithPropertyBasedHaskell.Probe: fuzzedWithPropertyBasedHaskell.Run, - fuzzedWithPropertyBasedTypescript.Probe: fuzzedWithPropertyBasedTypescript.Run, - fuzzedWithPropertyBasedJavascript.Probe: fuzzedWithPropertyBasedJavascript.Run, - packagedWithAutomatedWorkflow.Probe: packagedWithAutomatedWorkflow.Run, - hasLicenseFile.Probe: hasLicenseFile.Run, - hasFSFOrOSIApprovedLicense.Probe: hasFSFOrOSIApprovedLicense.Run, - hasLicenseFileAtTopDir.Probe: hasLicenseFileAtTopDir.Run, - contributorsFromOrgOrCompany.Probe: contributorsFromOrgOrCompany.Run, - hasOSVVulnerabilities.Probe: hasOSVVulnerabilities.Run, - sastToolCodeQLInstalled.Probe: sastToolCodeQLInstalled.Run, - sastToolRunsOnAllCommits.Probe: sastToolRunsOnAllCommits.Run, - sastToolSonarInstalled.Probe: sastToolSonarInstalled.Run, - hasDangerousWorkflowScriptInjection.Probe: hasDangerousWorkflowScriptInjection.Run, - hasDangerousWorkflowUntrustedCheckout.Probe: hasDangerousWorkflowUntrustedCheckout.Run, - notArchived.Probe: notArchived.Run, - hasRecentCommits.Probe: hasRecentCommits.Run, - issueActivityByProjectMember.Probe: issueActivityByProjectMember.Run, - notCreatedRecently.Probe: notCreatedRecently.Run, - } - - CheckMap = map[string]string{ - securityPolicyPresent.Probe: "Security-Policy", - securityPolicyContainsLinks.Probe: "Security-Policy", - securityPolicyContainsVulnerabilityDisclosure.Probe: "Security-Policy", - securityPolicyContainsText.Probe: "Security-Policy", - toolRenovateInstalled.Probe: "Dependency-Update-Tool", - toolDependabotInstalled.Probe: "Dependency-Update-Tool", - toolPyUpInstalled.Probe: "Dependency-Update-Tool", - fuzzedWithOSSFuzz.Probe: "Fuzzing", - fuzzedWithGoNative.Probe: "Fuzzing", - fuzzedWithPythonAtheris.Probe: "Fuzzing", - fuzzedWithCLibFuzzer.Probe: "Fuzzing", - fuzzedWithCppLibFuzzer.Probe: "Fuzzing", - fuzzedWithSwiftLibFuzzer.Probe: "Fuzzing", - fuzzedWithRustCargofuzz.Probe: "Fuzzing", - fuzzedWithJavaJazzerFuzzer.Probe: "Fuzzing", - fuzzedWithClusterFuzzLite.Probe: "Fuzzing", - fuzzedWithPropertyBasedHaskell.Probe: "Fuzzing", - fuzzedWithPropertyBasedTypescript.Probe: "Fuzzing", - fuzzedWithPropertyBasedJavascript.Probe: "Fuzzing", - packagedWithAutomatedWorkflow.Probe: "Packaging", - hasLicenseFile.Probe: "License", - hasFSFOrOSIApprovedLicense.Probe: "License", - hasLicenseFileAtTopDir.Probe: "License", - contributorsFromOrgOrCompany.Probe: "Contributors", - hasOSVVulnerabilities.Probe: "Vulnerabilities", - sastToolCodeQLInstalled.Probe: "SAST", - sastToolRunsOnAllCommits.Probe: "SAST", - sastToolSonarInstalled.Probe: "SAST", - hasDangerousWorkflowScriptInjection.Probe: "Dangerous-Workflow", - hasDangerousWorkflowUntrustedCheckout.Probe: "Dangerous-Workflow", - notArchived.Probe: "Maintained", - hasRecentCommits.Probe: "Maintained", - issueActivityByProjectMember.Probe: "Maintained", - notCreatedRecently.Probe: "Maintained", - } - errProbeNotFound = errors.New("probe not found") ) @@ -244,13 +170,6 @@ func init() { }) } -func GetProbeRunner(probeName string) (func(*checker.RawResults) ([]finding.Finding, string, error), error) { - if runner, ok := probeRunners[probeName]; ok { - return runner, nil - } - return nil, errProbeNotFound -} - func concatMultipleProbes(slices [][]ProbeImpl) []ProbeImpl { var totalLen int for _, s := range slices {