hooker/job.go

95 lines
2.0 KiB
Go

package main
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
)
type Owner struct {
Login string `json:"login"`
Username string `json:"username"`
}
type Repo struct {
Name string `json:"name"`
ID uint64 `json:"id"`
Owner Owner `json:"owner"`
}
type JsonRoot struct {
Repo Repo `json:"repository"`
}
func handleRoot(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return // Drop
}
body, err := io.ReadAll(r.Body)
if err != nil {
http.Error(w, "Could not read request body", http.StatusBadRequest)
return
}
var JsonRoot JsonRoot
err = json.Unmarshal(body, &JsonRoot); if err != nil {
log.Println("Can not Unmarshal body json")
http.Error(w,"Can not Unmarshal body json", http.StatusBadRequest)
return
}
fmt.Printf("JsonRoot: %v\n", JsonRoot)
if JsonRoot.Repo.ID != task.RepoID {
log.Printf(
"Repo ID sent: %d, Expecting: %d.",
JsonRoot.Repo.ID,
task.RepoID,
)
w.WriteHeader(http.StatusNotFound)
return
}
if JsonRoot.Repo.Owner.Login != task.Owner {
log.Printf(
"Owner sent: %s, Expecting: %s",
JsonRoot.Repo.Owner.Login,
task.Owner,
)
w.WriteHeader(http.StatusNotFound)
return
}
DeliveryUUID := findXDeliveryUUID(r)
if DeliveryUUID == "" {
log.Println("Could not find Delivery UUID")
w.WriteHeader(http.StatusBadRequest)
return
}
log.Println("Starting New Job", DeliveryUUID)
go RunJob(&task, DeliveryUUID, log.Default())
}
func findXDeliveryUUID(r *http.Request) string {
var headerVal string
possibleHeaders := []string{
"X-Gitea-Delivery",
"X-GitHub-Delivery",
"X-Gogs-Delivery",
}
for _, head := range possibleHeaders {
headerVal = r.Header.Get(head)
if headerVal != "" { break }
}
return headerVal
}