diff --git a/pkg/api/api.go b/pkg/api/api.go index 18f25c9d479..6672bfa0e6d 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -391,6 +391,9 @@ func (hs *HTTPServer) registerRoutes() { dashboardRoute.Get("/home", routing.Wrap(hs.GetHomeDashboard)) dashboardRoute.Get("/tags", hs.GetDashboardTags) + // Deprecated: used to convert internal IDs to UIDs + dashboardRoute.Get("/ids/:ids", authorize(reqSignedIn, ac.EvalPermission(dashboards.ActionDashboardsRead)), hs.GetDashboardUIDs) + // Deprecated: use /uid/:uid API instead. dashboardRoute.Group("/id/:dashboardId", func(dashIdRoute routing.RouteRegister) { dashIdRoute.Get("/versions", authorize(reqSignedIn, ac.EvalPermission(dashboards.ActionDashboardsWrite)), routing.Wrap(hs.GetDashboardVersions)) diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 5fe06616847..8e78aaa5992 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -9,6 +9,7 @@ import ( "os" "path/filepath" "strconv" + "strings" "github.com/grafana/grafana/pkg/api/apierrors" "github.com/grafana/grafana/pkg/api/dtos" @@ -727,3 +728,24 @@ func (hs *HTTPServer) GetDashboardTags(c *models.ReqContext) { c.JSON(http.StatusOK, query.Result) } + +// GetDashboardUIDs converts internal ids to UIDs +func (hs *HTTPServer) GetDashboardUIDs(c *models.ReqContext) { + ids := strings.Split(web.Params(c.Req)[":ids"], ",") + uids := make([]string, 0, len(ids)) + + q := &models.GetDashboardRefByIdQuery{} + for _, idstr := range ids { + id, err := strconv.ParseInt(idstr, 10, 64) + if err != nil { + continue + } + q.Id = id + err = hs.SQLStore.GetDashboardUIDById(c.Req.Context(), q) + if err != nil { + continue + } + uids = append(uids, q.Result.Uid) + } + c.JSON(http.StatusOK, uids) +}