This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / appview / repo / router.go
4.2 kB 117 lines
1package repo 2 3import ( 4 "net/http" 5 6 "github.com/go-chi/chi/v5" 7 "tangled.org/core/appview/middleware" 8 "tangled.org/core/appview/pipelines" 9) 10 11func (rp *Repo) Router(mw *middleware.Middleware) http.Handler { 12 r := chi.NewRouter() 13 r.Get("/", rp.Index) 14 r.Get("/commit-statuses", pipelines.StatusesHandler(rp.oauth, rp.repoResolver, rp.pages, rp.logger)) 15 r.Get("/opengraph", rp.Opengraph) 16 r.Get("/feed.atom", rp.AtomFeed) 17 r.Get("/commits/{ref}", rp.Log) 18 r.Route("/tree/{ref}", func(r chi.Router) { 19 r.Get("/", rp.Index) 20 r.Get("/*", rp.Tree) 21 }) 22 r.Get("/commit/{ref}.diff", rp.CommitRawDiff) 23 r.Get("/commit/{ref}.patch", rp.CommitRawPatch) 24 r.Get("/commit/{ref}", rp.Commit) 25 r.Get("/branches", rp.Branches) 26 r.Delete("/branches", rp.DeleteBranch) 27 r.Route("/tags", func(r chi.Router) { 28 r.Get("/", rp.Tags) 29 r.Route("/{tag}", func(r chi.Router) { 30 r.Get("/", rp.Tag) 31 r.Get("/download/{file}", rp.DownloadArtifact) 32 33 // require repo:push to upload or delete artifacts 34 // 35 // additionally: only the uploader can truly delete an artifact 36 // (record+blob will live on their pds) 37 r.Group(func(r chi.Router) { 38 r.Use(middleware.AuthMiddleware(rp.oauth)) 39 r.Use(mw.RepoPermissionMiddleware("repo:push")) 40 r.Post("/upload", rp.AttachArtifact) 41 r.Delete("/{file}", rp.DeleteArtifact) 42 }) 43 }) 44 }) 45 r.Get("/blob/{ref}/*", rp.Blob) 46 r.Get("/raw/{ref}/*", rp.RepoBlobRaw) 47 48 // intentionally doesn't use /* as this isn't 49 // a file path 50 r.Get("/archive/{ref}", rp.DownloadArchive) 51 52 r.With(middleware.Paginate).Get("/stars", rp.Stars) 53 r.With(middleware.Paginate).Get("/forks", rp.Forks) 54 55 r.Route("/fork", func(r chi.Router) { 56 r.Use(middleware.AuthMiddleware(rp.oauth)) 57 r.Get("/", rp.ForkRepo) 58 r.Post("/", rp.ForkRepo) 59 r.With(mw.RepoPermissionMiddleware("repo:owner")).Route("/sync", func(r chi.Router) { 60 r.Post("/", rp.SyncRepoFork) 61 }) 62 }) 63 64 r.Route("/compare", func(r chi.Router) { 65 r.Get("/", rp.CompareNew) // start an new comparison 66 67 // we have to wildcard here since we want to support GitHub's compare syntax 68 // /compare/{ref1}...{ref2} 69 // for example: 70 // /compare/master...some/feature 71 // /compare/master...example.com:another/feature <- this is a fork 72 r.Get("/*", rp.Compare) 73 }) 74 75 // label panel in issues/pulls/discussions/tasks 76 r.Route("/label", func(r chi.Router) { 77 r.Get("/", rp.LabelPanel) 78 r.Get("/edit", rp.EditLabelPanel) 79 }) 80 81 r.Get("/search", rp.Search) 82 83 // settings routes, needs auth 84 r.Group(func(r chi.Router) { 85 r.Use(middleware.AuthMiddleware(rp.oauth)) 86 r.With(mw.RepoPermissionMiddleware("repo:settings")).Route("/settings", func(r chi.Router) { 87 r.Get("/", rp.Settings) 88 r.With(mw.RepoPermissionMiddleware("repo:owner")).Put("/base", rp.EditBaseSettings) 89 r.With(mw.RepoPermissionMiddleware("repo:owner")).Post("/spindle", rp.EditSpindle) 90 r.With(mw.RepoPermissionMiddleware("repo:owner")).Put("/label", rp.AddLabelDef) 91 r.With(mw.RepoPermissionMiddleware("repo:owner")).Delete("/label", rp.DeleteLabelDef) 92 r.With(mw.RepoPermissionMiddleware("repo:owner")).Post("/label/subscribe", rp.SubscribeLabel) 93 r.With(mw.RepoPermissionMiddleware("repo:owner")).Post("/label/unsubscribe", rp.UnsubscribeLabel) 94 r.With(mw.RepoPermissionMiddleware("repo:invite")).Put("/collaborator", rp.AddCollaborator) 95 r.With(mw.RepoPermissionMiddleware("repo:invite")).Delete("/collaborator", rp.RemoveCollaborator) 96 r.With(mw.RepoPermissionMiddleware("repo:delete")).Delete("/delete", rp.DeleteRepo) 97 r.With(mw.RepoPermissionMiddleware("repo:owner")).Post("/rename", rp.RenameRepo) 98 r.Put("/branches/default", rp.SetDefaultBranch) 99 r.Put("/secrets", rp.Secrets) 100 r.Delete("/secrets", rp.Secrets) 101 r.With(mw.RepoPermissionMiddleware("repo:owner")).Route("/sites", func(r chi.Router) { 102 r.Put("/", rp.SaveRepoSiteConfig) 103 r.Delete("/", rp.DeleteRepoSiteConfig) 104 }) 105 r.With(mw.RepoPermissionMiddleware("repo:owner")).Route("/hooks", func(r chi.Router) { 106 r.Get("/", rp.Webhooks) 107 r.Post("/", rp.AddWebhook) 108 r.Put("/{id}", rp.UpdateWebhook) 109 r.Delete("/{id}", rp.DeleteWebhook) 110 r.Post("/{id}/toggle", rp.ToggleWebhook) 111 r.Get("/{id}/deliveries", rp.WebhookDeliveries) 112 }) 113 }) 114 }) 115 116 return r 117}