From 9f100a45c6f65d9f41f619d3c683361cad0f72fc Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Sat, 12 Dec 2020 23:33:19 +0800
Subject: [PATCH] Possible fix the webhook API creation (#13960)

* Possible fix the webhook API creation

* Fix api create webhook bug
---
 routers/api/v1/utils/hook.go | 3 ++-
 services/webhook/webhook.go  | 7 +++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/routers/api/v1/utils/hook.go b/routers/api/v1/utils/hook.go
index c8471184f..8decc5cf4 100644
--- a/routers/api/v1/utils/hook.go
+++ b/routers/api/v1/utils/hook.go
@@ -6,6 +6,7 @@ package utils
 
 import (
 	"encoding/json"
+	"fmt"
 	"net/http"
 	"strings"
 
@@ -53,7 +54,7 @@ func GetRepoHook(ctx *context.APIContext, repoID, hookID int64) (*models.Webhook
 // write the appropriate error to `ctx`. Return whether the form is valid
 func CheckCreateHookOption(ctx *context.APIContext, form *api.CreateHookOption) bool {
 	if !webhook.IsValidHookTaskType(form.Type) {
-		ctx.Error(http.StatusUnprocessableEntity, "", "Invalid hook type")
+		ctx.Error(http.StatusUnprocessableEntity, "", fmt.Sprintf("Invalid hook type: %s", form.Type))
 		return false
 	}
 	for _, name := range []string{"url", "content_type"} {
diff --git a/services/webhook/webhook.go b/services/webhook/webhook.go
index a86d638ab..b779b3846 100644
--- a/services/webhook/webhook.go
+++ b/services/webhook/webhook.go
@@ -60,12 +60,15 @@ var (
 
 // RegisterWebhook registers a webhook
 func RegisterWebhook(name string, webhook *webhook) {
-	webhooks[models.HookTaskType(name)] = webhook
+	webhooks[models.HookTaskType(strings.TrimSpace(name))] = webhook
 }
 
 // IsValidHookTaskType returns true if a webhook registered
 func IsValidHookTaskType(name string) bool {
-	_, ok := webhooks[models.HookTaskType(name)]
+	if name == models.GITEA || name == models.GOGS {
+		return true
+	}
+	_, ok := webhooks[models.HookTaskType(strings.TrimSpace(name))]
 	return ok
 }