package handler import ( "net/http" "github.com/gin-gonic/gin" "github.com/rs/zerolog/log" "github.com/mattnite/cairn/internal/forgejo" ) type WebhookHandler struct { Sync *forgejo.Sync Secret string } func (h *WebhookHandler) Handle(c *gin.Context) { event, eventType, err := forgejo.VerifyAndParse(c.Request, h.Secret) if err != nil { log.Warn().Err(err).Msg("Webhook verification failed") c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) return } ctx := c.Request.Context() switch eventType { case "issues": if err := h.Sync.HandleIssueEvent(ctx, event); err != nil { log.Error().Err(err).Msg("Issue event error") } case "push": h.Sync.HandlePushEvent(ctx, event) } c.JSON(http.StatusOK, gin.H{"status": "ok"}) }