Monorepo for Tangled tangled.org

appview/repo: webhook deliveries endpoint #1079

merged opened by anirudh.fi targeting master from icy/wmvtwx
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:hwevmowznbiukdf6uk5dwrrq/sh.tangled.repo.pull/3mf2krdnzsu22
+67 -3
Diff #0
+1
appview/repo/router.go
··· 93 93 r.Put("/{id}", rp.UpdateWebhook) 94 94 r.Delete("/{id}", rp.DeleteWebhook) 95 95 r.Post("/{id}/toggle", rp.ToggleWebhook) 96 + r.Get("/{id}/deliveries", rp.WebhookDeliveries) 96 97 }) 97 98 }) 98 99 })
+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
sign up or login to add to the discussion
anirudh.fi submitted #0
1 commit
expand
appview/repo: webhook deliveries endpoint
2/3 failed, 1/3 success
expand
expand 0 comments
pull request successfully merged