diff --git a/pkg/api/index.go b/pkg/api/index.go index f0b2aadd677..3b38adb5085 100644 --- a/pkg/api/index.go +++ b/pkg/api/index.go @@ -99,6 +99,10 @@ func (hs *HTTPServer) setIndexViewData(c *contextmodel.ReqContext) (*dtos.IndexV hasAccess := ac.HasAccess(hs.AccessControl, c) hasEditPerm := hasAccess(ac.EvalAny(ac.EvalPermission(dashboards.ActionDashboardsCreate), ac.EvalPermission(dashboards.ActionFoldersCreate))) + cdnURL, err := hs.Cfg.GetContentDeliveryURL(hs.License.ContentDeliveryPrefix()) + if err != nil { + return nil, err + } data := dtos.IndexViewData{ User: &dtos.CurrentUser{ @@ -144,7 +148,7 @@ func (hs *HTTPServer) setIndexViewData(c *contextmodel.ReqContext) (*dtos.IndexV AppTitle: "Grafana", NavTree: navTree, Nonce: c.RequestNonce, - ContentDeliveryURL: hs.Cfg.GetContentDeliveryURL(hs.License.ContentDeliveryPrefix()), + ContentDeliveryURL: cdnURL, LoadingLogo: "public/img/grafana_icon.svg", IsDevelopmentEnv: hs.Cfg.Env == setting.Dev, Assets: assets, diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 9c1349bac4b..45d9e2ae608 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -1988,16 +1988,17 @@ func (cfg *Cfg) readServerSettings(iniFile *ini.File) error { } // GetContentDeliveryURL returns full content delivery URL with // added to URL -func (cfg *Cfg) GetContentDeliveryURL(prefix string) string { - if cfg.CDNRootURL != nil { - url := *cfg.CDNRootURL - preReleaseFolder := "" - - url.Path = path.Join(url.Path, prefix, preReleaseFolder, cfg.BuildVersion) - return url.String() + "/" +func (cfg *Cfg) GetContentDeliveryURL(prefix string) (string, error) { + if cfg.CDNRootURL == nil { + return "", nil } + if cfg.BuildVersion == "" { + return "", errors.New("BuildVersion is not set") + } + url := *cfg.CDNRootURL - return "" + url.Path = path.Join(url.Path, prefix, cfg.BuildVersion) + return url.String() + "/", nil } func (cfg *Cfg) readDataSourcesSettings() { diff --git a/pkg/setting/setting_test.go b/pkg/setting/setting_test.go index 370505ed666..41f8fb139a5 100644 --- a/pkg/setting/setting_test.go +++ b/pkg/setting/setting_test.go @@ -384,19 +384,33 @@ func TestAuthDurationSettings(t *testing.T) { } func TestGetCDNPath(t *testing.T) { - var err error - cfg := NewCfg() - cfg.BuildVersion = "v7.5.0-11124" - cfg.CDNRootURL, err = url.Parse("http://cdn.grafana.com") - require.NoError(t, err) + t.Run("should return CDN url as expected", func(t *testing.T) { + var ( + err error + actual string + ) + cfg := NewCfg() + cfg.BuildVersion = "v7.5.0-11124" + cfg.CDNRootURL, err = url.Parse("http://cdn.grafana.com") + require.NoError(t, err) - require.Equal(t, "http://cdn.grafana.com/grafana-oss/v7.5.0-11124/", cfg.GetContentDeliveryURL("grafana-oss")) - require.Equal(t, "http://cdn.grafana.com/grafana/v7.5.0-11124/", cfg.GetContentDeliveryURL("grafana")) -} + actual, err = cfg.GetContentDeliveryURL("grafana-oss") + require.NoError(t, err) + require.Equal(t, "http://cdn.grafana.com/grafana-oss/v7.5.0-11124/", actual) + actual, err = cfg.GetContentDeliveryURL("grafana") + require.NoError(t, err) + require.Equal(t, "http://cdn.grafana.com/grafana/v7.5.0-11124/", actual) + }) -func TestGetContentDeliveryURLWhenNoCDNRootURLIsSet(t *testing.T) { - cfg := NewCfg() - require.Equal(t, "", cfg.GetContentDeliveryURL("grafana-oss")) + t.Run("should error if BuildVersion is not set", func(t *testing.T) { + var err error + cfg := NewCfg() + cfg.CDNRootURL, err = url.Parse("http://cdn.grafana.com") + require.NoError(t, err) + + _, err = cfg.GetContentDeliveryURL("grafana") + require.Error(t, err) + }) } func TestGetCDNPathWithPreReleaseVersionAndSubPath(t *testing.T) { @@ -405,8 +419,12 @@ func TestGetCDNPathWithPreReleaseVersionAndSubPath(t *testing.T) { cfg.BuildVersion = "v7.5.0-11124pre" cfg.CDNRootURL, err = url.Parse("http://cdn.grafana.com/sub") require.NoError(t, err) - require.Equal(t, "http://cdn.grafana.com/sub/grafana-oss/v7.5.0-11124pre/", cfg.GetContentDeliveryURL("grafana-oss")) - require.Equal(t, "http://cdn.grafana.com/sub/grafana/v7.5.0-11124pre/", cfg.GetContentDeliveryURL("grafana")) + actual, err := cfg.GetContentDeliveryURL("grafana-oss") + require.NoError(t, err) + require.Equal(t, "http://cdn.grafana.com/sub/grafana-oss/v7.5.0-11124pre/", actual) + actual, err = cfg.GetContentDeliveryURL("grafana") + require.NoError(t, err) + require.Equal(t, "http://cdn.grafana.com/sub/grafana/v7.5.0-11124pre/", actual) } // Adding a case for this in case we switch to proper semver version strings @@ -416,8 +434,12 @@ func TestGetCDNPathWithAlphaVersion(t *testing.T) { cfg.BuildVersion = "v7.5.0-alpha.11124" cfg.CDNRootURL, err = url.Parse("http://cdn.grafana.com") require.NoError(t, err) - require.Equal(t, "http://cdn.grafana.com/grafana-oss/v7.5.0-alpha.11124/", cfg.GetContentDeliveryURL("grafana-oss")) - require.Equal(t, "http://cdn.grafana.com/grafana/v7.5.0-alpha.11124/", cfg.GetContentDeliveryURL("grafana")) + actual, err := cfg.GetContentDeliveryURL("grafana-oss") + require.NoError(t, err) + require.Equal(t, "http://cdn.grafana.com/grafana-oss/v7.5.0-alpha.11124/", actual) + actual, err = cfg.GetContentDeliveryURL("grafana") + require.NoError(t, err) + require.Equal(t, "http://cdn.grafana.com/grafana/v7.5.0-alpha.11124/", actual) } func TestAlertingEnabled(t *testing.T) {