From f884856ca7dbced1a40ca2f60fed7cf394d42969 Mon Sep 17 00:00:00 2001 From: tjh Date: Tue, 13 May 2025 11:27:21 +0100 Subject: [PATCH] appview: git: proxy `git-receive-pack` requests to knotserver --- appview/state/git_http.go | 18 ++++++++++++++++++ appview/state/router.go | 1 + 2 files changed, 19 insertions(+) diff --git a/appview/state/git_http.go b/appview/state/git_http.go index 6a7827e5..badefd66 100644 --- a/appview/state/git_http.go +++ b/appview/state/git_http.go @@ -42,6 +42,24 @@ func (s *State) UploadPack(w http.ResponseWriter, r *http.Request) { s.proxyRequest(w, r, targetURL) } +func (s *State) ReceivePack(w http.ResponseWriter, r *http.Request) { + user, ok := r.Context().Value("resolvedId").(identity.Identity) + if !ok { + http.Error(w, "failed to resolve user", http.StatusInternalServerError) + return + } + knot := r.Context().Value("knot").(string) + repo := chi.URLParam(r, "repo") + + scheme := "https" + if s.config.Core.Dev { + scheme = "http" + } + + targetURL := fmt.Sprintf("%s://%s/%s/%s/git-receive-pack?%s", scheme, knot, user.DID, repo, r.URL.RawQuery) + s.proxyRequest(w, r, targetURL) +} + func (s *State) proxyRequest(w http.ResponseWriter, r *http.Request, targetURL string) { client := &http.Client{} diff --git a/appview/state/router.go b/appview/state/router.go index fd3b0724..45a3823a 100644 --- a/appview/state/router.go +++ b/appview/state/router.go @@ -169,6 +169,7 @@ func (s *State) UserRouter() http.Handler { // These routes get proxied to the knot r.Get("/info/refs", s.InfoRefs) r.Post("/git-upload-pack", s.UploadPack) + r.Post("/git-receive-pack", s.ReceivePack) // settings routes, needs auth r.Group(func(r chi.Router) { -- 2.51.2