refactor(webhook): extract async context detach into a helper

This commit is contained in:
Julien Neuhart
2026-06-02 18:50:47 +02:00
parent 190cad0ee2
commit cb461bb1fe
3 changed files with 89 additions and 21 deletions

View File

@@ -314,27 +314,7 @@ func webhookMiddleware(w *Webhook) api.Middleware {
return c.NoContent(http.StatusNoContent)
}
if deadline, ok := ctx.Deadline(); ok {
// Create a new context derived from Background (detached from Request)
// but with the same deadline as the original context.
detachedCtx, detachedCancel := context.WithDeadline(context.Background(), deadline)
// Replace the embedded context in the api.Context struct.
// The modules downstream will now use this detached context.
ctx.Context = detachedCtx
// We must wrap the cancel function.
// 1. detachedCancel() cleans up our new detached context.
// 2. originalCancel() (captured from c.Get("cancel")) cleans up the working directory.
originalCancel := cancel
cancel = func() {
detachedCancel()
originalCancel()
}
} else {
// Fallback if no deadline was set (rare, as newContext enforces it).
ctx.Context = context.Background()
}
cancel = detachAsyncContext(ctx, cancel)
// As a webhook URL has been given, we handle the request in a
// goroutine and return immediately.