package trigger import ( "net/http" "strings" . "github.com/mickael-kerjean/filestash/server/common" "github.com/gorilla/mux" ) var ( webhook_event = make(chan ITriggerEvent, 5) webhook_name = "webhook" ) func init() { Hooks.Register.WorkflowTrigger(&WebhookTrigger{}) Hooks.Register.HttpEndpoint(func(r *mux.Router, app *App) error { r.HandleFunc(WithBase("/api/workflow/webhook"), func(w http.ResponseWriter, r *http.Request) { if err := TriggerEvents(webhook_event, webhook_name, webhookCallback(r)); err != nil { SendErrorResult(w, err) return } SendSuccessResult(w, nil) }).Methods("GET", "POST") return nil }) } func webhookCallback(r *http.Request) func(params map[string]string) (map[string]string, bool) { return func(params map[string]string) (map[string]string, bool) { headers := map[string]any{} for k, v := range r.Header { headers[k] = strings.Join(v, ", ") } query := map[string]any{} for k, v := range r.URL.Query() { query[k] = strings.Join(v, ", ") } return map[string]string{ "method": r.Method, "headers": toJSON(headers), "query": toJSON(query), }, true } } type WebhookTrigger struct{} func (this *WebhookTrigger) Manifest() WorkflowSpecs { return WorkflowSpecs{ Name: webhook_name, Title: "From a WebHook", Icon: ``, Specs: Form{ Elmnts: []FormElement{ { Name: "url", Type: "text", ReadOnly: true, Value: "/api/workflow/webhook", }, }, }, Order: 5, } } func (this *WebhookTrigger) Init() (chan ITriggerEvent, error) { return webhook_event, nil }