Skip to content

Commit 9d5ed08

Browse files
authored
Refactor after Results changes in security-cli (#724)
1 parent 76c8ca8 commit 9d5ed08

18 files changed

+268
-265
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ require (
116116
gopkg.in/warnings.v0 v0.1.2 // indirect
117117
)
118118

119-
// replace github.com/jfrog/jfrog-cli-security => github.com/jfrog/jfrog-cli-security dev
119+
replace github.com/jfrog/jfrog-cli-security => github.com/jfrog/jfrog-cli-security v1.11.5-0.20241013154337-2f7858923804
120120

121121
// replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 dev
122122

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYL
134134
github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w=
135135
github.com/jfrog/jfrog-cli-core/v2 v2.56.3 h1:9ZZ7TGpobk4XShPzrHkRGfpYzs1w0rg7Hqtfg51iNRg=
136136
github.com/jfrog/jfrog-cli-core/v2 v2.56.3/go.mod h1:xL9b2DrH5FemiTuk2bfUBfbQYC/RvpBkPxxV6XxssXs=
137-
github.com/jfrog/jfrog-cli-security v1.11.4 h1:aMNTcz/w75IfHfsNuJqoHu38+35L9JH8DnTEqOhW8Ao=
138-
github.com/jfrog/jfrog-cli-security v1.11.4/go.mod h1:XRev43n6+C48UJGbRGCI5eqtQ4tF5T6hxnIa4+ULiMI=
137+
github.com/jfrog/jfrog-cli-security v1.11.5-0.20241013154337-2f7858923804 h1:cYd1+uqVgzSj9g2p3+RqfdM6G4xJBAgB9ODvvfuC0MI=
138+
github.com/jfrog/jfrog-cli-security v1.11.5-0.20241013154337-2f7858923804/go.mod h1:XRev43n6+C48UJGbRGCI5eqtQ4tF5T6hxnIa4+ULiMI=
139139
github.com/jfrog/jfrog-client-go v1.47.2 h1:Lu+2n4EU+MzNfotV1VOvF/ZQIWsQJg11Z4YSVhumFy0=
140140
github.com/jfrog/jfrog-client-go v1.47.2/go.mod h1:fx2fq5XwZ7e2pzpBB9pXsP8+ZdKLB8g+A6fjGU6F2XI=
141141
github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible h1:jdpOPRN1zP63Td1hDQbZW73xKmzDvZHzVdNYxhnTMDA=

packagehandlers/packagehandlers_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
biutils "github.com/jfrog/build-info-go/utils"
1414
"github.com/jfrog/frogbot/v2/utils"
1515
"github.com/jfrog/jfrog-cli-security/commands/audit/sca/java"
16-
"github.com/jfrog/jfrog-cli-security/formats"
16+
"github.com/jfrog/jfrog-cli-security/utils/formats"
1717
"github.com/jfrog/jfrog-cli-security/utils/techutils"
1818
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
1919
"github.com/stretchr/testify/assert"

scanpullrequest/scanpullrequest.go

Lines changed: 50 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import (
1010
"github.com/jfrog/froggit-go/vcsclient"
1111
"github.com/jfrog/froggit-go/vcsutils"
1212
"github.com/jfrog/gofrog/datastructures"
13-
"github.com/jfrog/jfrog-cli-security/formats"
14-
securityutils "github.com/jfrog/jfrog-cli-security/utils"
13+
"github.com/jfrog/jfrog-cli-security/utils/formats"
14+
"github.com/jfrog/jfrog-cli-security/utils/jasutils"
15+
"github.com/jfrog/jfrog-cli-security/utils/results"
16+
"github.com/jfrog/jfrog-cli-security/utils/results/conversion"
1517
"github.com/jfrog/jfrog-cli-security/utils/xsc"
1618
"github.com/jfrog/jfrog-client-go/utils/log"
1719
"github.com/jfrog/jfrog-client-go/xray/services"
@@ -172,7 +174,7 @@ func auditPullRequestInProject(repoConfig *utils.Repository, scanDetails *utils.
172174
}()
173175

174176
// Audit source branch
175-
var sourceResults *securityutils.Results
177+
var sourceResults *results.SecurityCommandResults
176178
workingDirs := utils.GetFullPathWorkingDirs(scanDetails.Project.WorkingDirs, sourceBranchWd)
177179
log.Info("Scanning source branch...")
178180
sourceResults, err = scanDetails.RunInstallAndAudit(workingDirs...)
@@ -181,12 +183,11 @@ func auditPullRequestInProject(repoConfig *utils.Repository, scanDetails *utils.
181183
}
182184

183185
// Set JAS output flags
184-
sourceScanResults := sourceResults.ExtendedScanResults
185-
repoConfig.OutputWriter.SetJasOutputFlags(sourceScanResults.EntitledForJas, len(sourceScanResults.ApplicabilityScanResults) > 0)
186+
repoConfig.OutputWriter.SetJasOutputFlags(sourceResults.EntitledForJas, len(sourceResults.GetJasScansResults(jasutils.Applicability)) > 0)
186187

187188
// Get all issues that exist in the source branch
188189
if repoConfig.IncludeAllVulnerabilities {
189-
if auditIssues, err = getAllIssues(sourceResults, repoConfig.AllowedLicenses); err != nil {
190+
if auditIssues, err = getAllIssues(sourceResults, repoConfig.AllowedLicenses, scanDetails.HasViolationContext()); err != nil {
190191
return
191192
}
192193
utils.ConvertSarifPathsToRelative(auditIssues, sourceBranchWd)
@@ -201,7 +202,7 @@ func auditPullRequestInProject(repoConfig *utils.Repository, scanDetails *utils.
201202
return
202203
}
203204

204-
func auditTargetBranch(repoConfig *utils.Repository, scanDetails *utils.ScanDetails, sourceScanResults *securityutils.Results) (newIssues *utils.IssuesCollection, targetBranchWd string, err error) {
205+
func auditTargetBranch(repoConfig *utils.Repository, scanDetails *utils.ScanDetails, sourceScanResults *results.SecurityCommandResults) (newIssues *utils.IssuesCollection, targetBranchWd string, err error) {
205206
// Download target branch (if needed)
206207
cleanupTarget := func() error { return nil }
207208
if !repoConfig.IncludeAllVulnerabilities {
@@ -215,7 +216,7 @@ func auditTargetBranch(repoConfig *utils.Repository, scanDetails *utils.ScanDeta
215216
}()
216217

217218
// Set target branch scan details
218-
var targetResults *securityutils.Results
219+
var targetResults *results.SecurityCommandResults
219220
workingDirs := utils.GetFullPathWorkingDirs(scanDetails.Project.WorkingDirs, targetBranchWd)
220221
log.Info("Scanning target branch...")
221222
targetResults, err = scanDetails.RunInstallAndAudit(workingDirs...)
@@ -224,56 +225,68 @@ func auditTargetBranch(repoConfig *utils.Repository, scanDetails *utils.ScanDeta
224225
}
225226

226227
// Get newly added issues
227-
newIssues, err = getNewlyAddedIssues(targetResults, sourceScanResults, repoConfig.AllowedLicenses)
228+
newIssues, err = getNewlyAddedIssues(targetResults, sourceScanResults, repoConfig.AllowedLicenses, scanDetails.HasViolationContext())
228229
return
229230
}
230231

231-
func getAllIssues(results *securityutils.Results, allowedLicenses []string) (*utils.IssuesCollection, error) {
232+
func getAllIssues(cmdResults *results.SecurityCommandResults, allowedLicenses []string, hasViolationContext bool) (*utils.IssuesCollection, error) {
232233
log.Info("Frogbot is configured to show all vulnerabilities")
233-
scanResults := results.ExtendedScanResults
234-
xraySimpleJson, err := securityutils.ConvertXrayScanToSimpleJson(results, results.IsMultipleProject(), false, true, allowedLicenses)
234+
simpleJsonResults, err := conversion.NewCommandResultsConvertor(conversion.ResultConvertParams{
235+
IncludeVulnerabilities: true,
236+
HasViolationContext: hasViolationContext,
237+
AllowedLicenses: allowedLicenses,
238+
IncludeLicenses: true,
239+
SimplifiedOutput: true,
240+
}).ConvertToSimpleJson(cmdResults)
235241
if err != nil {
236242
return nil, err
237243
}
238244
return &utils.IssuesCollection{
239-
Vulnerabilities: append(xraySimpleJson.Vulnerabilities, xraySimpleJson.SecurityViolations...),
240-
Iacs: securityutils.PrepareIacs(scanResults.IacScanResults),
241-
Secrets: securityutils.PrepareSecrets(scanResults.SecretsScanResults),
242-
Sast: securityutils.PrepareSast(scanResults.SastScanResults),
243-
Licenses: xraySimpleJson.LicensesViolations,
245+
Vulnerabilities: append(simpleJsonResults.Vulnerabilities, simpleJsonResults.SecurityViolations...),
246+
Iacs: simpleJsonResults.Iacs,
247+
Secrets: simpleJsonResults.Secrets,
248+
Sast: simpleJsonResults.Sast,
249+
Licenses: simpleJsonResults.LicensesViolations,
244250
}, nil
245251
}
246252

247253
// Returns all the issues found in the source branch that didn't exist in the target branch.
248-
func getNewlyAddedIssues(targetResults, sourceResults *securityutils.Results, allowedLicenses []string) (*utils.IssuesCollection, error) {
254+
func getNewlyAddedIssues(targetResults, sourceResults *results.SecurityCommandResults, allowedLicenses []string, hasViolationContext bool) (*utils.IssuesCollection, error) {
255+
var err error
256+
convertor := conversion.NewCommandResultsConvertor(conversion.ResultConvertParams{IncludeVulnerabilities: true, HasViolationContext: hasViolationContext, IncludeLicenses: len(allowedLicenses) > 0, AllowedLicenses: allowedLicenses, SimplifiedOutput: true})
257+
simpleJsonSource, err := convertor.ConvertToSimpleJson(sourceResults)
258+
if err != nil {
259+
return nil, err
260+
}
261+
simpleJsonTarget, err := convertor.ConvertToSimpleJson(targetResults)
262+
if err != nil {
263+
return nil, err
264+
}
265+
249266
var newVulnerabilitiesOrViolations []formats.VulnerabilityOrViolationRow
267+
if len(simpleJsonSource.Vulnerabilities) > 0 || len(simpleJsonSource.SecurityViolations) > 0 {
268+
newVulnerabilitiesOrViolations = append(
269+
getUniqueVulnerabilityOrViolationRows(simpleJsonTarget.Vulnerabilities, simpleJsonSource.Vulnerabilities),
270+
getUniqueVulnerabilityOrViolationRows(simpleJsonTarget.SecurityViolations, simpleJsonSource.SecurityViolations)...,
271+
)
272+
}
273+
250274
var newLicenses []formats.LicenseRow
251-
var err error
252-
if len(sourceResults.GetScaScansXrayResults()) > 0 {
253-
if newVulnerabilitiesOrViolations, newLicenses, err = createNewVulnerabilitiesRows(targetResults, sourceResults, allowedLicenses); err != nil {
254-
return nil, err
255-
}
275+
if len(simpleJsonSource.LicensesViolations) > 0 {
276+
newLicenses = getUniqueLicenseRows(simpleJsonTarget.LicensesViolations, simpleJsonSource.LicensesViolations)
256277
}
257278

258279
var newIacs []formats.SourceCodeRow
259-
if len(sourceResults.ExtendedScanResults.IacScanResults) > 0 {
260-
targetIacRows := securityutils.PrepareIacs(targetResults.ExtendedScanResults.IacScanResults)
261-
sourceIacRows := securityutils.PrepareIacs(sourceResults.ExtendedScanResults.IacScanResults)
262-
newIacs = createNewSourceCodeRows(targetIacRows, sourceIacRows)
280+
if len(simpleJsonSource.Iacs) > 0 {
281+
newIacs = createNewSourceCodeRows(simpleJsonTarget.Iacs, simpleJsonSource.Iacs)
263282
}
264-
265283
var newSecrets []formats.SourceCodeRow
266-
if len(sourceResults.ExtendedScanResults.SecretsScanResults) > 0 {
267-
targetSecretsRows := securityutils.PrepareIacs(targetResults.ExtendedScanResults.SecretsScanResults)
268-
sourceSecretsRows := securityutils.PrepareIacs(sourceResults.ExtendedScanResults.SecretsScanResults)
269-
newSecrets = createNewSourceCodeRows(targetSecretsRows, sourceSecretsRows)
284+
if len(simpleJsonSource.Secrets) > 0 {
285+
newSecrets = createNewSourceCodeRows(simpleJsonTarget.Secrets, simpleJsonSource.Secrets)
270286
}
271-
272287
var newSast []formats.SourceCodeRow
273-
if len(targetResults.ExtendedScanResults.SastScanResults) > 0 {
274-
targetSastRows := securityutils.PrepareSast(targetResults.ExtendedScanResults.SastScanResults)
275-
sourceSastRows := securityutils.PrepareSast(sourceResults.ExtendedScanResults.SastScanResults)
276-
newSast = createNewSourceCodeRows(targetSastRows, sourceSastRows)
288+
if len(simpleJsonSource.Sast) > 0 {
289+
newSast = createNewSourceCodeRows(simpleJsonTarget.Sast, simpleJsonSource.Sast)
277290
}
278291

279292
return &utils.IssuesCollection{
@@ -303,40 +316,6 @@ func createNewSourceCodeRows(targetResults, sourceResults []formats.SourceCodeRo
303316
return addedSourceCodeVulnerabilities
304317
}
305318

306-
// Create vulnerabilities rows. The rows should contain only the new issues added by this PR
307-
func createNewVulnerabilitiesRows(targetResults, sourceResults *securityutils.Results, allowedLicenses []string) (vulnerabilityOrViolationRows []formats.VulnerabilityOrViolationRow, licenseRows []formats.LicenseRow, err error) {
308-
targetScanAggregatedResults := aggregateScanResults(targetResults.GetScaScansXrayResults())
309-
sourceScanAggregatedResults := aggregateScanResults(sourceResults.GetScaScansXrayResults())
310-
311-
if len(sourceScanAggregatedResults.Violations) > 0 {
312-
return getNewViolations(&targetScanAggregatedResults, &sourceScanAggregatedResults, sourceResults)
313-
}
314-
if len(sourceScanAggregatedResults.Vulnerabilities) > 0 {
315-
if vulnerabilityOrViolationRows, err = getNewSecurityVulnerabilities(&targetScanAggregatedResults, &sourceScanAggregatedResults, sourceResults); err != nil {
316-
return
317-
}
318-
}
319-
var newLicenses []formats.LicenseRow
320-
if newLicenses, err = getNewLicenseRows(&targetScanAggregatedResults, &sourceScanAggregatedResults); err != nil {
321-
return
322-
}
323-
licenseRows = securityutils.GetViolatedLicenses(allowedLicenses, newLicenses)
324-
return
325-
}
326-
327-
func getNewSecurityVulnerabilities(targetScan, sourceScan *services.ScanResponse, auditResults *securityutils.Results) (newVulnerabilitiesRows []formats.VulnerabilityOrViolationRow, err error) {
328-
targetVulnerabilitiesRows, err := securityutils.PrepareVulnerabilities(targetScan.Vulnerabilities, auditResults, auditResults.IsMultipleProject(), true)
329-
if err != nil {
330-
return newVulnerabilitiesRows, err
331-
}
332-
sourceVulnerabilitiesRows, err := securityutils.PrepareVulnerabilities(sourceScan.Vulnerabilities, auditResults, auditResults.IsMultipleProject(), true)
333-
if err != nil {
334-
return newVulnerabilitiesRows, err
335-
}
336-
newVulnerabilitiesRows = getUniqueVulnerabilityOrViolationRows(targetVulnerabilitiesRows, sourceVulnerabilitiesRows)
337-
return
338-
}
339-
340319
func getUniqueVulnerabilityOrViolationRows(targetRows, sourceRows []formats.VulnerabilityOrViolationRow) []formats.VulnerabilityOrViolationRow {
341320
existingRows := make(map[string]formats.VulnerabilityOrViolationRow)
342321
var newRows []formats.VulnerabilityOrViolationRow
@@ -351,35 +330,6 @@ func getUniqueVulnerabilityOrViolationRows(targetRows, sourceRows []formats.Vuln
351330
return newRows
352331
}
353332

354-
func getNewViolations(targetScan, sourceScan *services.ScanResponse, auditResults *securityutils.Results) (newSecurityViolationsRows []formats.VulnerabilityOrViolationRow, newLicenseViolationsRows []formats.LicenseRow, err error) {
355-
targetSecurityViolationsRows, targetLicenseViolationsRows, _, err := securityutils.PrepareViolations(targetScan.Violations, auditResults, auditResults.IsMultipleProject(), true)
356-
if err != nil {
357-
return
358-
}
359-
sourceSecurityViolationsRows, sourceLicenseViolationsRows, _, err := securityutils.PrepareViolations(sourceScan.Violations, auditResults, auditResults.IsMultipleProject(), true)
360-
if err != nil {
361-
return
362-
}
363-
newSecurityViolationsRows = getUniqueVulnerabilityOrViolationRows(targetSecurityViolationsRows, sourceSecurityViolationsRows)
364-
if len(sourceLicenseViolationsRows) > 0 {
365-
newLicenseViolationsRows = getUniqueLicenseRows(targetLicenseViolationsRows, sourceLicenseViolationsRows)
366-
}
367-
return
368-
}
369-
370-
func getNewLicenseRows(targetScan, sourceScan *services.ScanResponse) (newLicenses []formats.LicenseRow, err error) {
371-
targetLicenses, err := securityutils.PrepareLicenses(targetScan.Licenses)
372-
if err != nil {
373-
return
374-
}
375-
sourceLicenses, err := securityutils.PrepareLicenses(sourceScan.Licenses)
376-
if err != nil {
377-
return
378-
}
379-
newLicenses = getUniqueLicenseRows(targetLicenses, sourceLicenses)
380-
return
381-
}
382-
383333
func getUniqueLicenseRows(targetRows, sourceRows []formats.LicenseRow) []formats.LicenseRow {
384334
existingLicenses := make(map[string]formats.LicenseRow)
385335
var newLicenses []formats.LicenseRow

0 commit comments

Comments
 (0)