Skip to content

Commit c878534

Browse files
add sca realtime errors to results (#531)
* add sca realtime errors to results * move to const
1 parent 56c92c1 commit c878534

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

internal/commands/scarealtime/sca-realtime.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
var ScaResolverResultsFileNameDir = ScaResolverWorkingDir + "/cx-sca-realtime-results.json"
2323

24+
const scaResolverFailedStatus = "failedtoresolve"
2425
const scaResolverProjectName = "cx-cli-sca-realtime-project"
2526
const bitSize = 32
2627

@@ -126,6 +127,7 @@ func GetSCAVulnerabilities(scaRealTimeWrapper wrappers.ScaRealTimeWrapper) error
126127
}
127128

128129
var modelResults []wrappers.ScaVulnerabilitiesResponseModel
130+
var scaRealtimeScanErrors []wrappers.ScaRealtimeScanError
129131

130132
for _, dependencyResolutionResult := range scaResolverResults.DependencyResolutionResults {
131133
// We're using a map to avoid adding repeated packages in request body
@@ -154,9 +156,11 @@ func GetSCAVulnerabilities(scaRealTimeWrapper wrappers.ScaRealTimeWrapper) error
154156
for _, value := range dependencyMap {
155157
bodyRequest = append(bodyRequest, value)
156158
}
157-
var errorModel, errVulnerabilities error
159+
158160
var vulnerabilitiesResponseModel []wrappers.ScaVulnerabilitiesResponseModel
159161
for len(bodyRequest) > 0 {
162+
var errorModel, errVulnerabilities error
163+
160164
// Add pagination to avoid SCA limitation in requests length
161165
if len(bodyRequest) >= 50 { //nolint:gomnd
162166
first50 := bodyRequest[:50]
@@ -181,10 +185,18 @@ func GetSCAVulnerabilities(scaRealTimeWrapper wrappers.ScaRealTimeWrapper) error
181185
modelResults = append(modelResults, vulnerability)
182186
}
183187
}
188+
189+
// Check resolution status
190+
if strings.EqualFold(dependencyResolutionResult.DependencyResolverStatus, scaResolverFailedStatus) {
191+
scaRealtimeScanErrors = append(scaRealtimeScanErrors, wrappers.ScaRealtimeScanError{
192+
Filename: dependencyResolutionResult.PackageManagerFile,
193+
Message: dependencyResolutionResult.Message,
194+
})
195+
}
184196
}
185197

186198
// Convert SCA Results to Scan Results to make it easier to display it in IDEs
187-
err = convertToScanResults(modelResults)
199+
err = convertToScanResults(modelResults, scaRealtimeScanErrors)
188200
if err != nil {
189201
return err
190202
}
@@ -206,14 +218,14 @@ func GetScaVulnerabilitiesPackages(scaRealTimeWrapper wrappers.ScaRealTimeWrappe
206218
}
207219

208220
// convertToScanResults Convert SCA Results to Scan Results to make it easier to display it in IDEs
209-
func convertToScanResults(data []wrappers.ScaVulnerabilitiesResponseModel) error {
210-
var results []*wrappers.ScanResult
221+
func convertToScanResults(data []wrappers.ScaVulnerabilitiesResponseModel, resolutionErrors []wrappers.ScaRealtimeScanError) error {
222+
var results []wrappers.ScanResult
211223

212224
for _, packageData := range data {
213225
for _, vulnerability := range packageData.Vulnerabilities {
214226
score, _ := strconv.ParseFloat(vulnerability.Cvss3.BaseScore, bitSize)
215227

216-
results = append(results, &wrappers.ScanResult{
228+
results = append(results, wrappers.ScanResult{
217229
Type: vulnerability.Type,
218230
ScaType: "vulnerability",
219231
Label: commonParams.ScaType,
@@ -249,8 +261,9 @@ func convertToScanResults(data []wrappers.ScaVulnerabilitiesResponseModel) error
249261
}
250262
}
251263

252-
resultsCollection := wrappers.ScanResultsCollection{
264+
resultsCollection := wrappers.ScaRealtimeScanResultsCollection{
253265
Results: results,
266+
Errors: resolutionErrors,
254267
TotalCount: uint(len(results)),
255268
}
256269

internal/wrappers/results-json.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
package wrappers
22

3+
type ScaRealtimeScanResultsCollection struct {
4+
Results []ScanResult `json:"results"`
5+
Errors []ScaRealtimeScanError `json:"errors"`
6+
TotalCount uint `json:"totalCount"`
7+
ScanID string `json:"scanID"`
8+
}
9+
10+
type ScaRealtimeScanError struct {
11+
Filename string `json:"filename"`
12+
Message string `json:"message"`
13+
}
14+
315
type ScanResultsCollection struct {
416
Results []*ScanResult `json:"results"`
517
TotalCount uint `json:"totalCount"`

0 commit comments

Comments
 (0)