Skip to content

Commit 781e41e

Browse files
DariaKunoichiGurinderRawala
authored andcommitted
Add full metadata for versions query too (#70)
1 parent e25071a commit 781e41e

File tree

1 file changed

+75
-24
lines changed

1 file changed

+75
-24
lines changed

pkg/api/dashboard.go

+75-24
Original file line numberDiff line numberDiff line change
@@ -847,31 +847,38 @@ func (hs *HTTPServer) GetDashboardVersions(c *contextmodel.ReqContext) response.
847847
// 500: internalServerError
848848
func (hs *HTTPServer) GetDashboardVersion(c *contextmodel.ReqContext) response.Response {
849849
var dashID int64
850-
851850
var err error
852-
dashUID := web.Params(c.Req)[":uid"]
851+
var dash *models.Dashboard
853852

854-
var dash *dashboards.Dashboard
853+
dashUID := web.Params(c.Req)[":uid"]
855854
if dashUID == "" {
856855
dashID, err = strconv.ParseInt(web.Params(c.Req)[":dashboardId"], 10, 64)
857856
if err != nil {
858857
return response.Error(http.StatusBadRequest, "dashboardId is invalid", err)
859858
}
859+
} else {
860+
q := models.GetDashboardQuery{
861+
OrgId: c.SignedInUser.OrgID,
862+
Uid: dashUID,
863+
}
864+
if err := hs.DashboardService.GetDashboard(c.Req.Context(), &q); err != nil {
865+
return response.Error(http.StatusBadRequest, "failed to get dashboard by UID", err)
866+
}
867+
dashID = q.Result.Id
868+
dash = q.Result
860869
}
861870

862-
dash, rsp := hs.getDashboardHelper(c.Req.Context(), c.SignedInUser.GetOrgID(), dashID, dashUID)
863-
if rsp != nil {
864-
return rsp
865-
}
866-
867-
guardian, err := guardian.NewByDashboard(c.Req.Context(), dash, c.SignedInUser.GetOrgID(), c.SignedInUser)
868-
if err != nil {
869-
return response.Err(err)
871+
guardian := guardian.New(c.Req.Context(), dashID, c.OrgID, c.SignedInUser)
872+
canSave := true
873+
if canSave, err = guardian.CanSave(); err != nil || !canSave {
874+
return dashboardGuardianResponse(err)
870875
}
871-
872-
if canSave, err := guardian.CanSave(); err != nil || !canSave {
876+
if canView, err := guardian.CanView(); err != nil || !canView {
873877
return dashboardGuardianResponse(err)
874878
}
879+
canEdit, _ := guardian.CanEdit()
880+
canAdmin, _ := guardian.CanAdmin()
881+
canDelete, _ := guardian.CanDelete()
875882

876883
version, _ := strconv.ParseInt(web.Params(c.Req)[":id"], 10, 32)
877884
query := dashver.GetDashboardVersionQuery{
@@ -891,17 +898,61 @@ func (hs *HTTPServer) GetDashboardVersion(c *contextmodel.ReqContext) response.R
891898
creator = hs.getUserLogin(c.Req.Context(), res.CreatedBy)
892899
}
893900

894-
dashVersionMeta := &dashver.DashboardVersionMeta{
895-
ID: res.ID,
896-
DashboardID: res.DashboardID,
897-
DashboardUID: dash.UID,
898-
Data: res.Data,
899-
ParentVersion: res.ParentVersion,
900-
RestoredFrom: res.RestoredFrom,
901-
Version: res.Version,
902-
Created: res.Created,
903-
Message: res.Message,
904-
CreatedBy: creator,
901+
annotationPermissions := &dtos.AnnotationPermission{}
902+
if !hs.AccessControl.IsDisabled() {
903+
hs.getAnnotationPermissionsByScope(c, &annotationPermissions.Dashboard, accesscontrol.ScopeAnnotationsTypeDashboard)
904+
hs.getAnnotationPermissionsByScope(c, &annotationPermissions.Organization, accesscontrol.ScopeAnnotationsTypeOrganization)
905+
}
906+
907+
hasPublicDashboard := false
908+
publicDashboardEnabled := false
909+
// If public dashboards is enabled and we have a public dashboard, update meta values
910+
if hs.Features.IsEnabled(featuremgmt.FlagPublicDashboards) {
911+
publicDashboard, err := hs.PublicDashboardsApi.PublicDashboardService.FindByDashboardUid(c.Req.Context(), c.OrgID, dash.Uid)
912+
if err != nil && !errors.Is(err, publicdashboardModels.ErrPublicDashboardNotFound) {
913+
return response.Error(500, "Error while retrieving public dashboards", err)
914+
}
915+
if publicDashboard != nil {
916+
hasPublicDashboard = true
917+
publicDashboardEnabled = publicDashboard.IsEnabled
918+
}
919+
}
920+
921+
meta := dtos.DashboardMeta{
922+
Slug: dash.Slug,
923+
Type: models.DashTypeDB,
924+
CanStar: c.IsSignedIn,
925+
CanSave: canSave,
926+
CanEdit: canEdit,
927+
CanAdmin: canAdmin,
928+
CanDelete: canDelete,
929+
Created: dash.Created,
930+
Updated: dash.Updated,
931+
UpdatedBy: "Someone",
932+
CreatedBy: creator,
933+
Version: dash.Version,
934+
HasACL: dash.HasACL,
935+
IsFolder: dash.IsFolder,
936+
FolderId: dash.FolderId,
937+
Url: dash.GetUrl(),
938+
FolderTitle: "General",
939+
AnnotationsPermissions: annotationPermissions,
940+
PublicDashboardEnabled: publicDashboardEnabled,
941+
HasPublicDashboard: hasPublicDashboard,
942+
}
943+
944+
// lookup folder title
945+
if dash.FolderId > 0 {
946+
query := models.GetDashboardQuery{Id: dash.FolderId, OrgId: c.OrgID}
947+
if err := hs.DashboardService.GetDashboard(c.Req.Context(), &query); err != nil {
948+
if errors.Is(err, dashboards.ErrFolderNotFound) {
949+
return response.Error(404, "Folder not found", err)
950+
}
951+
return response.Error(500, "Dashboard folder could not be read", err)
952+
}
953+
meta.FolderUid = query.Result.Uid
954+
meta.FolderTitle = query.Result.Title
955+
meta.FolderUrl = query.Result.GetUrl()
905956
}
906957

907958
dto := dtos.DashboardFullWithMeta{

0 commit comments

Comments
 (0)