@@ -25,7 +25,6 @@ import (
2525 "time"
2626
2727 "github.com/google/go-github/v62/github"
28- gitlab "gitlab.com/gitlab-org/api/client-go"
2928
3029 "github.com/l3montree-dev/devguard/internal/core"
3130 "github.com/l3montree-dev/devguard/internal/core/org"
@@ -66,8 +65,7 @@ type githubIntegration struct {
6665 assetRepository core.AssetRepository
6766 assetVersionRepository core.AssetVersionRepository
6867
69- orgRepository core.OrganizationRepository
70-
68+ orgRepository core.OrganizationRepository
7169 projectRepository core.ProjectRepository
7270 githubClientFactory func (repoId string ) (githubClientFacade , error )
7371}
@@ -80,12 +78,9 @@ func NewGithubIntegration(db core.DB) *githubIntegration {
8078 githubAppInstallationRepository := repositories .NewGithubAppInstallationRepository (db )
8179
8280 aggregatedVulnRepository := repositories .NewAggregatedVulnRepository (db )
83-
8481 dependencyVulnRepository := repositories .NewDependencyVulnRepository (db )
8582 vulnEventRepository := repositories .NewVulnEventRepository (db )
86-
8783 projectRepository := repositories .NewProjectRepository (db )
88-
8984 orgRepository := repositories .NewOrgRepository (db )
9085
9186 frontendUrl := os .Getenv ("FRONTEND_URL" )
@@ -214,18 +209,18 @@ func (githubIntegration *githubIntegration) HandleWebhook(ctx core.Context) erro
214209 }
215210
216211 switch event := event .(type ) {
217- case * gitlab .IssueEvent :
212+ case * github .IssueEvent :
218213 // check if the issue is a devguard issue
219- issueNumber := event .ObjectAttributes . IID
220- issueID := event .ObjectAttributes . ID
214+ issueNumber := event .Issue . GetNumber ()
215+ issueID := event .Issue . GetID ()
221216
222217 // look for a vuln with such a github ticket id
223218 vuln , err := githubIntegration .aggregatedVulnRepository .FindByTicketID (nil , fmt .Sprintf ("github:%d/%d" , issueID , issueNumber ))
224219 if err != nil {
225220 slog .Debug ("could not find vuln by ticket id" , "err" , err , "ticketId" , fmt .Sprintf ("github:%d/%d" , issueID , issueNumber ))
226221 return nil
227222 }
228- action := event .ObjectAttributes . Action
223+ action := event .Action
229224
230225 // make sure to save the user - it might be a new user or it might have new values defined.
231226 // we do not care about any error - and we want speed, thus do it on a goroutine
@@ -237,9 +232,9 @@ func (githubIntegration *githubIntegration) HandleWebhook(ctx core.Context) erro
237232 }
238233 // save the user in the database
239234 user := models.ExternalUser {
240- ID : fmt .Sprintf ("github:%d" , event .User .ID ),
241- Username : event .User . Username ,
242- AvatarURL : event .User .AvatarURL ,
235+ ID : fmt .Sprintf ("github:%d" , event .Actor .ID ),
236+ Username : * event .Actor . Name ,
237+ AvatarURL : * event .Actor .AvatarURL ,
243238 }
244239
245240 err = githubIntegration .externalUserRepository .Save (nil , & user )
@@ -256,13 +251,7 @@ func (githubIntegration *githubIntegration) HandleWebhook(ctx core.Context) erro
256251 switch action {
257252 case "closed" :
258253 vulnDependencyVuln := vuln .(* models.DependencyVuln )
259-
260- vulnDependencyVuln .SetTicketState (models .TicketStateClosed )
261- vuln .SetTicketState (models .TicketStateClosed )
262-
263- var vulnEvent models.VulnEvent
264-
265- vulnEvent = models .NewTicketClosedEvent (vuln .GetID (), fmt .Sprintf ("github:%d" , event .User .ID ), fmt .Sprintf ("This issue is closed by %s" , event .User .Username ))
254+ vulnEvent := models .NewTicketClosedEvent (vuln .GetID (), fmt .Sprintf ("github:%d" , event .Actor .ID ), fmt .Sprintf ("This issue is closed by %s" , * event .Actor .Name ))
266255
267256 err := githubIntegration .dependencyVulnRepository .ApplyAndSave (nil , vulnDependencyVuln , & vulnEvent )
268257 if err != nil {
@@ -271,12 +260,7 @@ func (githubIntegration *githubIntegration) HandleWebhook(ctx core.Context) erro
271260
272261 case "reopened" :
273262 vulnDependencyVuln := vuln .(* models.DependencyVuln )
274-
275- vulnDependencyVuln .SetTicketState (models .TicketStateClosed )
276- vuln .SetTicketState (models .TicketStateClosed )
277-
278- var vulnEvent models.VulnEvent
279- vulnEvent = models .NewReopenedEvent (vuln .GetID (), fmt .Sprintf ("github:%d" , event .User .ID ), fmt .Sprintf ("This issue is reopened by %s" , event .User .Username ))
263+ vulnEvent := models .NewReopenedEvent (vuln .GetID (), fmt .Sprintf ("github:%d" , event .Actor .ID ), fmt .Sprintf ("This issue is reopened by %s" , * event .Actor .Name ))
280264
281265 err := githubIntegration .dependencyVulnRepository .ApplyAndSave (nil , vulnDependencyVuln , & vulnEvent )
282266 if err != nil {
@@ -285,12 +269,7 @@ func (githubIntegration *githubIntegration) HandleWebhook(ctx core.Context) erro
285269
286270 case "deleted" :
287271 vulnDependencyVuln := vuln .(* models.DependencyVuln )
288-
289- vulnDependencyVuln .SetTicketState (models .TicketStateDeleted )
290- vuln .SetTicketState (models .TicketStateDeleted )
291-
292- var vulnEvent models.VulnEvent
293- vulnEvent = models .NewTicketDeletedEvent (vuln .GetID (), fmt .Sprintf ("github:%d" , event .User .ID ), fmt .Sprintf ("This issue is deleted by %s" , event .User .Username ))
272+ vulnEvent := models .NewTicketDeletedEvent (vuln .GetID (), fmt .Sprintf ("github:%d" , event .Actor .ID ), fmt .Sprintf ("This issue is deleted by %s" , * event .Actor .Name ))
294273
295274 err := githubIntegration .dependencyVulnRepository .ApplyAndSave (nil , vulnDependencyVuln , & vulnEvent )
296275 if err != nil {
@@ -733,27 +712,11 @@ func (g *githubIntegration) ReopenIssue(ctx context.Context, repoId string, depe
733712}
734713
735714func (g * githubIntegration ) UpdateIssue (ctx context.Context , asset models.Asset , repoId string , dependencyVuln models.DependencyVuln ) error {
736-
737715 if ! strings .HasPrefix (repoId , "github:" ) {
738716 // this integration only handles github repositories.
739717 return nil
740718 }
741719
742- // check if the dependencyVuln is open, if not we need to close the issue
743- if dependencyVuln .State != models .VulnStateOpen {
744- if dependencyVuln .TicketState == models .TicketStateOpen {
745- dependencyVuln .TicketState = models .TicketStateClosed
746- vulnEvent := models .NewTicketClosedEvent (dependencyVuln .ID , "system" , "This issue is closed" )
747-
748- // save the event
749- err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
750- if err != nil {
751- slog .Error ("could not save dependencyVuln and event" , "err" , err )
752- }
753- return nil
754- }
755- }
756-
757720 owner , repo , err := ownerAndRepoFromRepositoryID (repoId )
758721 if err != nil {
759722 return err
@@ -770,7 +733,7 @@ func (g *githubIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
770733 return err
771734 }
772735
773- org , err := g .orgRepository .GetOrgByID (project .OrganizationID )
736+ org , err := g .orgRepository .Read (project .OrganizationID )
774737 if err != nil {
775738 slog .Error ("could not get org by id" , "err" , err )
776739 return err
@@ -794,8 +757,6 @@ func (g *githubIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
794757 if err != nil {
795758 //check if err is 404 - if so, we can not reopen the issue
796759 if err .Error () == "404 Not Found" {
797- // the issue was deleted - we need to set the ticket state to deleted
798- dependencyVuln .TicketState = models .TicketStateDeleted
799760 // we can not reopen the issue - it is deleted
800761 vulnEvent := models .NewTicketDeletedEvent (dependencyVuln .ID , "user" , "This issue is deleted" )
801762 // save the event
@@ -808,39 +769,25 @@ func (g *githubIntegration) UpdateIssue(ctx context.Context, asset models.Asset,
808769 return err
809770 }
810771
811- //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
772+ //check if the ticket state in devguard is different from the ticket state in github , if so we need to update the ticket state in devguard
812773 ticketState := issue .State
813774 devguardTicketState := dependencyVuln .TicketState
814- if * ticketState == "closed" {
815- if devguardTicketState == models .TicketStateOpen {
816- // the issue was closed - we need to set the ticket state to closed
817- dependencyVuln .TicketState = models .TicketStateClosed
818- // create a new event
819- vulnEvent := models .NewTicketClosedEvent (dependencyVuln .ID , "user" , "This issue is closed" )
820-
821- // save the event
822- err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
823- if err != nil {
824- slog .Error ("could not save dependencyVuln and event" , "err" , err )
825- }
826- return nil
775+ if * ticketState == "closed" && devguardTicketState == models .TicketStateOpen {
776+ // create a new event
777+ vulnEvent := models .NewTicketClosedEvent (dependencyVuln .ID , "user" , "This issue is closed" )
827778
779+ // save the event
780+ err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
781+ if err != nil {
782+ slog .Error ("could not save dependencyVuln and event" , "err" , err )
828783 }
829- }
830-
831- if * ticketState == "opened" {
832- if devguardTicketState == models .TicketStateClosed {
833- // the issue was opened - we need to set the ticket state to open
834- dependencyVuln .TicketState = models .TicketStateOpen
835-
836- // create a new event
837- vulnEvent := models .NewReopenedEvent (dependencyVuln .ID , "user" , "This issue is reopened" )
838- // save the event
839- err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
840- if err != nil {
841- slog .Error ("could not save dependencyVuln and event" , "err" , err )
842- }
843- return nil
784+ } else if * ticketState == "open" && devguardTicketState == models .TicketStateClosed {
785+ // create a new event
786+ vulnEvent := models .NewReopenedEvent (dependencyVuln .ID , "user" , "This issue is reopened" )
787+ // save the event
788+ err := g .dependencyVulnRepository .ApplyAndSave (nil , & dependencyVuln , & vulnEvent )
789+ if err != nil {
790+ slog .Error ("could not save dependencyVuln and event" , "err" , err )
844791 }
845792 }
846793
0 commit comments