@@ -211,10 +211,7 @@ func (g *gitlabIntegration) HandleWebhook(ctx core.Context) error {
211211 switch event := event .(type ) {
212212 case * gitlab.IssueEvent :
213213 issueId := event .ObjectAttributes .IID
214- // check if the user is a bot - we do not want to handle bot comments
215- // if event.Comment.User.GetType() == "Bot" {
216- // return nil
217- // }
214+
218215 // look for a dependencyVuln with such a github ticket id
219216 vuln , err := g .aggregatedVulnRepository .FindByTicketID (nil , fmt .Sprintf ("gitlab:%d/%d" , event .Project .ID , issueId ))
220217 if err != nil {
@@ -1054,10 +1051,11 @@ func (g *gitlabIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
10541051 return nil
10551052 }
10561053
1054+ // check if the dependencyVuln is open, if not we need to close the issue
10571055 if dependencyVuln .State != models .VulnStateOpen {
10581056 if dependencyVuln .TicketState == models .TicketStateOpen {
10591057 dependencyVuln .TicketState = models .TicketStateClosed
1060- vulnEvent := models .NewTicketClosedEvent (dependencyVuln .ID , "User " , "This issue is closed" )
1058+ vulnEvent := models .NewTicketClosedEvent (dependencyVuln .ID , "system " , "This issue is closed" )
10611059
10621060 // save the event
10631061 err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
@@ -1068,39 +1066,32 @@ func (g *gitlabIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
10681066 }
10691067 }
10701068
1071- assetSlug := asset .Slug
1072-
1073- project , err := g .projectRepository .GetProjectByAssetID (asset .ID )
1069+ integrationUUID , err := extractIntegrationIdFromRepoId (repoId )
10741070 if err != nil {
1075- slog .Error ("could not get project by asset id" , "err" , err )
1071+ slog .Error ("failed to extract integration id from repo id" , "err" , err , "repoId" , repoId )
10761072 return err
10771073 }
1078- projectSlug := project .Slug
10791074
1080- orgID := project .OrganizationID
1081- org , err := g .orgRepository .GetOrgByID (orgID )
1075+ projectId , err := extractProjectIdFromRepoId (repoId )
10821076 if err != nil {
1083- slog .Error ("could not get org by id" , "err" , err )
1077+ slog .Error ("failed to extract project id from repo id" , "err" , err , "repoId" , repoId )
10841078 return err
10851079 }
1086- orgSlug := org .Slug
1087-
1088- assetVersionName := dependencyVuln .AssetVersionName
10891080
1090- integrationUUID , err := extractIntegrationIdFromRepoId ( repoId )
1081+ client , err := g . gitlabClientFactory ( integrationUUID )
10911082 if err != nil {
1092- slog .Error ("failed to extract integration id from repo id" , "err" , err , "repoId" , repoId )
10931083 return err
10941084 }
10951085
1096- projectId , err := extractProjectIdFromRepoId ( repoId )
1086+ project , err := g . projectRepository . GetProjectByAssetID ( asset . ID )
10971087 if err != nil {
1098- slog .Error ("failed to extract project id from repo id" , "err" , err , "repoId" , repoId )
1088+ slog .Error ("could not get project by asset id" , "err" , err )
10991089 return err
11001090 }
11011091
1102- client , err := g .gitlabClientFactory ( integrationUUID )
1092+ org , err := g .orgRepository . GetOrgByID ( project . OrganizationID )
11031093 if err != nil {
1094+ slog .Error ("could not get org by id" , "err" , err )
11041095 return err
11051096 }
11061097
@@ -1117,7 +1108,7 @@ func (g *gitlabIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
11171108
11181109 issue , _ , err := client .EditIssue (ctx , projectId , gitlabTicketIDInt , & gitlab.UpdateIssueOptions {
11191110 Title : gitlab .Ptr (fmt .Sprintf ("%s found in %s" , utils .SafeDereference (dependencyVuln .CVEID ), utils .SafeDereference (dependencyVuln .ComponentPurl ))),
1120- Description : gitlab .Ptr (exp .Markdown (g .frontendUrl , orgSlug , projectSlug , assetSlug , assetVersionName ) + "\n \n ------\n \n " + "Risk exceeds predefined threshold" ),
1111+ Description : gitlab .Ptr (exp .Markdown (g .frontendUrl , org . Slug , project . Slug , asset . Slug , dependencyVuln . AssetVersionName ) + "\n \n ------\n \n " + "Risk exceeds predefined threshold" ),
11211112 Labels : gitlab .Ptr (gitlab .LabelOptions (labels )),
11221113 })
11231114 if err != nil {
@@ -1126,7 +1117,7 @@ func (g *gitlabIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
11261117 // the issue was deleted - we need to set the ticket state to deleted
11271118 dependencyVuln .TicketState = models .TicketStateDeleted
11281119 // we can not reopen the issue - it is deleted
1129- vulnEvent := models .NewTicketDeletedEvent (dependencyVuln .ID , "Unknown " , "This issue is deleted" )
1120+ vulnEvent := models .NewTicketDeletedEvent (dependencyVuln .ID , "user " , "This issue is deleted" )
11301121 // save the event
11311122 err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
11321123 if err != nil {
@@ -1137,14 +1128,16 @@ func (g *gitlabIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
11371128 }
11381129 return err
11391130 }
1131+
1132+ //check if the ticket state in devguard is different from the ticket state in gitlab, if so we need to update the ticket state in devguard
11401133 ticketState := issue .State
11411134 devguardTicketState := dependencyVuln .TicketState
11421135 if ticketState == "closed" {
11431136 if devguardTicketState == models .TicketStateOpen {
11441137 // the issue was closed - we need to set the ticket state to closed
11451138 dependencyVuln .TicketState = models .TicketStateClosed
11461139 // create a new event
1147- vulnEvent := models .NewTicketClosedEvent (dependencyVuln .ID , "User " , "This issue is closed" )
1140+ vulnEvent := models .NewTicketClosedEvent (dependencyVuln .ID , "user " , "This issue is closed" )
11481141
11491142 // save the event
11501143 err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
@@ -1162,7 +1155,7 @@ func (g *gitlabIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
11621155 dependencyVuln .TicketState = models .TicketStateOpen
11631156
11641157 // create a new event
1165- vulnEvent := models .NewReopenedEvent (dependencyVuln .ID , "User " , "This issue is reopened" )
1158+ vulnEvent := models .NewReopenedEvent (dependencyVuln .ID , "user " , "This issue is reopened" )
11661159 // save the event
11671160 err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
11681161 if err != nil {
0 commit comments