From 96ccf6b92395b4d8424ff0fa9b3b829ff5d459ce Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 14 Sep 2023 12:21:20 +0200 Subject: [PATCH] feat(webhooks): add route to get all available webhook events --- pkg/models/webhooks.go | 12 ++++++++++++ pkg/routes/api/v1/webhooks.go | 27 +++++++++++++++++++++++++++ pkg/routes/routes.go | 1 + 3 files changed, 40 insertions(+) create mode 100644 pkg/routes/api/v1/webhooks.go diff --git a/pkg/models/webhooks.go b/pkg/models/webhooks.go index f81f3962e13..35510150e9b 100644 --- a/pkg/models/webhooks.go +++ b/pkg/models/webhooks.go @@ -20,6 +20,7 @@ import ( "code.vikunja.io/api/pkg/events" "code.vikunja.io/api/pkg/user" "code.vikunja.io/web" + "sort" "sync" "time" "xorm.io/xorm" @@ -71,6 +72,17 @@ func RegisterEventForWebhook(event WebhookEvent) { }) } +func GetAvailableWebhookEvents() []string { + evts := []string{} + for e := range availableWebhookEvents { + evts = append(evts, e) + } + + sort.Strings(evts) + + return evts +} + func (w *Webhook) Create(s *xorm.Session, a web.Auth) (err error) { // TODO: check valid webhook events w.CreatedByID = a.GetID() diff --git a/pkg/routes/api/v1/webhooks.go b/pkg/routes/api/v1/webhooks.go new file mode 100644 index 00000000000..1f418e3c40d --- /dev/null +++ b/pkg/routes/api/v1/webhooks.go @@ -0,0 +1,27 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public Licensee as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public Licensee for more details. +// +// You should have received a copy of the GNU Affero General Public Licensee +// along with this program. If not, see . + +package v1 + +import ( + "code.vikunja.io/api/pkg/models" + "github.com/labstack/echo/v4" + "net/http" +) + +func GetAvailableWebhookEvents(c echo.Context) error { + return c.JSON(http.StatusOK, models.GetAvailableWebhookEvents()) +} diff --git a/pkg/routes/routes.go b/pkg/routes/routes.go index 0905d7bde8e..4efaaecc4b7 100644 --- a/pkg/routes/routes.go +++ b/pkg/routes/routes.go @@ -585,6 +585,7 @@ func registerAPIRoutes(a *echo.Group) { a.PUT("/project/:project/webhooks", webhookProvider.CreateWeb) a.DELETE("/project/:project/webhooks/:webhook", webhookProvider.DeleteWeb) a.POST("/project/:project/webhooks/:webhook", webhookProvider.UpdateWeb) + a.GET("/webhooks/events", apiv1.GetAvailableWebhookEvents) } func registerMigrations(m *echo.Group) {