2017-06-10 16:07:23 +02:00
|
|
|
package git
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
libHTTP "github.com/genofire/golang-lib/http"
|
|
|
|
"github.com/genofire/golang-lib/log"
|
|
|
|
xmpp "github.com/mattn/go-xmpp"
|
|
|
|
|
2017-06-10 16:31:56 +02:00
|
|
|
"github.com/genofire/hook2xmpp/config"
|
|
|
|
ownXMPP "github.com/genofire/hook2xmpp/xmpp"
|
2017-06-10 16:07:23 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
type Handler struct {
|
|
|
|
client *xmpp.Client
|
|
|
|
hooks map[string]config.Hook
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewHandler(client *xmpp.Client, newHooks []config.Hook) *Handler {
|
|
|
|
hooks := make(map[string]config.Hook)
|
|
|
|
|
|
|
|
for _, hook := range newHooks {
|
|
|
|
if hook.Type == "git" {
|
|
|
|
hooks[hook.URL] = hook
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return &Handler{
|
|
|
|
client: client,
|
|
|
|
hooks: hooks,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var eventHeader = []string{"X-GitHub-Event", "X-Gogs-Event"}
|
|
|
|
|
|
|
|
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
|
|
var payload map[string]interface{}
|
|
|
|
event := ""
|
|
|
|
for _, head := range eventHeader {
|
|
|
|
event = r.Header.Get(head)
|
|
|
|
|
|
|
|
if event != "" {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if event == "status" {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
libHTTP.Read(r, &payload)
|
|
|
|
msg := PayloadToString(event, payload)
|
|
|
|
repository := payload["repository"].(map[string]interface{})
|
|
|
|
url := repository["html_url"].(string)
|
|
|
|
|
|
|
|
hook, ok := h.hooks[url]
|
|
|
|
if !ok {
|
|
|
|
log.Log.Errorf("No hook found for: '%s'", url)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Log.WithField("type", "git").Print(msg)
|
|
|
|
ownXMPP.Notify(h.client, hook, msg)
|
|
|
|
}
|