From abc13765b9b601596b080c30ccb6f1c4d9db79b0 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Tue, 1 Jun 2021 09:00:11 -0400 Subject: [PATCH] Short URL: Fix so that orgId is included in generated short URL (#34696) (#35042) Fixes #33813 Signed-off-by: Jan Jansen Co-authored-by: Marcus Efraimsson (cherry picked from commit 0d1b35f99e96081a686fcaee2269b6c6e3d199c0) Co-authored-by: Jan Jansen --- docs/sources/http_api/short_url.md | 2 +- pkg/api/short_url.go | 2 +- pkg/api/short_url_test.go | 68 ++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 pkg/api/short_url_test.go diff --git a/docs/sources/http_api/short_url.md b/docs/sources/http_api/short_url.md index f982ec3f628..c2be96b1bf2 100644 --- a/docs/sources/http_api/short_url.md +++ b/docs/sources/http_api/short_url.md @@ -40,7 +40,7 @@ Content-Type: application/json { "uid": AT76wBvGk, - "url": http://localhost:3000/goto/AT76wBvGk + "url": http://localhost:3000/goto/AT76wBvGk?orgId=1 } ``` diff --git a/pkg/api/short_url.go b/pkg/api/short_url.go index 524842ba438..b894a649fe7 100644 --- a/pkg/api/short_url.go +++ b/pkg/api/short_url.go @@ -29,7 +29,7 @@ func (hs *HTTPServer) createShortURL(c *models.ReqContext, cmd dtos.CreateShortU return response.Error(500, "Failed to create short URL", err) } - url := fmt.Sprintf("%s/goto/%s", strings.TrimSuffix(setting.AppUrl, "/"), shortURL.Uid) + url := fmt.Sprintf("%s/goto/%s?orgId=%d", strings.TrimSuffix(setting.AppUrl, "/"), shortURL.Uid, c.OrgId) c.Logger.Debug("Created short URL", "url", url) dto := dtos.ShortURL{ diff --git a/pkg/api/short_url_test.go b/pkg/api/short_url_test.go new file mode 100644 index 00000000000..0a96a9c9c39 --- /dev/null +++ b/pkg/api/short_url_test.go @@ -0,0 +1,68 @@ +package api + +import ( + "encoding/json" + "fmt" + "testing" + + "github.com/grafana/grafana/pkg/api/dtos" + "github.com/grafana/grafana/pkg/api/response" + "github.com/grafana/grafana/pkg/api/routing" + "github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/infra/log" + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/services/shorturls" + "github.com/grafana/grafana/pkg/services/sqlstore" + "github.com/grafana/grafana/pkg/setting" + "github.com/stretchr/testify/require" +) + +func TestShortURLAPIEndpoint(t *testing.T) { + t.Run("Given a correct request for creating a shortUrl", func(t *testing.T) { + cmd := dtos.CreateShortURLCmd{ + Path: "d/TxKARsmGz/new-dashboard?orgId=1&from=1599389322894&to=1599410922894", + } + + createShortURLScenario(t, "When calling POST on", "/api/short-urls", "/api/short-urls", cmd, + func(sc *scenarioContext) { + callCreateShortURL(sc) + + shortUrl := dtos.ShortURL{} + err := json.NewDecoder(sc.resp.Body).Decode(&shortUrl) + require.NoError(t, err) + require.Equal(t, 200, sc.resp.Code) + require.Regexp(t, "/goto/(.+)\\?orgId=(.+)", shortUrl.URL) + }) + }) +} + +func callCreateShortURL(sc *scenarioContext) { + sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() +} + +func createShortURLScenario(t *testing.T, desc string, url string, routePattern string, cmd dtos.CreateShortURLCmd, fn scenarioFunc) { + t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { + defer bus.ClearBusHandlers() + + sqlStore := sqlstore.InitTestDB(t) + hs := HTTPServer{ + Cfg: setting.NewCfg(), + ShortURLService: &shorturls.ShortURLService{ + SQLStore: sqlStore, + }, + log: log.New("test"), + } + + sc := setupScenarioContext(t, url) + sc.defaultHandler = routing.Wrap(func(c *models.ReqContext) response.Response { + sc.context = c + sc.context.SignedInUser = &models.SignedInUser{OrgId: testOrgID, UserId: testUserID} + + return hs.createShortURL(c, cmd) + }) + + sc.m.Post(routePattern, sc.defaultHandler) + + fn(sc) + }) +}