Short URL: Fix so that orgId is included in generated short URL (#34696)

Fixes #33813

Signed-off-by: Jan Jansen <jan.jansen@gdata.de>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
This commit is contained in:
Jan Jansen 2021-06-01 14:19:10 +02:00 committed by GitHub
parent ff03b456f1
commit 0d1b35f99e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 70 additions and 2 deletions

View File

@ -40,7 +40,7 @@ Content-Type: application/json
{
"uid": AT76wBvGk,
"url": http://localhost:3000/goto/AT76wBvGk
"url": http://localhost:3000/goto/AT76wBvGk?orgId=1
}
```

View File

@ -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{

68
pkg/api/short_url_test.go Normal file
View File

@ -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)
})
}