Skip to content

Commit c3cf711

Browse files
committed
refactor run webhook
1 parent 4747515 commit c3cf711

File tree

2 files changed

+51
-42
lines changed

2 files changed

+51
-42
lines changed

pkg/mock/in_memory.go

Lines changed: 50 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -403,53 +403,63 @@ func (s *inMemoryServer) startWebhook(webhook *Webhook) (err error) {
403403
memLogger.Info("stop webhook server", "name", wh.Name)
404404
return
405405
case <-timer.C:
406-
client := http.DefaultClient
407-
408-
payload, err := render.RenderAsReader("mock webhook server payload", wh.Request.Body, wh)
409-
if err != nil {
410-
memLogger.Error(err, "Error when render payload")
411-
continue
406+
if err = runWebhook(s.ctx, s, wh); err != nil {
407+
memLogger.Error(err, "Error when run webhook")
412408
}
409+
}
410+
}
411+
}(webhook)
412+
return
413+
}
413414

414-
method := util.EmptyThenDefault(wh.Request.Method, http.MethodPost)
415-
api, err := render.Render("webhook request api", wh.Request.Path, s)
416-
if err != nil {
417-
memLogger.Error(err, "Error when render api", "raw", wh.Request.Path)
418-
continue
419-
}
415+
func runWebhook(ctx context.Context, objCtx interface{}, wh *Webhook) (err error) {
416+
client := http.DefaultClient
420417

421-
var bearerToken string
422-
bearerToken, err = getBearerToken(s.ctx, wh.Request)
423-
if err != nil {
424-
memLogger.Error(err, "Error when render bearer token")
425-
continue
426-
}
418+
var payload io.Reader
419+
payload, err = render.RenderAsReader("mock webhook server payload", wh.Request.Body, wh)
420+
if err != nil {
421+
err = fmt.Errorf("error when render payload: %w", err)
422+
return
423+
}
427424

428-
req, err := http.NewRequestWithContext(s.ctx, method, api, payload)
429-
if err != nil {
430-
memLogger.Error(err, "Error when create request")
431-
continue
432-
}
425+
method := util.EmptyThenDefault(wh.Request.Method, http.MethodPost)
426+
var api string
427+
api, err = render.Render("webhook request api", wh.Request.Path, objCtx)
428+
if err != nil {
429+
err = fmt.Errorf("error when render api: %w", err)
430+
return
431+
}
433432

434-
if bearerToken != "" {
435-
memLogger.V(7).Info("set bearer token", "token", bearerToken)
436-
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", bearerToken))
437-
}
433+
var bearerToken string
434+
bearerToken, err = getBearerToken(ctx, wh.Request)
435+
if err != nil {
436+
memLogger.Error(err, "Error when render bearer token")
437+
return
438+
}
438439

439-
for k, v := range wh.Request.Header {
440-
req.Header.Set(k, v)
441-
}
440+
var req *http.Request
441+
req, err = http.NewRequestWithContext(ctx, method, api, payload)
442+
if err != nil {
443+
memLogger.Error(err, "Error when create request")
444+
return
445+
}
442446

443-
resp, err := client.Do(req)
444-
if err != nil {
445-
memLogger.Error(err, "Error when sending webhook")
446-
} else {
447-
data, _ := io.ReadAll(resp.Body)
448-
memLogger.V(7).Info("received from webhook", "code", resp.StatusCode, "response", string(data))
449-
}
450-
}
451-
}
452-
}(webhook)
447+
if bearerToken != "" {
448+
memLogger.V(7).Info("set bearer token", "token", bearerToken)
449+
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", bearerToken))
450+
}
451+
452+
for k, v := range wh.Request.Header {
453+
req.Header.Set(k, v)
454+
}
455+
456+
resp, err := client.Do(req)
457+
if err != nil {
458+
err = fmt.Errorf("error when sending webhook")
459+
} else {
460+
data, _ := io.ReadAll(resp.Body)
461+
memLogger.V(7).Info("received from webhook", "code", resp.StatusCode, "response", string(data))
462+
}
453463
return
454464
}
455465

@@ -459,7 +469,6 @@ type bearerToken struct {
459469

460470
func getBearerToken(ctx context.Context, request RequestWithAuth) (token string, err error) {
461471
if request.BearerAPI == "" {
462-
memLogger.Info("bearer token is not set")
463472
return
464473
}
465474

pkg/mock/testdata/api.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ proxies:
5555
- path: /v1/invalid-template
5656
target: http://localhost:{{.GetPort}
5757
webhooks:
58-
- timer: 1ms
58+
- timer: 1m
5959
name: baidu
6060
request:
6161
method: GET

0 commit comments

Comments
 (0)