c6bc0d71ff
Signed-off-by: Steven Kriegler <61625851+justusbunsi@users.noreply.github.com>
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
|
|
giteaSdk "gitea-sonarqube-pr-bot/internal/clients/gitea"
|
|
sqSdk "gitea-sonarqube-pr-bot/internal/clients/sonarqube_sdk"
|
|
webhook "gitea-sonarqube-pr-bot/internal/webhooks/gitea"
|
|
)
|
|
|
|
type GiteaWebhookHandler struct {
|
|
giteaSdk giteaSdk.GiteaSdkInterface
|
|
sqSdk sqSdk.SonarQubeSdkInterface
|
|
}
|
|
|
|
func (h *GiteaWebhookHandler) Handle(rw http.ResponseWriter, r *http.Request) {
|
|
rw.Header().Set("Content-Type", "application/json")
|
|
|
|
if r.Body != nil {
|
|
defer r.Body.Close()
|
|
}
|
|
|
|
raw, err := ioutil.ReadAll(r.Body)
|
|
|
|
if err != nil {
|
|
log.Printf("Error reading request body %s", err.Error())
|
|
rw.WriteHeader(http.StatusInternalServerError)
|
|
io.WriteString(rw, fmt.Sprintf(`{"message": "%s"}`, err.Error()))
|
|
return
|
|
}
|
|
|
|
w, ok := webhook.New(raw)
|
|
if !ok {
|
|
rw.WriteHeader(http.StatusUnprocessableEntity)
|
|
io.WriteString(rw, `{"message": "Error parsing POST body."}`)
|
|
return
|
|
}
|
|
|
|
if err := w.Validate(); err != nil {
|
|
rw.WriteHeader(http.StatusOK)
|
|
io.WriteString(rw, fmt.Sprintf(`{"message": "%s"}`, err.Error()))
|
|
return
|
|
}
|
|
|
|
rw.WriteHeader(http.StatusOK)
|
|
io.WriteString(rw, `{"message": "Processing data. See bot logs for details."}`)
|
|
|
|
w.ProcessData(h.giteaSdk, h.sqSdk)
|
|
}
|
|
|
|
func NewGiteaWebhookHandler(g giteaSdk.GiteaSdkInterface, sq sqSdk.SonarQubeSdkInterface) *GiteaWebhookHandler {
|
|
return &GiteaWebhookHandler{
|
|
giteaSdk: g,
|
|
sqSdk: sq,
|
|
}
|
|
}
|