From d8dd5eb6713ac1546988112981d08a19d5049bbc Mon Sep 17 00:00:00 2001 From: mstar Date: Thu, 22 May 2025 17:01:47 +0200 Subject: [PATCH] Add fetch debug endpoint for requesting an url as a user --- web/debug/server.go | 1 + web/debug/users.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/web/debug/server.go b/web/debug/server.go index 4ad5d1b..b61923e 100644 --- a/web/debug/server.go +++ b/web/debug/server.go @@ -35,6 +35,7 @@ func New(addr string) *Server { handler.HandleFunc("GET /request-follow", kickoffFollow) handler.HandleFunc("POST /send-as", proxyMessageToTarget) handler.HandleFunc("GET /replies-to/{id}", inReplyTo) + handler.HandleFunc("POST /fetch", requestAs) web := http.Server{ Addr: addr, Handler: webutils.ChainMiddlewares( diff --git a/web/debug/users.go b/web/debug/users.go index 747782c..8f6a153 100644 --- a/web/debug/users.go +++ b/web/debug/users.go @@ -295,3 +295,36 @@ func kickoffFollow(w http.ResponseWriter, r *http.Request) { dec := json.NewDecoder(r.Body) dec.Decode(&data) } + +func requestAs(w http.ResponseWriter, r *http.Request) { + type Inbound struct { + Username string + TargetUrl string + } + log := hlog.FromRequest(r) + data := Inbound{} + dec := json.NewDecoder(r.Body) + err := dec.Decode(&data) + if err != nil { + log.Warn().Err(err).Msg("Failed to decode json body") + webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError) + return + } + user, err := dbgen.User.GetByUsername(data.Username) + if err != nil { + webutils.ProblemDetailsStatusOnly(w, http.StatusNotFound) + return + } + res, _, err := webshared.RequestSigned("GET", data.TargetUrl, nil, user) + if err != nil { + log.Warn().Err(err).Msg("Request failed") + webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError) + return + } + if res.StatusCode != 200 { + webutils.ProblemDetailsStatusOnly(w, res.StatusCode) + return + } + body, _ := io.ReadAll(res.Body) + fmt.Fprint(w, string(body)) +}