vikunja/pkg/webhooks/middleware.go

92 lines
2.1 KiB
Go

package webhooks
import (
"code.vikunja.io/api/pkg/log"
"github.com/ThreeDotsLabs/watermill/message"
)
// type middlwareFunc func(message.HandlerFunc) message.HandlerFunc
func GenerateMiddleware() message.HandlerMiddleware {
runtimeConfig := ProcessConfig()
return func(hf message.HandlerFunc) message.HandlerFunc {
return func(msg *message.Message) ([]*message.Message, error) {
topic := message.SubscribeTopicFromCtx(msg.Context() )
TheGreatWebhookHandler(runtimeConfig, topic, msg)
newMsg, err := hf(msg)
if err != nil {
return nil, err
}
return newMsg, nil
}
}
}
func TheGreatWebhookHandler(cfg []WebhookRuntimeConfig, topic string, msg *message.Message) {
log.Debugf("Webhook handler for '%s'", topic)
for i, entry := range cfg {
log.Debugf("Checking webhook config [%d]", i)
if entry.FilterFunc(topic) {
log.Debugf("Executing webhook [%d]", i)
entry.ExecuteFunc(topic, msg)
}
}
}
/*
func OldWebhookMiddleware(h message.HandlerFunc) message.HandlerFunc {
return func(msg *message.Message) ([]*message.Message, error) {
topic := message.SubscribeTopicFromCtx(msg.Context() )
//TheGreatWebhookHandler(topic, msg)
*
log.Debugf("MIDDLEWARE: %s ", msg )
log.Debugf("MIDDLEWARE META : %s ", msg.Metadata )
log.Debugf("MIDDLEWARE PAYLOAD : %s ", msg.Payload )
log.Debugf("MIDDLEWARE PUB : %s ", message.PublishTopicFromCtx(msg.Context()) )
log.Debugf("MIDDLEWARE SUB : %s ", message.SubscribeTopicFromCtx(msg.Context()) )
*
newMsg, err := h(msg)
if err != nil {
return nil, err
}
return newMsg, nil
}
}
func OldTheGreatWebhookHandler(name string, msg *message.Message) {
log.Debugf("Webhook for %s => %s", name, msg.Payload)
for endpoint := range config.WebhookConf {
log.Debugf("ENDPOINT : %s ", endpoint )
}
base_url := "123" // config.WebhookURL.GetString()
webhook_url := fmt.Sprintf("%s?event=%s", base_url, name)
data := bytes.NewBuffer(msg.Payload)
_, err := http.Post(webhook_url, "application/json",data)
if err != nil {
log.Debugf("Webhook failed : %s ", webhook_url )
} else {
log.Debugf("Webhook success : %s ", webhook_url )
}
}
*/