Signed-off-by: Anirudh Oppiliappan anirudh@tangled.org
+1
appview/repo/router.go
+1
appview/repo/router.go
+66
-3
appview/repo/webhooks.go
+66
-3
appview/repo/webhooks.go
···
31
31
return
32
32
}
33
33
34
+
// fetch recent deliveries for each webhook
35
+
deliveriesMap := make(map[int64][]models.WebhookDelivery)
36
+
for _, webhook := range webhooks {
37
+
deliveries, err := db.GetWebhookDeliveries(rp.db, webhook.Id, 4)
38
+
if err != nil {
39
+
l.Error("failed to get webhook deliveries", "webhook_id", webhook.Id, "err", err)
40
+
// continue even if we can't get deliveries for one webhook
41
+
continue
42
+
}
43
+
deliveriesMap[webhook.Id] = deliveries
44
+
}
45
+
34
46
rp.pages.RepoWebhooksSettings(w, pages.RepoWebhooksSettingsParams{
35
-
LoggedInUser: user,
36
-
RepoInfo: rp.repoResolver.GetRepoInfo(r, user),
37
-
Webhooks: webhooks,
47
+
LoggedInUser: user,
48
+
RepoInfo: rp.repoResolver.GetRepoInfo(r, user),
49
+
Webhooks: webhooks,
50
+
WebhookDeliveries: deliveriesMap,
38
51
})
39
52
}
40
53
···
302
315
303
316
rp.pages.HxRefresh(w)
304
317
}
318
+
319
+
// WebhookDeliveries returns all deliveries for a webhook (for modal display)
320
+
func (rp *Repo) WebhookDeliveries(w http.ResponseWriter, r *http.Request) {
321
+
l := rp.logger.With("handler", "WebhookDeliveries")
322
+
323
+
f, err := rp.repoResolver.Resolve(r)
324
+
if err != nil {
325
+
l.Error("failed to get repo and knot", "err", err)
326
+
w.WriteHeader(http.StatusBadRequest)
327
+
return
328
+
}
329
+
330
+
idStr := chi.URLParam(r, "id")
331
+
id, err := strconv.ParseInt(idStr, 10, 64)
332
+
if err != nil {
333
+
l.Error("invalid webhook id", "err", err)
334
+
w.WriteHeader(http.StatusBadRequest)
335
+
return
336
+
}
337
+
338
+
webhook, err := db.GetWebhook(rp.db, id)
339
+
if err != nil {
340
+
l.Error("failed to get webhook", "err", err)
341
+
w.WriteHeader(http.StatusNotFound)
342
+
return
343
+
}
344
+
345
+
// Verify webhook belongs to this repo
346
+
if webhook.RepoAt != f.RepoAt() {
347
+
l.Error("webhook does not belong to repo", "webhook_repo", webhook.RepoAt, "current_repo", f.RepoAt())
348
+
w.WriteHeader(http.StatusForbidden)
349
+
return
350
+
}
351
+
352
+
deliveries, err := db.GetWebhookDeliveries(rp.db, webhook.Id, 100)
353
+
if err != nil {
354
+
l.Error("failed to get webhook deliveries", "err", err)
355
+
rp.pages.Notice(w, "webhooks-error", "Failed to load deliveries")
356
+
return
357
+
}
358
+
359
+
user := rp.oauth.GetMultiAccountUser(r)
360
+
361
+
rp.pages.WebhookDeliveriesList(w, pages.WebhookDeliveriesListParams{
362
+
LoggedInUser: user,
363
+
RepoInfo: rp.repoResolver.GetRepoInfo(r, user),
364
+
Webhook: webhook,
365
+
Deliveries: deliveries,
366
+
})
367
+
}
History
1 round
0 comments
anirudh.fi
submitted
#0
1 commit
expand
collapse
appview/repo: webhook deliveries endpoint
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
2/3 failed, 1/3 success
expand
collapse
expand 0 comments
pull request successfully merged