@@ -10,8 +10,10 @@ import (
10
10
"github.com/jfrog/froggit-go/vcsclient"
11
11
"github.com/jfrog/froggit-go/vcsutils"
12
12
"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"
15
17
"github.com/jfrog/jfrog-cli-security/utils/xsc"
16
18
"github.com/jfrog/jfrog-client-go/utils/log"
17
19
"github.com/jfrog/jfrog-client-go/xray/services"
@@ -172,7 +174,7 @@ func auditPullRequestInProject(repoConfig *utils.Repository, scanDetails *utils.
172
174
}()
173
175
174
176
// Audit source branch
175
- var sourceResults * securityutils. Results
177
+ var sourceResults * results. SecurityCommandResults
176
178
workingDirs := utils .GetFullPathWorkingDirs (scanDetails .Project .WorkingDirs , sourceBranchWd )
177
179
log .Info ("Scanning source branch..." )
178
180
sourceResults , err = scanDetails .RunInstallAndAudit (workingDirs ... )
@@ -181,12 +183,11 @@ func auditPullRequestInProject(repoConfig *utils.Repository, scanDetails *utils.
181
183
}
182
184
183
185
// 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 )
186
187
187
188
// Get all issues that exist in the source branch
188
189
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 {
190
191
return
191
192
}
192
193
utils .ConvertSarifPathsToRelative (auditIssues , sourceBranchWd )
@@ -201,7 +202,7 @@ func auditPullRequestInProject(repoConfig *utils.Repository, scanDetails *utils.
201
202
return
202
203
}
203
204
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 ) {
205
206
// Download target branch (if needed)
206
207
cleanupTarget := func () error { return nil }
207
208
if ! repoConfig .IncludeAllVulnerabilities {
@@ -215,7 +216,7 @@ func auditTargetBranch(repoConfig *utils.Repository, scanDetails *utils.ScanDeta
215
216
}()
216
217
217
218
// Set target branch scan details
218
- var targetResults * securityutils. Results
219
+ var targetResults * results. SecurityCommandResults
219
220
workingDirs := utils .GetFullPathWorkingDirs (scanDetails .Project .WorkingDirs , targetBranchWd )
220
221
log .Info ("Scanning target branch..." )
221
222
targetResults , err = scanDetails .RunInstallAndAudit (workingDirs ... )
@@ -224,56 +225,68 @@ func auditTargetBranch(repoConfig *utils.Repository, scanDetails *utils.ScanDeta
224
225
}
225
226
226
227
// Get newly added issues
227
- newIssues , err = getNewlyAddedIssues (targetResults , sourceScanResults , repoConfig .AllowedLicenses )
228
+ newIssues , err = getNewlyAddedIssues (targetResults , sourceScanResults , repoConfig .AllowedLicenses , scanDetails . HasViolationContext () )
228
229
return
229
230
}
230
231
231
- func getAllIssues (results * securityutils. Results , allowedLicenses []string ) (* utils.IssuesCollection , error ) {
232
+ func getAllIssues (cmdResults * results. SecurityCommandResults , allowedLicenses []string , hasViolationContext bool ) (* utils.IssuesCollection , error ) {
232
233
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 )
235
241
if err != nil {
236
242
return nil , err
237
243
}
238
244
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 ,
244
250
}, nil
245
251
}
246
252
247
253
// 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
+
249
266
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
+
250
274
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 )
256
277
}
257
278
258
279
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 )
263
282
}
264
-
265
283
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 )
270
286
}
271
-
272
287
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 )
277
290
}
278
291
279
292
return & utils.IssuesCollection {
@@ -303,40 +316,6 @@ func createNewSourceCodeRows(targetResults, sourceResults []formats.SourceCodeRo
303
316
return addedSourceCodeVulnerabilities
304
317
}
305
318
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
-
340
319
func getUniqueVulnerabilityOrViolationRows (targetRows , sourceRows []formats.VulnerabilityOrViolationRow ) []formats.VulnerabilityOrViolationRow {
341
320
existingRows := make (map [string ]formats.VulnerabilityOrViolationRow )
342
321
var newRows []formats.VulnerabilityOrViolationRow
@@ -351,35 +330,6 @@ func getUniqueVulnerabilityOrViolationRows(targetRows, sourceRows []formats.Vuln
351
330
return newRows
352
331
}
353
332
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
-
383
333
func getUniqueLicenseRows (targetRows , sourceRows []formats.LicenseRow ) []formats.LicenseRow {
384
334
existingLicenses := make (map [string ]formats.LicenseRow )
385
335
var newLicenses []formats.LicenseRow
0 commit comments