Skip to content

Commit c375e32

Browse files
committed
Add method to retrieve vulnerabilities from other asset versions
Signed-off-by: Rafi <refaei.shikho@hotmail.com>
1 parent e696b40 commit c375e32

3 files changed

Lines changed: 22 additions & 5 deletions

File tree

internal/core/assetversion/asset_version_service.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -428,13 +428,13 @@ func (s *service) handleScanResult(userID string, scannerID string, assetVersion
428428
slog.Error("could not get existing dependencyVulns", "err", err)
429429
return []models.DependencyVuln{}, []models.DependencyVuln{}, []models.DependencyVuln{}, err
430430
}
431-
// get all vulns from the default branch
432-
existingVulnsOnDefaultBranch, err := s.dependencyVulnRepository.GetDependencyVulnsByDefaultAssetVersion(nil, assetVersion.AssetID, "")
431+
// get all vulns from other branches
432+
existingVulnsOnOtherBranch, err := s.dependencyVulnRepository.GetDependencyVulnsByOtherAssetVersions(nil, assetVersion.Name, assetVersion.AssetID, scannerID)
433433
if err != nil {
434434
slog.Error("could not get existing dependencyVulns on default branch", "err", err)
435435
return []models.DependencyVuln{}, []models.DependencyVuln{}, []models.DependencyVuln{}, err
436436
}
437-
existingVulnsOnDefaultBranch = utils.Filter(existingVulnsOnDefaultBranch, func(dependencyVuln models.DependencyVuln) bool {
437+
existingVulnsOnOtherBranch = utils.Filter(existingVulnsOnOtherBranch, func(dependencyVuln models.DependencyVuln) bool {
438438
return dependencyVuln.State != models.VulnStateFixed
439439
})
440440

@@ -445,10 +445,10 @@ func (s *service) handleScanResult(userID string, scannerID string, assetVersion
445445

446446
newDetectedVulns, fixedVulns, firstTimeDetectedByCurrentScanner, notDetectedByCurrentScannerAnymore := diffScanResults(scannerID, dependencyVulns, existingDependencyVulns)
447447

448-
newDetectedVulnsNotOnDefaultBranch, newDetectedButOnDefaultBranchExisting, existingEvents := diffVulnsBetweenBranches(scannerID, newDetectedVulns, existingVulnsOnDefaultBranch)
448+
newDetectedVulnsNotOnDefaultBranch, newDetectedButOnOtherBranchExisting, existingEvents := diffVulnsBetweenBranches(scannerID, newDetectedVulns, existingVulnsOnOtherBranch)
449449

450450
if err := s.dependencyVulnRepository.Transaction(func(tx core.DB) error {
451-
if err := s.dependencyVulnService.UserDetectedExistingVulnOnDifferentBranch(tx, scannerID, newDetectedButOnDefaultBranchExisting, existingEvents, *assetVersion, asset); err != nil {
451+
if err := s.dependencyVulnService.UserDetectedExistingVulnOnDifferentBranch(tx, scannerID, newDetectedButOnOtherBranchExisting, existingEvents, *assetVersion, asset); err != nil {
452452
slog.Error("error when trying to add events for existing vulnerability on different branch")
453453
return err // this will cancel the transaction
454454
}

internal/core/common_interfaces.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ type DependencyVulnRepository interface {
151151
ListUnfixedByAssetAndAssetVersionAndScannerID(assetVersionName string, assetID uuid.UUID, scannerID string) ([]models.DependencyVuln, error)
152152
GetHintsInOrganizationForVuln(tx DB, orgID uuid.UUID, pURL string, cveID string) (common.DependencyVulnHints, error)
153153
GetAllByAssetIDAndState(tx DB, assetID uuid.UUID, state models.VulnState, durationSinceStateChange time.Duration) ([]models.DependencyVuln, error)
154+
GetDependencyVulnsByOtherAssetVersions(tx DB, assetVersionName string, assetID uuid.UUID, scannerID string) ([]models.DependencyVuln, error)
154155
}
155156

156157
type FirstPartyVulnRepository interface {

internal/database/repositories/dependency_vuln_repository.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@ func (repository *dependencyVulnRepository) GetDependencyVulnsByAssetVersion(tx
7171
return dependencyVulns, nil
7272
}
7373

74+
func (repository *dependencyVulnRepository) GetDependencyVulnsByOtherAssetVersions(tx core.DB, assetVersionName string, assetID uuid.UUID, scannerID string) ([]models.DependencyVuln, error) {
75+
var dependencyVulns = []models.DependencyVuln{}
76+
77+
q := repository.Repository.GetDB(tx).Preload("Events").Preload("CVE").Preload("CVE.Exploits").Where("asset_id = ? AND asset_version_name != ?", assetID, assetVersionName)
78+
79+
if scannerID != "" {
80+
// scanner ids is a string array separated by whitespaces
81+
q = q.Where("? = ANY(string_to_array(scanner_ids, ' '))", scannerID)
82+
}
83+
84+
if err := q.Find(&dependencyVulns).Error; err != nil {
85+
return nil, err
86+
}
87+
return dependencyVulns, nil
88+
}
89+
7490
func (repository *dependencyVulnRepository) GetDependencyVulnsByDefaultAssetVersion(tx core.DB, assetID uuid.UUID, scannerID string) ([]models.DependencyVuln, error) {
7591
subQuery := repository.Repository.GetDB(tx).Model(&models.AssetVersion{}).Select("name").Where("asset_id IN (?) AND default_branch = ?", assetID, true)
7692

0 commit comments

Comments
 (0)