From 0e9d2a13af71f78eef67234c9f79ce14c673fc30 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Sat, 5 Jun 2021 11:18:59 +0200 Subject: [PATCH] cmd/syncthing: Improve "cli debug file" handling Proper URL encoding, and return a sensible error when it's not found. --- cmd/syncthing/cli/client.go | 4 +++- cmd/syncthing/cli/debug.go | 6 +++++- cmd/syncthing/cli/utils.go | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/cmd/syncthing/cli/client.go b/cmd/syncthing/cli/client.go index 09d62c9a7..539192b3e 100644 --- a/cmd/syncthing/cli/client.go +++ b/cmd/syncthing/cli/client.go @@ -134,9 +134,11 @@ func (c *apiClient) Post(url, body string) (*http.Response, error) { return c.Do(request) } +var errNotFound = errors.New("invalid endpoint or API call") + func checkResponse(response *http.Response) error { if response.StatusCode == http.StatusNotFound { - return errors.New("invalid endpoint or API call") + return errNotFound } else if response.StatusCode == http.StatusUnauthorized { return errors.New("invalid API key") } else if response.StatusCode != http.StatusOK { diff --git a/cmd/syncthing/cli/debug.go b/cmd/syncthing/cli/debug.go index cd3e7c201..2bc9d8282 100644 --- a/cmd/syncthing/cli/debug.go +++ b/cmd/syncthing/cli/debug.go @@ -8,6 +8,7 @@ package cli import ( "fmt" + "net/url" "github.com/urfave/cli" ) @@ -35,7 +36,10 @@ var debugCommand = cli.Command{ func debugFile() cli.ActionFunc { return func(c *cli.Context) error { - return indexDumpOutput(fmt.Sprintf("debug/file?folder=%v&file=%v", c.Args()[0], normalizePath(c.Args()[1])))(c) + query := make(url.Values) + query.Set("folder", c.Args()[0]) + query.Set("file", normalizePath(c.Args()[1])) + return indexDumpOutput("debug/file?" + query.Encode())(c) } } diff --git a/cmd/syncthing/cli/utils.go b/cmd/syncthing/cli/utils.go index 503adfb3b..beb543e02 100644 --- a/cmd/syncthing/cli/utils.go +++ b/cmd/syncthing/cli/utils.go @@ -48,6 +48,9 @@ func indexDumpOutput(url string) cli.ActionFunc { return err } response, err := client.Get(url) + if errors.Is(err, errNotFound) { + return errors.New("not found (debugging disabled or folder/file not in database)") + } if err != nil { return err }