···9393 }9494}95959696+func (d *Handle) ReceivePack(w http.ResponseWriter, r *http.Request) {9797+ did := chi.URLParam(r, "did")9898+ name := chi.URLParam(r, "name")9999+ _, err := securejoin.SecureJoin(d.c.Repo.ScanPath, filepath.Join(did, name))100100+ if err != nil {101101+ gitError(w, err.Error(), http.StatusForbidden)102102+ d.l.Error("git: failed to secure join repo path", "handler", "ReceivePack", "error", err)103103+ return104104+ }105105+106106+ d.RejectPush(w, r, name)107107+}108108+96109func (d *Handle) RejectPush(w http.ResponseWriter, r *http.Request, unqualifiedRepoName string) {97110 // A text/plain response will cause git to print each line of the body98111 // prefixed with "remote: ".
+1
knotserver/handler.go
···8383 r.Get("/", h.RepoIndex)8484 r.Get("/info/refs", h.InfoRefs)8585 r.Post("/git-upload-pack", h.UploadPack)8686+ r.Post("/git-receive-pack", h.ReceivePack)8687 r.Get("/compare/{rev1}/{rev2}", h.Compare) // git diff-tree compare of two objects87888889 r.With(h.VerifySignature).Post("/hidden-ref/{forkRef}/{remoteRef}", h.NewHiddenRef)