From 388d00873ffe8f14208ecdd6f0dce24f0630dd9e Mon Sep 17 00:00:00 2001 From: ying-jeanne <74549700+ying-jeanne@users.noreply.github.com> Date: Mon, 4 Jan 2021 14:41:17 +0100 Subject: [PATCH] [dashboard api] manage error when data in dashboard table is not valid json (#29999) * retrieve dashboard api * Apply suggestions from code review Co-authored-by: Arve Knudsen * Update pkg/api/dashboard.go Co-authored-by: Arve Knudsen Co-authored-by: Arve Knudsen --- pkg/api/dashboard.go | 14 ++++++++++++++ pkg/api/dashboard_test.go | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 51d38bb0a77..2e0002aa5f3 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -54,6 +54,20 @@ func (hs *HTTPServer) GetDashboard(c *models.ReqContext) Response { return rsp } + // When dash contains only keys id, uid that means dashboard data is not valid and json decode failed. + if dash.Data != nil { + isEmptyData := true + for k := range dash.Data.MustMap() { + if k != "id" && k != "uid" { + isEmptyData = false + break + } + } + if isEmptyData { + return Error(500, "Error while loading dashboard, dashboard data is invalid", nil) + } + } + guardian := guardian.New(dash.Id, c.OrgId, c.SignedInUser) if canView, err := guardian.CanView(); err != nil || !canView { return dashboardGuardianResponse(err) diff --git a/pkg/api/dashboard_test.go b/pkg/api/dashboard_test.go index 38dba127b26..d4bc7962c53 100644 --- a/pkg/api/dashboard_test.go +++ b/pkg/api/dashboard_test.go @@ -1009,7 +1009,9 @@ func TestDashboardAPIEndpoint(t *testing.T) { return nil }) bus.AddHandler("test", func(query *models.GetDashboardQuery) error { - query.Result = &models.Dashboard{Id: 1, Data: &simplejson.Json{}} + dataValue, err := simplejson.NewJson([]byte(`{"id": 1, "editable": true, "style": "dark"}`)) + require.NoError(t, err) + query.Result = &models.Dashboard{Id: 1, Data: dataValue} return nil })