|
1 | | -// Copyright 2021 Security Scorecard Authors |
| 1 | +// Copyright 2022 Security Scorecard Authors |
2 | 2 | // |
3 | 3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
4 | 4 | // you may not use this file except in compliance with the License. |
|
15 | 15 | package checks |
16 | 16 |
|
17 | 17 | import ( |
18 | | - "fmt" |
19 | | - "strings" |
20 | | - |
21 | 18 | "github.com/ossf/scorecard/v4/checker" |
22 | | - "github.com/ossf/scorecard/v4/clients" |
| 19 | + "github.com/ossf/scorecard/v4/checks/evaluation" |
| 20 | + "github.com/ossf/scorecard/v4/checks/raw" |
23 | 21 | sce "github.com/ossf/scorecard/v4/errors" |
24 | 22 | ) |
25 | 23 |
|
26 | | -const ( |
27 | | - // CheckVulnerabilities is the registered name for the OSV check. |
28 | | - CheckVulnerabilities = "Vulnerabilities" |
29 | | -) |
| 24 | +// CheckVulnerabilities is the registered name for the OSV check. |
| 25 | +const CheckVulnerabilities = "Vulnerabilities" |
30 | 26 |
|
31 | 27 | //nolint:gochecknoinits |
32 | 28 | func init() { |
33 | | - if err := registerCheck(CheckVulnerabilities, HasUnfixedVulnerabilities); err != nil { |
| 29 | + if err := registerCheck(CheckVulnerabilities, Vulnerabilities); err != nil { |
34 | 30 | // this should never happen |
35 | 31 | panic(err) |
36 | 32 | } |
37 | 33 | } |
38 | 34 |
|
39 | | -func getVulnerabilities(resp *clients.VulnerabilitiesResponse) []string { |
40 | | - ids := make([]string, 0, len(resp.Vulns)) |
41 | | - for _, vuln := range resp.Vulns { |
42 | | - ids = append(ids, vuln.ID) |
43 | | - } |
44 | | - return ids |
45 | | -} |
46 | | - |
47 | | -// HasUnfixedVulnerabilities runs Vulnerabilities check. |
48 | | -func HasUnfixedVulnerabilities(c *checker.CheckRequest) checker.CheckResult { |
49 | | - commits, err := c.RepoClient.ListCommits() |
50 | | - if err != nil { |
51 | | - e := sce.WithMessage(sce.ErrScorecardInternal, "Client.Repositories.ListCommits") |
52 | | - return checker.CreateRuntimeErrorResult(CheckVulnerabilities, e) |
53 | | - } |
54 | | - |
55 | | - if len(commits) < 1 || commits[0].SHA == "" { |
56 | | - return checker.CreateInconclusiveResult(CheckVulnerabilities, "no commits found") |
57 | | - } |
58 | | - |
59 | | - resp, err := c.VulnerabilitiesClient.HasUnfixedVulnerabilities(c.Ctx, commits[0].SHA) |
| 35 | +// Vulnerabilities runs Vulnerabilities check. |
| 36 | +func Vulnerabilities(c *checker.CheckRequest) checker.CheckResult { |
| 37 | + rawData, err := raw.Vulnerabilities(c) |
60 | 38 | if err != nil { |
61 | | - e := sce.WithMessage(sce.ErrScorecardInternal, "VulnerabilitiesClient.HasUnfixedVulnerabilities") |
| 39 | + e := sce.WithMessage(sce.ErrScorecardInternal, err.Error()) |
62 | 40 | return checker.CreateRuntimeErrorResult(CheckVulnerabilities, e) |
63 | 41 | } |
64 | 42 |
|
65 | | - // TODO: take severity into account. |
66 | | - vulnIDs := getVulnerabilities(&resp) |
67 | | - if len(vulnIDs) > 0 { |
68 | | - c.Dlogger.Warn3(&checker.LogMessage{ |
69 | | - Text: fmt.Sprintf("HEAD is vulnerable to %s", strings.Join(vulnIDs, ", ")), |
70 | | - }) |
71 | | - return checker.CreateMinScoreResult(CheckVulnerabilities, "existing vulnerabilities detected") |
| 43 | + // Set the raw results. |
| 44 | + if c.RawResults != nil { |
| 45 | + c.RawResults.VulnerabilitiesResults = rawData |
| 46 | + return checker.CheckResult{} |
72 | 47 | } |
73 | 48 |
|
74 | | - return checker.CreateMaxScoreResult(CheckVulnerabilities, "no vulnerabilities detected") |
| 49 | + return evaluation.Vulnerabilities(CheckVulnerabilities, c.Dlogger, &rawData) |
75 | 50 | } |
0 commit comments