@@ 0,0 1,46 @@
+package webhooks
+
+import (
+ "context"
+ "net/http"
+)
+
+var ctxKey = &contextKey{"webhooks"}
+
+func Middleware(queue *WebhookQueue) func(next http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ctx := context.WithValue(r.Context(), ctxKey, queue)
+ r = r.WithContext(ctx)
+ next.ServeHTTP(w, r)
+ })
+ }
+}
+
+func ForContext(ctx context.Context) *WebhookQueue {
+ queue, ok := ctx.Value(ctxKey).(*WebhookQueue)
+ if !ok {
+ panic("No webhook queue for this context")
+ }
+ return queue
+}
+
+var legacyCtxKey = &contextKey{"legacy"}
+
+func LegacyMiddleware(queue *LegacyQueue) func(next http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ctx := context.WithValue(r.Context(), legacyCtxKey, queue)
+ r = r.WithContext(ctx)
+ next.ServeHTTP(w, r)
+ })
+ }
+}
+
+func LegacyForContext(ctx context.Context) *LegacyQueue {
+ queue, ok := ctx.Value(legacyCtxKey).(*LegacyQueue)
+ if !ok {
+ panic("No legacy webhook queue for this context")
+ }
+ return queue
+}