2024-08-13 16:42:20 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2024-08-15 10:47:59 +02:00
|
|
|
"flag"
|
2024-08-14 17:43:56 +02:00
|
|
|
"fmt"
|
2024-08-13 16:42:20 +02:00
|
|
|
"log"
|
|
|
|
"net/http"
|
2024-08-14 17:43:56 +02:00
|
|
|
"os"
|
2024-08-13 16:42:20 +02:00
|
|
|
|
|
|
|
"src.opensuse.org/autogits/common"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2024-08-15 10:47:59 +02:00
|
|
|
ListenAddr = "[::1]:8002"
|
|
|
|
AppName = "rabbitmq-forwarder"
|
2024-08-13 16:42:20 +02:00
|
|
|
)
|
|
|
|
|
2024-08-15 10:47:59 +02:00
|
|
|
var DebugMode bool
|
|
|
|
|
2024-08-14 17:43:56 +02:00
|
|
|
func connectToRabbitMQ() {
|
|
|
|
host := os.Getenv("RABBITMQ_HOST")
|
|
|
|
username := os.Getenv("RABBITMQ_USERNAME")
|
|
|
|
password := os.Getenv("RABBITMQ_PASSWORD")
|
|
|
|
|
|
|
|
if len(host) == 0 || len(username) == 0 || len(password) == 0 {
|
2024-08-15 10:47:59 +02:00
|
|
|
fmt.Println("Missing RABBITMQ_HOST, RABBITMQ_USERNAME, RABBITMQ_PASSWORD")
|
2024-08-14 17:43:56 +02:00
|
|
|
os.Exit(1)
|
|
|
|
}
|
2024-08-15 10:47:59 +02:00
|
|
|
|
2024-08-14 17:58:22 +02:00
|
|
|
go ConnectToExchangeForPublish(host, username, password)
|
2024-08-14 17:43:56 +02:00
|
|
|
}
|
|
|
|
|
2024-08-13 16:42:20 +02:00
|
|
|
func main() {
|
2024-08-15 10:47:59 +02:00
|
|
|
flag.BoolVar(&DebugMode, "debug", false, "enables debugging messages")
|
|
|
|
flag.Parse()
|
|
|
|
|
2024-08-14 17:43:56 +02:00
|
|
|
connectToRabbitMQ()
|
2024-08-13 16:42:20 +02:00
|
|
|
|
2024-08-14 17:43:56 +02:00
|
|
|
http.HandleFunc("POST /rabbitmq-forwarder/{Org}", func(res http.ResponseWriter, req *http.Request) {
|
2024-08-13 16:42:20 +02:00
|
|
|
if len(req.Header.Get("Content-Type")) == 0 ||
|
|
|
|
req.Header["Content-Type"][0] != "application/json" ||
|
|
|
|
req.Method != "POST" {
|
|
|
|
|
|
|
|
res.WriteHeader(http.StatusInternalServerError)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
hdr := req.Header[common.GiteaRequestHeader]
|
|
|
|
if len(hdr) != 1 {
|
|
|
|
res.WriteHeader(http.StatusInternalServerError)
|
2024-08-15 10:47:59 +02:00
|
|
|
log.Printf("Multiple Gitea headers received. %#v\n", hdr)
|
|
|
|
if DebugMode {
|
|
|
|
log.Println(req.Header)
|
|
|
|
}
|
2024-08-13 16:42:20 +02:00
|
|
|
return
|
|
|
|
}
|
|
|
|
reqType := hdr[0]
|
2024-08-14 17:43:56 +02:00
|
|
|
err := PublicMessage(reqType, req.PathValue("Org"), req.Body)
|
2024-08-13 16:42:20 +02:00
|
|
|
if err != nil {
|
|
|
|
log.Printf("hook (%s) processing error: %v\n", reqType, err)
|
|
|
|
res.WriteHeader(http.StatusBadRequest)
|
|
|
|
} else {
|
|
|
|
res.WriteHeader(http.StatusOK)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
log.Fatal(http.ListenAndServe(ListenAddr, nil))
|
|
|
|
}
|