diff --git a/services/graph/pkg/service/v0/api_drives_drive_item.go b/services/graph/pkg/service/v0/api_drives_drive_item.go index 07cf04c9a8..74de0c464b 100644 --- a/services/graph/pkg/service/v0/api_drives_drive_item.go +++ b/services/graph/pkg/service/v0/api_drives_drive_item.go @@ -337,6 +337,53 @@ func (api DrivesDriveItemApi) DeleteDriveItem(w http.ResponseWriter, r *http.Req render.NoContent(w, r) } +// GetDriveItem get a drive item +func (api DrivesDriveItemApi) GetDriveItem(w http.ResponseWriter, r *http.Request) { + driveID, itemID, err := GetDriveAndItemIDParam(r, &api.logger) + if err != nil { + api.logger.Debug().Err(err).Msg(ErrInvalidDriveIDOrItemID.Error()) + ErrInvalidDriveIDOrItemID.Render(w, r) + return + } + + if !IsShareJail(driveID) { + api.logger.Debug().Interface("driveID", driveID).Msg(ErrNotAShareJail.Error()) + ErrNotAShareJail.Render(w, r) + return + } + + shareID := ExtractShareIdFromResourceId(itemID) + share, err := api.drivesDriveItemService.GetShare(r.Context(), shareID) + if err != nil { + api.logger.Debug().Err(err).Msg(ErrNoShares.Error()) + ErrNoShares.Render(w, r) + return + } + + availableShares, err := api.drivesDriveItemService.GetShares(r.Context(), share.GetShare().GetResourceId(), nil) + if err != nil { + api.logger.Debug().Err(err).Msg(ErrNoShares.Error()) + ErrNoShares.Render(w, r) + return + } + + driveItems, err := api.baseGraphService.CS3ReceivedSharesToDriveItems(r.Context(), availableShares) + switch { + case err != nil: + break + case len(driveItems) != 1: + err = ErrDriveItemConversion + } + if err != nil { + api.logger.Debug().Err(err).Msg(ErrDriveItemConversion.Error()) + ErrDriveItemConversion.Render(w, r) + return + } + + render.Status(r, http.StatusOK) + render.JSON(w, r, driveItems[0]) +} + // UpdateDriveItem updates a drive item, currently only the visibility of the share is updated func (api DrivesDriveItemApi) UpdateDriveItem(w http.ResponseWriter, r *http.Request) { driveID, itemID, err := GetDriveAndItemIDParam(r, &api.logger) diff --git a/services/graph/pkg/service/v0/service.go b/services/graph/pkg/service/v0/service.go index d2f6101840..57db3b0d86 100644 --- a/services/graph/pkg/service/v0/service.go +++ b/services/graph/pkg/service/v0/service.go @@ -247,6 +247,7 @@ func NewService(opts ...Option) (Graph, error) { //nolint:maintidx }) }) r.Route("/items/{itemID}", func(r chi.Router) { + r.Get("/", drivesDriveItemApi.GetDriveItem) r.Patch("/", drivesDriveItemApi.UpdateDriveItem) r.Delete("/", drivesDriveItemApi.DeleteDriveItem) r.Post("/invite", driveItemPermissionsApi.Invite)