From 509f97de5ed96bc9bd18a5788ba9fa3efc5b8555 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Tue, 5 May 2026 14:23:01 +0100 Subject: [PATCH] more logging for proxied reqs Signed-off-by: oppiliappan --- appview/state/git_http.go | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/appview/state/git_http.go b/appview/state/git_http.go index 7b783bd9..4ad77ef6 100644 --- a/appview/state/git_http.go +++ b/appview/state/git_http.go @@ -9,6 +9,7 @@ import ( "github.com/bluesky-social/indigo/atproto/identity" "github.com/go-chi/chi/v5" "tangled.org/core/appview/models" + "tangled.org/core/log" ) // allowedResponseHeaders is the set of headers we will forward from the knot @@ -38,6 +39,7 @@ func setGitHeaders(w http.ResponseWriter, contentType string) { } func (s *State) InfoRefs(w http.ResponseWriter, r *http.Request) { + l := log.SubLogger(s.logger, "git_http") repo := r.Context().Value("repo").(*models.Repo) scheme := "https" @@ -56,10 +58,12 @@ func (s *State) InfoRefs(w http.ResponseWriter, r *http.Request) { } targetURL := fmt.Sprintf("%s://%s/%s/info/refs?%s", scheme, repo.Knot, repo.RepoIdentifier(), r.URL.RawQuery) - s.proxyRequest(w, r, targetURL, contentType) + l.Info("info refs", "handler", "InfoRefs", "repo", repo.RepoIdentifier(), "knot", repo.Knot, "service", service, "target", targetURL) + s.proxyRequest(w, r, targetURL, contentType, "InfoRefs") } func (s *State) UploadArchive(w http.ResponseWriter, r *http.Request) { + l := log.SubLogger(s.logger, "git_http") repo := r.Context().Value("repo").(*models.Repo) scheme := "https" @@ -68,10 +72,12 @@ func (s *State) UploadArchive(w http.ResponseWriter, r *http.Request) { } targetURL := fmt.Sprintf("%s://%s/%s/git-upload-archive?%s", scheme, repo.Knot, repo.RepoIdentifier(), r.URL.RawQuery) - s.proxyRequest(w, r, targetURL, "application/x-git-upload-archive-result") + l.Info("upload archive", "handler", "UploadArchive", "repo", repo.RepoIdentifier(), "knot", repo.Knot, "target", targetURL) + s.proxyRequest(w, r, targetURL, "application/x-git-upload-archive-result", "UploadArchive") } func (s *State) UploadPack(w http.ResponseWriter, r *http.Request) { + l := log.SubLogger(s.logger, "git_http") repo := r.Context().Value("repo").(*models.Repo) scheme := "https" @@ -80,10 +86,12 @@ func (s *State) UploadPack(w http.ResponseWriter, r *http.Request) { } targetURL := fmt.Sprintf("%s://%s/%s/git-upload-pack?%s", scheme, repo.Knot, repo.RepoIdentifier(), r.URL.RawQuery) - s.proxyRequest(w, r, targetURL, "application/x-git-upload-pack-result") + l.Info("upload pack", "handler", "UploadPack", "repo", repo.RepoIdentifier(), "knot", repo.Knot, "target", targetURL) + s.proxyRequest(w, r, targetURL, "application/x-git-upload-pack-result", "UploadPack") } func (s *State) ReceivePack(w http.ResponseWriter, r *http.Request) { + l := log.SubLogger(s.logger, "git_http") repo := r.Context().Value("repo").(*models.Repo) scheme := "https" @@ -92,14 +100,17 @@ func (s *State) ReceivePack(w http.ResponseWriter, r *http.Request) { } targetURL := fmt.Sprintf("%s://%s/%s/git-receive-pack?%s", scheme, repo.Knot, repo.RepoIdentifier(), r.URL.RawQuery) - s.proxyRequest(w, r, targetURL, "application/x-git-receive-pack-result") + l.Info("receive pack", "handler", "ReceivePack", "repo", repo.RepoIdentifier(), "knot", repo.Knot, "target", targetURL) + s.proxyRequest(w, r, targetURL, "application/x-git-receive-pack-result", "ReceivePack") } -func (s *State) proxyRequest(w http.ResponseWriter, r *http.Request, targetURL string, contentType string) { +func (s *State) proxyRequest(w http.ResponseWriter, r *http.Request, targetURL string, contentType string, handler string) { + l := log.SubLogger(s.logger, "git_http") client := &http.Client{} proxyReq, err := http.NewRequest(r.Method, targetURL, r.Body) if err != nil { + l.Error("failed to create proxy request", "handler", handler, "target", targetURL, "err", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } @@ -112,13 +123,18 @@ func (s *State) proxyRequest(w http.ResponseWriter, r *http.Request, targetURL s } proxyReq.Header.Set("x-tangled-repo-owner-handle", repoOwnerHandle) + l.Info("proxying request", "handler", handler, "method", r.Method, "target", targetURL, "owner", repoOwnerHandle) + resp, err := client.Do(proxyReq) if err != nil { + l.Error("proxy request failed", "handler", handler, "target", targetURL, "err", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } defer resp.Body.Close() + l.Info("proxy response", "handler", handler, "target", targetURL, "status", resp.StatusCode) + // selectively copy only allowed headers copyAllowedHeaders(w.Header(), resp.Header) @@ -127,6 +143,7 @@ func (s *State) proxyRequest(w http.ResponseWriter, r *http.Request, targetURL s w.WriteHeader(resp.StatusCode) if _, err := io.Copy(w, resp.Body); err != nil { + l.Error("failed to copy response body", "handler", handler, "target", targetURL, "err", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } -- 2.51.2