github.com/covergates/covergates@v0.2.2-0.20201009050117-42ef8a19fb95/routers/api/repo/hook.go (about) 1 package repo 2 3 import ( 4 "github.com/covergates/covergates/core" 5 "github.com/gin-gonic/gin" 6 ) 7 8 // HandleHookCreate for the repository 9 // @Summary create repository webhook 10 // @Tags Repository 11 // @Param scm path string true "SCM" 12 // @Param namespace path string true "Namespace" 13 // @Param name path string true "name" 14 // @Success 200 {object} string ok 15 // @Router /repos/{scm}/{namespace}/{name}/hook/create [post] 16 func HandleHookCreate(service core.HookService) gin.HandlerFunc { 17 return func(c *gin.Context) { 18 repo, _ := c.MustGet(keyRepo).(*core.Repo) 19 ctx := c.Request.Context() 20 if err := service.Create(ctx, repo); err != nil { 21 c.String(500, err.Error()) 22 return 23 } 24 c.String(200, "ok") 25 } 26 } 27 28 // HandleHook event 29 // @Summary handle webhook event 30 // @Tags Repository 31 // @Param scm path string true "SCM" 32 // @Param namespace path string true "Namespace" 33 // @Param name path string true "name" 34 // @Success 200 {object} string ok 35 // @Router /repos/{scm}/{namespace}/{name}/hook [post] 36 func HandleHook(SCM core.SCMService, service core.HookService) gin.HandlerFunc { 37 return func(c *gin.Context) { 38 repo := c.MustGet(keyRepo).(*core.Repo) 39 ctx := c.Request.Context() 40 client, err := SCM.Client(repo.SCM) 41 if err != nil { 42 c.String(500, err.Error()) 43 return 44 } 45 hook, err := client.Webhooks().Parse(c.Request) 46 if err != nil && client.Webhooks().IsWebhookNotSupport(err) { 47 c.String(200, "ok") 48 return 49 } else if err != nil { 50 c.String(500, err.Error()) 51 return 52 } 53 if err := service.Resolve(ctx, repo, hook); err != nil { 54 c.String(500, err.Error()) 55 return 56 } 57 c.String(200, "ok") 58 } 59 }