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  }