@@ -77,7 +77,7 @@ type FirstPartyScanResponse struct {
7777 FirstPartyVulns []vuln.FirstPartyVulnDTO `json:"firstPartyVulns"`
7878}
7979
80- func (s * HTTPController ) DependencyVulnScan (c core.Context , bom normalize.SBOM ) (ScanResponse , error ) {
80+ func (s * HTTPController ) DependencyVulnScan (c core.Context , bom normalize.SBOM ) (bool , ScanResponse , error ) {
8181 monitoring .DependencyVulnScanAmount .Inc ()
8282 startTime := time .Now ()
8383 defer func () {
@@ -103,21 +103,24 @@ func (s *HTTPController) DependencyVulnScan(c core.Context, bom normalize.SBOM)
103103 assetVersion , err := s .assetVersionRepository .FindOrCreate (assetVersionName , asset .ID , tag == "1" , utils .EmptyThenNil (defaultBranch ))
104104 if err != nil {
105105 slog .Error ("could not find or create asset version" , "err" , err )
106- return scanResults , err
106+ return false , scanResults , err
107107 }
108108
109109 scannerID := c .Request ().Header .Get ("X-Scanner" )
110110 if scannerID == "" {
111111 slog .Error ("no X-Scanner header found" )
112- return scanResults , fmt .Errorf ("no X-Scanner header found" )
112+ return false , scanResults , fmt .Errorf ("no X-Scanner header found" )
113113 }
114114
115115 // update the sbom in the database in parallel
116- if err := s .assetVersionService .UpdateSBOM (assetVersion , scannerID , normalizedBom ); err != nil {
116+ sbomUpdated , err := s .assetVersionService .UpdateSBOM (assetVersion , scannerID , normalizedBom )
117+ if err != nil {
117118 slog .Error ("could not update sbom" , "err" , err )
118- return scanResults , err
119+ return false , scanResults , err
119120 }
120- return s .ScanNormalizedSBOM (org , project , asset , assetVersion , normalizedBom , scannerID , userID )
121+
122+ scanResponse , scanErr := s .ScanNormalizedSBOM (org , project , asset , assetVersion , normalizedBom , scannerID , userID )
123+ return sbomUpdated , scanResponse , scanErr
121124}
122125
123126func (s * HTTPController ) ScanNormalizedSBOM (org models.Org , project models.Project , asset models.Asset , assetVersion models.AssetVersion , normalizedBom normalize.SBOM , scannerID string , userID string ) (ScanResponse , error ) {
@@ -234,10 +237,20 @@ func (s *HTTPController) ScanDependencyVulnFromProject(c core.Context) error {
234237 return err
235238 }
236239
237- scanResults , err := s .DependencyVulnScan (c , normalize .FromCdxBom (bom , true ))
240+ sbomUpdated , scanResults , err := s .DependencyVulnScan (c , normalize .FromCdxBom (bom , true ))
238241 if err != nil {
239242 return err
240243 }
244+ if sbomUpdated {
245+ thirdPartyIntegrations := core .GetThirdPartyIntegration (c )
246+ if err = thirdPartyIntegrations .HandleEvent (core.SBOMCreatedEvent {
247+ Ctx : c ,
248+ SBOM : * bom ,
249+ }); err != nil {
250+ slog .Error ("could not handle manual mitigation event" , "err" , err )
251+ }
252+
253+ }
241254 return c .JSON (200 , scanResults )
242255}
243256
@@ -261,10 +274,20 @@ func (s *HTTPController) ScanSbomFile(c core.Context) error {
261274 return err
262275 }
263276
264- scanResults , err := s .DependencyVulnScan (c , normalize .FromCdxBom (bom , true ))
277+ sbomUpdated , scanResults , err := s .DependencyVulnScan (c , normalize .FromCdxBom (bom , true ))
265278 if err != nil {
266279 return err
267280 }
281+ if sbomUpdated {
282+ thirdPartyIntegrations := core .GetThirdPartyIntegration (c )
283+ if err = thirdPartyIntegrations .HandleEvent (core.SBOMCreatedEvent {
284+ Ctx : c ,
285+ SBOM : * bom ,
286+ }); err != nil {
287+ slog .Error ("could not handle manual mitigation event" , "err" , err )
288+ }
289+
290+ }
268291 return c .JSON (200 , scanResults )
269292
270293}
0 commit comments