Skip to content

Commit 4708d7c

Browse files
committed
WIP
1 parent 8301819 commit 4708d7c

11 files changed

Lines changed: 346 additions & 196 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/coreos/go-oidc/v3 v3.15.0
1515
github.com/creasty/defaults v1.8.0
1616
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e
17-
github.com/cs3org/go-cs3apis v0.0.0-20250902085700-00cd04c8e01c
17+
github.com/cs3org/go-cs3apis v0.0.0-20250908152307-4ca807afe54e
1818
github.com/dgraph-io/ristretto v0.2.0
1919
github.com/dolthub/go-mysql-server v0.14.0
2020
github.com/glpatcern/go-mime v0.0.0-20221026162842-2a8d71ad17a9

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,12 @@ github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e h1:tqSPWQeueWTKnJVMJff
897897
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4=
898898
github.com/cs3org/go-cs3apis v0.0.0-20250902085700-00cd04c8e01c h1:LwCysopto1uLelEkfXFEk5jOqrphw8CRGRdAej1Km/8=
899899
github.com/cs3org/go-cs3apis v0.0.0-20250902085700-00cd04c8e01c/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
900+
github.com/cs3org/go-cs3apis v0.0.0-20250908101802-cebd640521ba h1:E9kpTupCWD6IbppIPvIx1QAbfiilhhl/4q5onqndF6s=
901+
github.com/cs3org/go-cs3apis v0.0.0-20250908101802-cebd640521ba/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
902+
github.com/cs3org/go-cs3apis v0.0.0-20250908131828-2f5e9a361154 h1:kly4UEZ+7ygUa9L8OJlgbkEkf/nuDZ+SbaYsPxMFAW0=
903+
github.com/cs3org/go-cs3apis v0.0.0-20250908131828-2f5e9a361154/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
904+
github.com/cs3org/go-cs3apis v0.0.0-20250908152307-4ca807afe54e h1:fC/BWMVWNFlSbzvSp2xTaH0qpJiq7ScRrOsCzpgi1xI=
905+
github.com/cs3org/go-cs3apis v0.0.0-20250908152307-4ca807afe54e/go.mod h1:DedpcqXl193qF/08Y04IO0PpxyyMu8+GrkD6kWK2MEQ=
900906
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
901907
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
902908
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

internal/grpc/services/spacesregistry/spacesregistry.go

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

internal/grpc/services/storageprovider/storageprovider.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"strings"
3232
"unicode/utf8"
3333

34+
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
3435
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
3536
rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
3637
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
@@ -40,7 +41,9 @@ import (
4041
"github.com/cs3org/reva/v3/pkg/plugin"
4142
"github.com/cs3org/reva/v3/pkg/rgrpc"
4243
"github.com/cs3org/reva/v3/pkg/rgrpc/status"
44+
"github.com/cs3org/reva/v3/pkg/rgrpc/todo/pool"
4345
"github.com/cs3org/reva/v3/pkg/rhttp/router"
46+
"github.com/cs3org/reva/v3/pkg/sharedconf"
4447
"github.com/cs3org/reva/v3/pkg/spaces"
4548
"github.com/cs3org/reva/v3/pkg/storage"
4649
"github.com/cs3org/reva/v3/pkg/storage/fs/registry"
@@ -69,6 +72,7 @@ type config struct {
6972
ExposeDataServer bool `docs:"false;Whether to expose data server." mapstructure:"expose_data_server"` // if true the client will be able to upload/download directly to it
7073
AvailableXS map[string]uint32 `docs:"nil;List of available checksums." mapstructure:"available_checksums"`
7174
CustomMimeTypesJSON string `docs:"nil;An optional mapping file with the list of supported custom file extensions and corresponding mime types." mapstructure:"custom_mime_types_json"`
75+
GatewaySvc string `mapstructure:"gatewaysvc"`
7276
MinimunAllowedPathLevelForShare int `mapstructure:"minimum_allowed_path_level_for_share"`
7377
}
7478

@@ -98,6 +102,7 @@ func (c *config) ApplyDefaults() {
98102
if len(c.AvailableXS) == 0 {
99103
c.AvailableXS = map[string]uint32{"md5": 100, "unset": 1000}
100104
}
105+
c.GatewaySvc = sharedconf.GetGatewaySVC(c.GatewaySvc)
101106
}
102107

103108
type FSWithListRegexSuport interface {
@@ -773,12 +778,12 @@ func (s *service) Move(ctx context.Context, req *provider.MoveRequest) (*provide
773778
}
774779

775780
func (s *service) addSpaceInfo(ri *provider.ResourceInfo) {
776-
space := spaces.PathToSpaceID(ri.Path)
777-
ri.Id.SpaceId = space
781+
spaceID := spaces.PathToSpaceID(ri.Path)
782+
ri.Id.SpaceId = spaceID
778783
if ri.ParentId == nil {
779784
ri.ParentId = &provider.ResourceId{}
780785
}
781-
ri.ParentId.SpaceId = space
786+
ri.ParentId.SpaceId = spaceID
782787
}
783788

784789
func (s *service) Stat(ctx context.Context, req *provider.StatRequest) (*provider.StatResponse, error) {
@@ -1663,3 +1668,7 @@ func (v descendingMtime) Less(i, j int) bool {
16631668
func (v descendingMtime) Swap(i, j int) {
16641669
v[i], v[j] = v[j], v[i]
16651670
}
1671+
1672+
func (s *service) getClient() (gateway.GatewayAPIClient, error) {
1673+
return pool.GetGatewayServiceClient(pool.Endpoint(s.conf.GatewaySvc))
1674+
}

0 commit comments

Comments
 (0)