aboutsummaryrefslogtreecommitdiffstats
path: root/services/webhook/webhook.go
diff options
context:
space:
mode:
authorKN4CK3R <admin@oldschoolhack.me>2021-06-27 21:21:09 +0200
committerGitHub <noreply@github.com>2021-06-27 20:21:09 +0100
commit9b1b4b543358c212a3da2b480d361d0c1375b279 (patch)
tree2bb767491b82bde8a76bf8b3148f8b7aaae9167c /services/webhook/webhook.go
parent0b27b93728fd3cf2ecc82ac6a2b5859270543ef2 (diff)
downloadgitea-9b1b4b543358c212a3da2b480d361d0c1375b279.tar.gz
gitea-9b1b4b543358c212a3da2b480d361d0c1375b279.zip
Refactor Webhook + Add X-Hub-Signature (#16176)
This PR removes multiple unneeded fields from the `HookTask` struct and adds the two headers `X-Hub-Signature` and `X-Hub-Signature-256`. ## :warning: BREAKING :warning: * The `Secret` field is no longer passed as part of the payload. * "Breaking" change (or fix?): The webhook history shows the real called url and not the url registered in the webhook (`deliver.go`@129). Close #16115 Fixes #7788 Fixes #11755 Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'services/webhook/webhook.go')
-rw-r--r--services/webhook/webhook.go40
1 files changed, 8 insertions, 32 deletions
diff --git a/services/webhook/webhook.go b/services/webhook/webhook.go
index cc79ec15d1..d094a7754b 100644
--- a/services/webhook/webhook.go
+++ b/services/webhook/webhook.go
@@ -5,9 +5,6 @@
package webhook
import (
- "crypto/hmac"
- "crypto/sha256"
- "encoding/hex"
"fmt"
"strings"
@@ -21,12 +18,12 @@ import (
)
type webhook struct {
- name models.HookTaskType
+ name models.HookType
payloadCreator func(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error)
}
var (
- webhooks = map[models.HookTaskType]*webhook{
+ webhooks = map[models.HookType]*webhook{
models.SLACK: {
name: models.SLACK,
payloadCreator: GetSlackPayload,
@@ -60,7 +57,7 @@ var (
// RegisterWebhook registers a webhook
func RegisterWebhook(name string, webhook *webhook) {
- webhooks[models.HookTaskType(name)] = webhook
+ webhooks[models.HookType(name)] = webhook
}
// IsValidHookTaskType returns true if a webhook registered
@@ -68,7 +65,7 @@ func IsValidHookTaskType(name string) bool {
if name == models.GITEA || name == models.GOGS {
return true
}
- _, ok := webhooks[models.HookTaskType(name)]
+ _, ok := webhooks[models.HookType(name)]
return ok
}
@@ -161,35 +158,14 @@ func prepareWebhook(w *models.Webhook, repo *models.Repository, event models.Hoo
return fmt.Errorf("create payload for %s[%s]: %v", w.Type, event, err)
}
} else {
- p.SetSecret(w.Secret)
payloader = p
}
- var signature string
- if len(w.Secret) > 0 {
- data, err := payloader.JSONPayload()
- if err != nil {
- log.Error("prepareWebhooks.JSONPayload: %v", err)
- }
- sig := hmac.New(sha256.New, []byte(w.Secret))
- _, err = sig.Write(data)
- if err != nil {
- log.Error("prepareWebhooks.sigWrite: %v", err)
- }
- signature = hex.EncodeToString(sig.Sum(nil))
- }
-
if err = models.CreateHookTask(&models.HookTask{
- RepoID: repo.ID,
- HookID: w.ID,
- Typ: w.Type,
- URL: w.URL,
- Signature: signature,
- Payloader: payloader,
- HTTPMethod: w.HTTPMethod,
- ContentType: w.ContentType,
- EventType: event,
- IsSSL: w.IsSSL,
+ RepoID: repo.ID,
+ HookID: w.ID,
+ Payloader: payloader,
+ EventType: event,
}); err != nil {
return fmt.Errorf("CreateHookTask: %v", err)
}