init from gitlab
This commit is contained in:
58
internal/server/api/github.go
Normal file
58
internal/server/api/github.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"github.com/google/go-github/v48/github"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/rs/zerolog/log"
|
||||
"gitlab.com/texm/shokku/internal/env"
|
||||
"gitlab.com/texm/shokku/internal/models"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func ReceiveGithubWebhookEvent(e *env.Env, c echo.Context) error {
|
||||
var ghApp models.GithubApp
|
||||
if ghErr := e.DB.First(&ghApp).Error; ghErr != nil {
|
||||
log.Error().Err(ghErr).Msg("failed to retrieve github app info")
|
||||
return echo.ErrInternalServerError
|
||||
}
|
||||
|
||||
req := c.Request()
|
||||
secret := []byte(ghApp.WebhookSecret)
|
||||
payload, validationErr := github.ValidatePayload(req, secret)
|
||||
if validationErr != nil {
|
||||
return echo.ErrBadRequest
|
||||
}
|
||||
event, parseErr := github.ParseWebHook(github.WebHookType(req), payload)
|
||||
if parseErr != nil {
|
||||
log.Error().Err(parseErr).Msg("failed to parse webhook")
|
||||
return echo.ErrInternalServerError
|
||||
}
|
||||
var err error
|
||||
switch event := event.(type) {
|
||||
case *github.MetaEvent:
|
||||
err = processMetaEvent(e, event)
|
||||
case *github.PushEvent:
|
||||
err = processPushEvent(e, event)
|
||||
default:
|
||||
log.Error().
|
||||
Interface("type", event).
|
||||
Msg("received unsupported webhook event")
|
||||
return echo.ErrInternalServerError
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, err)
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusOK)
|
||||
}
|
||||
|
||||
func processMetaEvent(e *env.Env, event *github.MetaEvent) error {
|
||||
log.Debug().Interface("event", event).Msg("got meta event")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func processPushEvent(e *env.Env, event *github.PushEvent) error {
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user