MCPcopy
hub / github.com/dunglas/mercure / initSubscription

Method initSubscription

subscription.go:123–171  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

121}
122
123func (h *Hub) initSubscription(w http.ResponseWriter, r *http.Request) (span trace.Span, currentURL, lastEventID string, subscribers []*Subscriber, ok bool) {
124 ctx, span := startSpan(r.Context(), "mercure.subscriptions", trace.WithSpanKind(trace.SpanKindInternal))
125 currentURL = r.URL.RequestURI()
126
127 if h.subscriberJWTKeyFunc != nil {
128 claims, err := h.authorize(r, false)
129 if err != nil || claims == nil || claims.Mercure.Subscribe == nil || !canReceive(h.topicSelectorStore, []string{currentURL}, claims.Mercure.Subscribe) {
130 h.httpAuthorizationError(w, r, err)
131
132 if err != nil {
133 recordSpanError(span, err)
134 }
135
136 return span, "", "", nil, false
137 }
138 }
139
140 transport, ok := h.transport.(TransportSubscribers)
141 if !ok {
142 panic("The transport isn't an instance of hub.TransportSubscribers")
143 }
144
145 var err error
146
147 lastEventID, subscribers, err = transport.GetSubscribers(ctx)
148 if err != nil {
149 http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
150
151 if h.logger.Enabled(ctx, slog.LevelError) {
152 h.logger.LogAttrs(ctx, slog.LevelError, "Error retrieving subscribers", slog.Any("error", err))
153 }
154
155 recordSpanError(span, err)
156
157 return span, currentURL, lastEventID, subscribers, false
158 }
159
160 if r.Header.Get("If-None-Match") == lastEventID {
161 w.WriteHeader(http.StatusNotModified)
162
163 return span, "", "", nil, false
164 }
165
166 header := w.Header()
167 header["Content-Type"] = jsonldContentType
168 header["ETag"] = []string{lastEventID}
169
170 return span, currentURL, lastEventID, subscribers, true
171}

Callers 2

SubscriptionsHandlerMethod · 0.95
SubscriptionHandlerMethod · 0.95

Calls 10

authorizeMethod · 0.95
startSpanFunction · 0.85
canReceiveFunction · 0.85
recordSpanErrorFunction · 0.85
ErrorMethod · 0.80
EnabledMethod · 0.80
GetSubscribersMethod · 0.65
WriteHeaderMethod · 0.45
HeaderMethod · 0.45

Tested by

no test coverage detected