92 lines
2.1 KiB
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 )
|
|
}
|
|
|
|
}
|
|
*/
|
|
|
|
|