package handler import ( "log" "net/http" "github.com/gin-gonic/gin" "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.Printf("Webhook error: %v", err) 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.Printf("Issue event error: %v", err) } case "push": h.Sync.HandlePushEvent(ctx, event) } c.JSON(http.StatusOK, gin.H{"status": "ok"}) }