From 0dc9ae758029a861beeba6e5ea40fb77847a4203 Mon Sep 17 00:00:00 2001 From: tjh Date: Fri, 12 Dec 2025 12:27:36 +0000 Subject: [PATCH] appview: proxy git-upload-archive service to knots Change-Id: rsotlsrzunpkxnnuwmlrtsvspqqpqstn Signed-off-by: tjh --- appview/state/git_http.go | 17 +++++++++++++++++ appview/state/router.go | 1 + 2 files changed, 18 insertions(+) diff --git a/appview/state/git_http.go b/appview/state/git_http.go index 36ce3e8d..fd3da36e 100644 --- a/appview/state/git_http.go +++ b/appview/state/git_http.go @@ -25,6 +25,23 @@ func (s *State) InfoRefs(w http.ResponseWriter, r *http.Request) { } +func (s *State) UploadArchive(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 + } + repo := r.Context().Value("repo").(*models.Repo) + + scheme := "https" + if s.config.Core.Dev { + scheme = "http" + } + + targetURL := fmt.Sprintf("%s://%s/%s/%s/git-upload-archive?%s", scheme, repo.Knot, user.DID, repo.Name, r.URL.RawQuery) + s.proxyRequest(w, r, targetURL) +} + func (s *State) UploadPack(w http.ResponseWriter, r *http.Request) { user, ok := r.Context().Value("resolvedId").(identity.Identity) if !ok { diff --git a/appview/state/router.go b/appview/state/router.go index df7e258e..b11f12c2 100644 --- a/appview/state/router.go +++ b/appview/state/router.go @@ -101,6 +101,7 @@ func (s *State) UserRouter(mw *middleware.Middleware) http.Handler { // These routes get proxied to the knot r.Get("/info/refs", s.InfoRefs) + r.Post("/git-upload-archive", s.UploadArchive) r.Post("/git-upload-pack", s.UploadPack) r.Post("/git-receive-pack", s.ReceivePack) -- 2.51.1.dirty