From 194302f4cf33143c6833e8d57b2213d23de9a98a Mon Sep 17 00:00:00 2001 From: Catherine Date: Mon, 15 Sep 2025 16:18:16 +0000 Subject: [PATCH] Accept GitHub, Gitea, and Gogs webhook payloads. --- src/pages.go | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/pages.go b/src/pages.go index da6f14a..831580d 100644 --- a/src/pages.go +++ b/src/pages.go @@ -179,16 +179,35 @@ func postPage(w http.ResponseWriter, r *http.Request) error { } } + eventName := "" + for _, header := range []string{ + "X-Forgejo-Event", + "X-GitHub-Event", + "X-Gitea-Event", + "X-Gogs-Event", + } { + eventName = r.Header.Get(header) + if eventName != "" { + break + } + } + + if eventName == "" { + http.Error(w, + "expected a Forgejo, GitHub, Gitea, or Gogs webhook request", http.StatusBadRequest) + return fmt.Errorf("event expected") + } + + if eventName != "push" { + http.Error(w, "only push events are allowed", http.StatusBadRequest) + return fmt.Errorf("invalid event") + } + if r.Header.Get("Content-Type") != "application/json" { http.Error(w, "only JSON payload is allowed", http.StatusBadRequest) return fmt.Errorf("invalid content type") } - if r.Header.Get("X-Forgejo-Event") != "push" { - http.Error(w, "only push events are allowed", http.StatusBadRequest) - return fmt.Errorf("invalid event") - } - requestBody, err := io.ReadAll(r.Body) if err != nil { return fmt.Errorf("body read: %s", err)