forked from tangled.org/core
this repo has no description
1package repo 2 3import ( 4 "net/http" 5 6 "github.com/go-chi/chi/v5" 7 "tangled.sh/tangled.sh/core/appview/middleware" 8) 9 10func (rp *Repo) Router(mw *middleware.Middleware) http.Handler { 11 r := chi.NewRouter() 12 r.Get("/", rp.RepoIndex) 13 r.Get("/commits/{ref}", rp.RepoLog) 14 r.Route("/tree/{ref}", func(r chi.Router) { 15 r.Get("/", rp.RepoIndex) 16 r.Get("/*", rp.RepoTree) 17 }) 18 r.Get("/commit/{ref}", rp.RepoCommit) 19 r.Get("/branches", rp.RepoBranches) 20 r.Route("/tags", func(r chi.Router) { 21 r.Get("/", rp.RepoTags) 22 r.Route("/{tag}", func(r chi.Router) { 23 r.Use(middleware.AuthMiddleware(rp.oauth)) 24 // require auth to download for now 25 r.Get("/download/{file}", rp.DownloadArtifact) 26 27 // require repo:push to upload or delete artifacts 28 // 29 // additionally: only the uploader can truly delete an artifact 30 // (record+blob will live on their pds) 31 r.Group(func(r chi.Router) { 32 r.With(mw.RepoPermissionMiddleware("repo:push")) 33 r.Post("/upload", rp.AttachArtifact) 34 r.Delete("/{file}", rp.DeleteArtifact) 35 }) 36 }) 37 }) 38 r.Get("/blob/{ref}/*", rp.RepoBlob) 39 r.Get("/raw/{ref}/*", rp.RepoBlobRaw) 40 41 r.Route("/issues", func(r chi.Router) { 42 r.With(middleware.Paginate).Get("/", rp.RepoIssues) 43 r.Get("/{issue}", rp.RepoSingleIssue) 44 45 r.Group(func(r chi.Router) { 46 r.Use(middleware.AuthMiddleware(rp.oauth)) 47 r.Get("/new", rp.NewIssue) 48 r.Post("/new", rp.NewIssue) 49 r.Post("/{issue}/comment", rp.NewIssueComment) 50 r.Route("/{issue}/comment/{comment_id}/", func(r chi.Router) { 51 r.Get("/", rp.IssueComment) 52 r.Delete("/", rp.DeleteIssueComment) 53 r.Get("/edit", rp.EditIssueComment) 54 r.Post("/edit", rp.EditIssueComment) 55 }) 56 r.Post("/{issue}/close", rp.CloseIssue) 57 r.Post("/{issue}/reopen", rp.ReopenIssue) 58 }) 59 }) 60 61 r.Route("/fork", func(r chi.Router) { 62 r.Use(middleware.AuthMiddleware(rp.oauth)) 63 r.Get("/", rp.ForkRepo) 64 r.Post("/", rp.ForkRepo) 65 r.With(mw.RepoPermissionMiddleware("repo:owner")).Route("/sync", func(r chi.Router) { 66 r.Post("/", rp.SyncRepoFork) 67 }) 68 }) 69 70 r.Route("/compare", func(r chi.Router) { 71 r.Get("/", rp.RepoCompareNew) // start an new comparison 72 73 // we have to wildcard here since we want to support GitHub's compare syntax 74 // /compare/{ref1}...{ref2} 75 // for example: 76 // /compare/master...some/feature 77 // /compare/master...example.com:another/feature <- this is a fork 78 r.Get("/{base}/{head}", rp.RepoCompare) 79 r.Get("/*", rp.RepoCompare) 80 }) 81 82 // settings routes, needs auth 83 r.Group(func(r chi.Router) { 84 r.Use(middleware.AuthMiddleware(rp.oauth)) 85 // repo description can only be edited by owner 86 r.With(mw.RepoPermissionMiddleware("repo:owner")).Route("/description", func(r chi.Router) { 87 r.Put("/", rp.RepoDescription) 88 r.Get("/", rp.RepoDescription) 89 r.Get("/edit", rp.RepoDescriptionEdit) 90 }) 91 r.With(mw.RepoPermissionMiddleware("repo:settings")).Route("/settings", func(r chi.Router) { 92 r.Get("/", rp.RepoSettings) 93 r.With(mw.RepoPermissionMiddleware("repo:invite")).Put("/collaborator", rp.AddCollaborator) 94 r.With(mw.RepoPermissionMiddleware("repo:delete")).Delete("/delete", rp.DeleteRepo) 95 r.Put("/branches/default", rp.SetDefaultBranch) 96 }) 97 }) 98 99 return r 100}