@@ -46,7 +46,6 @@ import (
4646 "github.com/cs3org/reva/v3/pkg/storage/utils/templates"
4747 "github.com/cs3org/reva/v3/pkg/utils"
4848 "github.com/cs3org/reva/v3/pkg/utils/cfg"
49- "github.com/cs3org/reva/v3/pkg/utils/list"
5049 "github.com/rs/zerolog/log"
5150 "google.golang.org/grpc"
5251 "google.golang.org/grpc/metadata"
@@ -154,13 +153,13 @@ func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStora
154153
155154 sp := []* provider.StorageSpace {}
156155 if countTypeFilters (filters ) == 0 {
157- homes , err := s .listSpacesByType (ctx , user , spaces .SpaceTypeHome )
156+ homes , err := s .listSpacesByType (ctx , req , user , spaces .SpaceTypeHome )
158157 if err != nil {
159158 return & provider.ListStorageSpacesResponse {Status : status .NewInternal (ctx , err , err .Error ())}, nil
160159 }
161160 sp = append (sp , homes ... )
162161
163- projects , err := s .listSpacesByType (ctx , user , spaces .SpaceTypeProject )
162+ projects , err := s .listSpacesByType (ctx , req , user , spaces .SpaceTypeProject )
164163 if err != nil {
165164 return & provider.ListStorageSpacesResponse {Status : status .NewInternal (ctx , err , err .Error ())}, nil
166165 }
@@ -171,27 +170,38 @@ func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStora
171170 return & provider.ListStorageSpacesResponse {Status : status .NewInternal (ctx , err , err .Error ())}, nil
172171 }
173172 sp = append (sp , publicSpaces ... )
174- }
175-
176- for _ , filter := range filters {
177- switch filter .Type {
178- case provider .ListStorageSpacesRequest_Filter_TYPE_SPACE_TYPE :
179- spaces , err := s .listSpacesByType (ctx , user , spaces .SpaceType (filter .Term .(* provider.ListStorageSpacesRequest_Filter_SpaceType ).SpaceType ))
180- if err != nil {
181- return & provider.ListStorageSpacesResponse {Status : status .NewInternal (ctx , err , err .Error ())}, nil
173+ } else {
174+ for _ , filter := range filters {
175+ switch filter .Type {
176+ case provider .ListStorageSpacesRequest_Filter_TYPE_SPACE_TYPE :
177+ spaces , err := s .listSpacesByType (ctx , req , user , spaces .SpaceType (filter .Term .(* provider.ListStorageSpacesRequest_Filter_SpaceType ).SpaceType ))
178+ if err != nil {
179+ return & provider.ListStorageSpacesResponse {Status : status .NewInternal (ctx , err , err .Error ())}, nil
180+ }
181+ sp = append (sp , spaces ... )
182182 }
183- sp = append (sp , spaces ... )
184- case provider .ListStorageSpacesRequest_Filter_TYPE_ID :
185- default :
186- return nil , errtypes .NotSupported ("filter not supported" )
187183 }
188184 }
189185
186+ // for _, filter := range filters {
187+ // switch filter.Type {
188+ // case provider.ListStorageSpacesRequest_Filter_TYPE_SPACE_TYPE:
189+ // spaces, err := s.listSpacesByType(ctx, req, user, spaces.SpaceType(filter.Term.(*provider.ListStorageSpacesRequest_Filter_SpaceType).SpaceType))
190+ // if err != nil {
191+ // return &provider.ListStorageSpacesResponse{Status: status.NewInternal(ctx, err, err.Error())}, nil
192+ // }
193+ // sp = append(sp, spaces...)
194+ // case provider.ListStorageSpacesRequest_Filter_TYPE_ID:
195+ // default:
196+ // return nil, errtypes.NotSupported("filter not supported")
197+ // }
198+ // }
199+
190200 // TODO: we should filter at the driver level.
191201 // for now let's do it here. optimizations later :)
192- if id , ok := isFilterByID (req .Filters ); ok {
193- sp = list .Filter (sp , func (s * provider.StorageSpace ) bool { return s .Id .OpaqueId == id })
194- }
202+ // if id, ok := isFilterByID(req.Filters); ok {
203+ // sp = list.Filter(sp, func(s *provider.StorageSpace) bool { return s.Id.OpaqueId == id })
204+ // }
195205
196206 return & provider.ListStorageSpacesResponse {Status : status .NewOK (ctx ), StorageSpaces : sp }, nil
197207}
@@ -205,7 +215,7 @@ func isFilterByID(filters []*provider.ListStorageSpacesRequest_Filter) (string,
205215 return "" , false
206216}
207217
208- func (s * service ) listSpacesByType (ctx context.Context , user * userpb.User , spaceType spaces.SpaceType ) ([]* provider.StorageSpace , error ) {
218+ func (s * service ) listSpacesByType (ctx context.Context , req * provider. ListStorageSpacesRequest , user * userpb.User , spaceType spaces.SpaceType ) ([]* provider.StorageSpace , error ) {
209219 sp := []* provider.StorageSpace {}
210220
211221 switch spaceType {
@@ -219,7 +229,9 @@ func (s *service) listSpacesByType(ctx context.Context, user *userpb.User, space
219229 }
220230 case spaces .SpaceTypeProject :
221231 log .Debug ().Msg ("Listing spaces by type project" )
222- resp , err := s .projects .ListStorageSpaces (ctx , & provider.ListStorageSpacesRequest {})
232+ resp , err := s .projects .ListStorageSpaces (ctx , & provider.ListStorageSpacesRequest {
233+ Filters : req .Filters ,
234+ })
223235 if err != nil {
224236 return nil , err
225237 }
@@ -235,7 +247,7 @@ func (s *service) listSpacesByType(ctx context.Context, user *userpb.User, space
235247
236248 // For now, we also return public spaces when you query for projects
237249 // as the front-end will filter these
238- fallthrough
250+ // fallthrough
239251
240252 case spaces .SpaceTypePublic :
241253 publicSpaces , err := s .getPublicSpaces (ctx )
@@ -310,21 +322,21 @@ func (s *service) decorateProject(ctx context.Context, proj *provider.StorageSpa
310322 }
311323
312324 // Add mtime of space
313- var resourceInfo * provider.ResourceInfo
314- if res , err := s .resourceInfoCache .Get (proj .RootInfo .Path ); err == nil && res != nil {
315- resourceInfo = res
316- } else {
317- statRes , err := s .gw .Stat (ctx , & provider.StatRequest {Ref : & provider.Reference {
318- Path : proj .RootInfo .Path ,
319- }})
320- if err != nil || statRes .Status == nil || statRes .Status .Code != rpcv1beta1 .Code_CODE_OK {
321- return fmt .Errorf ("failed to stat path %s for project %s" , proj .RootInfo .Path , proj .Name )
322- }
323- resourceInfo = statRes .Info
324- s .resourceInfoCache .Set (proj .RootInfo .Path , resourceInfo )
325- }
326-
327- proj .Mtime = resourceInfo .Mtime
325+ // var resourceInfo *provider.ResourceInfo
326+ // if res, err := s.resourceInfoCache.Get(proj.RootInfo.Path); err == nil && res != nil {
327+ // resourceInfo = res
328+ // } else {
329+ // statRes, err := s.gw.Stat(ctx, &provider.StatRequest{Ref: &provider.Reference{
330+ // Path: proj.RootInfo.Path,
331+ // }})
332+ // if err != nil || statRes.Status == nil || statRes.Status.Code != rpcv1beta1.Code_CODE_OK {
333+ // return fmt.Errorf("failed to stat path %s for project %s", proj.RootInfo.Path, proj.Name)
334+ // }
335+ // resourceInfo = statRes.Info
336+ // s.resourceInfoCache.Set(proj.RootInfo.Path, resourceInfo)
337+ // }
338+
339+ // proj.Mtime = resourceInfo.Mtime
328340 return nil
329341}
330342
@@ -374,6 +386,7 @@ func (s *service) userSpace(ctx context.Context, user *userpb.User) (*provider.S
374386 QuotaMaxBytes : quota .TotalBytes ,
375387 RemainingBytes : quota .TotalBytes - quota .UsedBytes ,
376388 },
389+ PermissionSet : conversions .NewManagerRole ().CS3ResourcePermissions (),
377390 }, nil
378391}
379392
0 commit comments