diff --git a/internal/grpc/interceptors/auth/scope.go b/internal/grpc/interceptors/auth/scope.go
index 3fa9e7943f..fc7fdbf0ff 100644
--- a/internal/grpc/interceptors/auth/scope.go
+++ b/internal/grpc/interceptors/auth/scope.go
@@ -142,7 +142,7 @@ func resolveLightweightScope(ctx context.Context, ref *provider.Reference, scope
}
for _, share := range shares.Shares {
- shareKey := "lw:" + user.Id.OpaqueId + scopeDelimiter + storagespace.FormatResourceID(*share.Share.ResourceId)
+ shareKey := "lw:" + user.Id.OpaqueId + scopeDelimiter + storagespace.FormatResourceID(share.Share.ResourceId)
_ = scopeExpansionCache.SetWithExpire(shareKey, nil, scopeCacheExpiration*time.Second)
if ref.ResourceId != nil && utils.ResourceIDEqual(share.Share.ResourceId, ref.ResourceId) {
@@ -229,7 +229,7 @@ func checkRelativeReference(ctx context.Context, requested *provider.Reference,
}
}
- key := storagespace.FormatResourceID(*sharedResourceID) + scopeDelimiter + getRefKey(requested)
+ key := storagespace.FormatResourceID(sharedResourceID) + scopeDelimiter + getRefKey(requested)
_ = scopeExpansionCache.SetWithExpire(key, nil, scopeCacheExpiration*time.Second)
return nil
}
@@ -246,7 +246,7 @@ func resolveUserShare(ctx context.Context, ref *provider.Reference, scope *authp
func checkCacheForNestedResource(ctx context.Context, ref *provider.Reference, resource *provider.ResourceId, client gateway.GatewayAPIClient, mgr token.Manager) error {
// Check if this ref is cached
- key := storagespace.FormatResourceID(*resource) + scopeDelimiter + getRefKey(ref)
+ key := storagespace.FormatResourceID(resource) + scopeDelimiter + getRefKey(ref)
if _, err := scopeExpansionCache.Get(key); err == nil {
return nil
}
@@ -520,7 +520,7 @@ func getRefKey(ref *provider.Reference) string {
}
if ref.GetResourceId() != nil {
- return storagespace.FormatResourceID(*ref.ResourceId)
+ return storagespace.FormatResourceID(ref.ResourceId)
}
// on malicious request both path and rid could be empty
diff --git a/internal/grpc/services/gateway/authprovider.go b/internal/grpc/services/gateway/authprovider.go
index 59214afffe..5f9ced4017 100644
--- a/internal/grpc/services/gateway/authprovider.go
+++ b/internal/grpc/services/gateway/authprovider.go
@@ -36,6 +36,7 @@ import (
"github.com/cs3org/reva/v2/pkg/sharedconf"
"github.com/pkg/errors"
"google.golang.org/grpc/metadata"
+ "google.golang.org/protobuf/proto"
)
func (s *svc) Authenticate(ctx context.Context, req *gateway.AuthenticateRequest) (*gateway.AuthenticateResponse, error) {
@@ -92,12 +93,12 @@ func (s *svc) Authenticate(ctx context.Context, req *gateway.AuthenticateRequest
}, nil
}
- u := *res.User
+ u := proto.Clone(res.User).(*userpb.User)
if sharedconf.SkipUserGroupsInToken() {
u.Groups = []string{}
}
- token, err := s.tokenmgr.MintToken(ctx, &u, res.TokenScope)
+ token, err := s.tokenmgr.MintToken(ctx, u, res.TokenScope)
if err != nil {
err = errors.Wrap(err, "authsvc: error in MintToken")
res := &gateway.AuthenticateResponse{
diff --git a/internal/grpc/services/publicshareprovider/publicshareprovider.go b/internal/grpc/services/publicshareprovider/publicshareprovider.go
index 0c740f3668..3202b8c755 100644
--- a/internal/grpc/services/publicshareprovider/publicshareprovider.go
+++ b/internal/grpc/services/publicshareprovider/publicshareprovider.go
@@ -350,7 +350,7 @@ func (s *service) RemovePublicShare(ctx context.Context, req *link.RemovePublicS
Status: status.NewInternal(ctx, "error loading public share"),
}, err
}
- if !publicshare.IsCreatedByUser(*ps, user) {
+ if !publicshare.IsCreatedByUser(ps, user) {
sRes, err := gatewayClient.Stat(ctx, &provider.StatRequest{Ref: &provider.Reference{ResourceId: ps.ResourceId}})
if err != nil {
log.Err(err).Interface("resource_id", ps.ResourceId).Msg("failed to stat shared resource")
@@ -480,7 +480,7 @@ func (s *service) UpdatePublicShare(ctx context.Context, req *link.UpdatePublicS
// users should always be able to downgrade links to internal links
// when they are the creator of the link
// all other users should have the WritePublicLink permission
- if !isInternalLink && !publicshare.IsCreatedByUser(*ps, user) {
+ if !isInternalLink && !publicshare.IsCreatedByUser(ps, user) {
canWriteLink, err := utils.CheckPermission(ctx, permission.WritePublicLink, gatewayClient)
if err != nil {
return &link.UpdatePublicShareResponse{
@@ -502,7 +502,7 @@ func (s *service) UpdatePublicShare(ctx context.Context, req *link.UpdatePublicS
}, err
}
- if !publicshare.IsCreatedByUser(*ps, user) {
+ if !publicshare.IsCreatedByUser(ps, user) {
if !sRes.GetInfo().GetPermissionSet().UpdateGrant {
return &link.UpdatePublicShareResponse{
Status: status.NewPermissionDenied(ctx, nil, "no permission to update public share"),
diff --git a/internal/grpc/services/publicstorageprovider/publicstorageprovider.go b/internal/grpc/services/publicstorageprovider/publicstorageprovider.go
index a0ef523772..dd685e183a 100644
--- a/internal/grpc/services/publicstorageprovider/publicstorageprovider.go
+++ b/internal/grpc/services/publicstorageprovider/publicstorageprovider.go
@@ -454,7 +454,7 @@ func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStora
// we know a grant for this resource
space := &provider.StorageSpace{
Id: &provider.StorageSpaceId{
- OpaqueId: storagespace.FormatResourceID(*root),
+ OpaqueId: storagespace.FormatResourceID(root),
},
SpaceType: "grant",
Owner: &userv1beta1.User{Id: grantee},
@@ -486,7 +486,7 @@ func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStora
}
space := &provider.StorageSpace{
Id: &provider.StorageSpaceId{
- OpaqueId: storagespace.FormatResourceID(*root),
+ OpaqueId: storagespace.FormatResourceID(root),
},
SpaceType: "mountpoint",
Owner: &userv1beta1.User{Id: grantee}, // FIXME actually, the mount point belongs to no one?
diff --git a/internal/grpc/services/sharesstorageprovider/sharesstorageprovider.go b/internal/grpc/services/sharesstorageprovider/sharesstorageprovider.go
index a480278160..97de593b6d 100644
--- a/internal/grpc/services/sharesstorageprovider/sharesstorageprovider.go
+++ b/internal/grpc/services/sharesstorageprovider/sharesstorageprovider.go
@@ -433,7 +433,7 @@ func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStora
space := &provider.StorageSpace{
Opaque: opaque,
Id: &provider.StorageSpaceId{
- OpaqueId: storagespace.FormatResourceID(*virtualRootID),
+ OpaqueId: storagespace.FormatResourceID(virtualRootID),
},
SpaceType: "virtual",
//Owner: &userv1beta1.User{Id: receivedShare.Share.Owner}, // FIXME actually, the mount point belongs to the recipient
@@ -455,7 +455,7 @@ func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStora
// we know a grant for this resource
space := &provider.StorageSpace{
Id: &provider.StorageSpaceId{
- OpaqueId: storagespace.FormatResourceID(*root),
+ OpaqueId: storagespace.FormatResourceID(root),
},
SpaceType: "grant",
Owner: &userv1beta1.User{Id: receivedShare.Share.Owner},
@@ -509,7 +509,7 @@ func (s *service) ListStorageSpaces(ctx context.Context, req *provider.ListStora
space := &provider.StorageSpace{
Opaque: opaque,
Id: &provider.StorageSpaceId{
- OpaqueId: storagespace.FormatResourceID(*root),
+ OpaqueId: storagespace.FormatResourceID(root),
},
SpaceType: "mountpoint",
Owner: &userv1beta1.User{Id: receivedShare.Share.Owner}, // FIXME actually, the mount point belongs to the recipient
@@ -819,7 +819,7 @@ func (s *service) ListContainer(ctx context.Context, req *provider.ListContainer
if receivedShare.GetState() != collaboration.ShareState_SHARE_STATE_ACCEPTED {
continue
}
- rIDStr := storagespace.FormatResourceID(*receivedShare.GetShare().GetResourceId())
+ rIDStr := storagespace.FormatResourceID(receivedShare.GetShare().GetResourceId())
if oldest, ok := oldestReceivedSharesByResourceID[rIDStr]; ok {
// replace if older than current oldest
if utils.TSToTime(receivedShare.GetShare().GetCtime()).Before(utils.TSToTime(oldest.GetShare().GetCtime())) {
diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go
index efbadbc69c..7c548db53c 100644
--- a/internal/grpc/services/storageprovider/storageprovider.go
+++ b/internal/grpc/services/storageprovider/storageprovider.go
@@ -299,7 +299,7 @@ func (s *Service) InitiateFileDownload(ctx context.Context, req *provider.Initia
if utils.IsRelativeReference(req.Ref) {
s.addMissingStorageProviderID(req.GetRef().GetResourceId(), nil)
protocol.Protocol = "spaces"
- u.Path = path.Join(u.Path, "spaces", storagespace.FormatResourceID(*req.Ref.ResourceId), req.Ref.Path)
+ u.Path = path.Join(u.Path, "spaces", storagespace.FormatResourceID(req.Ref.ResourceId), req.Ref.Path)
} else {
// Currently, we only support the simple protocol for GET requests
// Once we have multiple protocols, this would be moved to the fs layer
@@ -613,7 +613,7 @@ func (s *Service) DeleteStorageSpace(ctx context.Context, req *provider.DeleteSt
// FIXME: why is this string parsing necessary?
idraw, _ := storagespace.ParseID(req.Id.GetOpaqueId())
idraw.OpaqueId = idraw.GetSpaceId()
- id := &provider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(idraw)}
+ id := &provider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&idraw)}
spaces, err := s.Storage.ListStorageSpaces(ctx, []*provider.ListStorageSpacesRequest_Filter{{Type: provider.ListStorageSpacesRequest_Filter_TYPE_ID, Term: &provider.ListStorageSpacesRequest_Filter_Id{Id: id}}}, true)
if err != nil {
diff --git a/internal/http/services/appprovider/appprovider.go b/internal/http/services/appprovider/appprovider.go
index 5ab334cac6..bf7154e586 100644
--- a/internal/http/services/appprovider/appprovider.go
+++ b/internal/http/services/appprovider/appprovider.go
@@ -48,6 +48,7 @@ import (
"github.com/mitchellh/mapstructure"
"github.com/pkg/errors"
"github.com/rs/zerolog"
+ "google.golang.org/protobuf/proto"
)
func init() {
@@ -304,7 +305,7 @@ func (s *svc) handleNew(w http.ResponseWriter, r *http.Request) {
writeError(w, r, appErrorInvalidParameter, "the given file id does not point to a file", nil)
return
}
- fileid = storagespace.FormatResourceID(*statRes.Info.Id)
+ fileid = storagespace.FormatResourceID(statRes.Info.Id)
}
js, err := json.Marshal(
@@ -574,7 +575,8 @@ func buildApps(mimeTypes []*appregistry.MimeTypeInfo, userAgent, secureViewAppAd
for _, m := range mimeTypes {
apps := []*ProviderInfo{}
for _, p := range m.AppProviders {
- ep := &ProviderInfo{ProviderInfo: *p}
+ ep := &ProviderInfo{}
+ proto.Merge(&ep.ProviderInfo, p)
if p.Address == secureViewAppAddr {
ep.SecureView = true
}
@@ -586,7 +588,8 @@ func buildApps(mimeTypes []*appregistry.MimeTypeInfo, userAgent, secureViewAppAd
}
}
if len(apps) > 0 {
- mt := &MimeTypeInfo{MimeTypeInfo: *m}
+ mt := &MimeTypeInfo{}
+ proto.Merge(&mt.MimeTypeInfo, m)
mt.AppProviders = apps
res = append(res, mt)
}
diff --git a/internal/http/services/owncloud/ocdav/copy.go b/internal/http/services/owncloud/ocdav/copy.go
index 2ebd66ef9b..97b4686420 100644
--- a/internal/http/services/owncloud/ocdav/copy.go
+++ b/internal/http/services/owncloud/ocdav/copy.go
@@ -214,7 +214,7 @@ func (s *svc) executePathCopy(ctx context.Context, selector pool.Selectable[gate
return fmt.Errorf("status code %d", r.GetStatus().GetCode())
}
- fileid = storagespace.FormatResourceID(*r.GetInfo().GetId())
+ fileid = storagespace.FormatResourceID(r.GetInfo().GetId())
} else {
// copy file
@@ -438,7 +438,7 @@ func (s *svc) executeSpacesCopy(ctx context.Context, w http.ResponseWriter, sele
return fmt.Errorf("stat: status code %d", r.GetStatus().GetCode())
}
- fileid = storagespace.FormatResourceID(*r.GetInfo().GetId())
+ fileid = storagespace.FormatResourceID(r.GetInfo().GetId())
} else {
// copy file
// 1. get download url
diff --git a/internal/http/services/owncloud/ocdav/dav.go b/internal/http/services/owncloud/ocdav/dav.go
index 50fe001667..ba82e15439 100644
--- a/internal/http/services/owncloud/ocdav/dav.go
+++ b/internal/http/services/owncloud/ocdav/dav.go
@@ -287,7 +287,7 @@ func (h *DavHandler) Handler(s *svc) http.Handler {
// If the link is internal then 307 redirect
if psRes.Status.Code == rpc.Code_CODE_OK && grants.PermissionsEqual(psRes.Share.Permissions.GetPermissions(), &provider.ResourcePermissions{}) {
if psRes.GetShare().GetResourceId() != nil {
- rUrl := path.Join("/dav/spaces", storagespace.FormatResourceID(*psRes.GetShare().GetResourceId()))
+ rUrl := path.Join("/dav/spaces", storagespace.FormatResourceID(psRes.GetShare().GetResourceId()))
http.Redirect(w, r, rUrl, http.StatusTemporaryRedirect)
return
}
diff --git a/internal/http/services/owncloud/ocdav/head.go b/internal/http/services/owncloud/ocdav/head.go
index f055d18f49..10e2af57f9 100644
--- a/internal/http/services/owncloud/ocdav/head.go
+++ b/internal/http/services/owncloud/ocdav/head.go
@@ -85,7 +85,7 @@ func (s *svc) handleHead(ctx context.Context, w http.ResponseWriter, r *http.Req
info := res.Info
w.Header().Set(net.HeaderContentType, info.MimeType)
w.Header().Set(net.HeaderETag, info.Etag)
- w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(*info.Id))
+ w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(info.Id))
w.Header().Set(net.HeaderOCETag, info.Etag)
if info.Checksum != nil {
w.Header().Set(net.HeaderOCChecksum, fmt.Sprintf("%s:%s", strings.ToUpper(string(storageprovider.GRPC2PKGXS(info.Checksum.Type))), info.Checksum.Sum))
diff --git a/internal/http/services/owncloud/ocdav/meta.go b/internal/http/services/owncloud/ocdav/meta.go
index 9bdf2a99e9..1ac28f5b80 100644
--- a/internal/http/services/owncloud/ocdav/meta.go
+++ b/internal/http/services/owncloud/ocdav/meta.go
@@ -104,7 +104,7 @@ func (h *MetaHandler) handlePathForUser(w http.ResponseWriter, r *http.Request,
ctx, span := appctx.GetTracerProvider(r.Context()).Tracer(tracerName).Start(r.Context(), "meta_propfind")
defer span.End()
- id := storagespace.FormatResourceID(*rid)
+ id := storagespace.FormatResourceID(rid)
sublog := appctx.GetLogger(ctx).With().Str("path", r.URL.Path).Str("resourceid", id).Logger()
sublog.Info().Msg("calling get path for user")
diff --git a/internal/http/services/owncloud/ocdav/move.go b/internal/http/services/owncloud/ocdav/move.go
index 9b1e3c705b..79a6bbd563 100644
--- a/internal/http/services/owncloud/ocdav/move.go
+++ b/internal/http/services/owncloud/ocdav/move.go
@@ -345,7 +345,7 @@ func (s *svc) handleMove(ctx context.Context, w http.ResponseWriter, r *http.Req
info := dstStatRes.Info
w.Header().Set(net.HeaderContentType, info.MimeType)
w.Header().Set(net.HeaderETag, info.Etag)
- w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(*info.Id))
+ w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(info.Id))
w.Header().Set(net.HeaderOCETag, info.Etag)
w.WriteHeader(successCode)
}
diff --git a/internal/http/services/owncloud/ocdav/ocdav_blackbox_test.go b/internal/http/services/owncloud/ocdav/ocdav_blackbox_test.go
index bbfce7cded..8a97069734 100644
--- a/internal/http/services/owncloud/ocdav/ocdav_blackbox_test.go
+++ b/internal/http/services/owncloud/ocdav/ocdav_blackbox_test.go
@@ -172,7 +172,7 @@ var _ = Describe("ocdav", func() {
},
},
},
- Id: &cs3storageprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})},
+ Id: &cs3storageprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})},
Root: &cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "userspace", OpaqueId: "root"},
Name: "username",
RootInfo: &cs3storageprovider.ResourceInfo{
@@ -864,7 +864,7 @@ var _ = Describe("ocdav", func() {
// setup the request
// set the webdav endpoint to test
basePath = "/webdav"
- userspace.Id = &cs3storageprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "userspace", OpaqueId: "userspace"})}
+ userspace.Id = &cs3storageprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "userspace", OpaqueId: "userspace"})}
userspace.Root = &cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "userspace", OpaqueId: "userspace"}
// path based requests at the /webdav endpoint first look up the storage space
@@ -938,7 +938,7 @@ var _ = Describe("ocdav", func() {
BeforeEach(func() {
basePath = "/dav/spaces"
- userspace.Id = &cs3storageprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "userspace", OpaqueId: "userspace"})}
+ userspace.Id = &cs3storageprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "userspace", OpaqueId: "userspace"})}
userspace.Root = &cs3storageprovider.ResourceId{StorageId: "provider-1", SpaceId: "userspace", OpaqueId: "userspace"}
// path based requests at the /webdav endpoint first look up the storage space
client.On("ListStorageSpaces", mock.Anything, mock.MatchedBy(func(req *cs3storageprovider.ListStorageSpacesRequest) bool {
diff --git a/internal/http/services/owncloud/ocdav/ocdav_whitebox_test.go b/internal/http/services/owncloud/ocdav/ocdav_whitebox_test.go
index 97acf61de7..1529d8fa2e 100644
--- a/internal/http/services/owncloud/ocdav/ocdav_whitebox_test.go
+++ b/internal/http/services/owncloud/ocdav/ocdav_whitebox_test.go
@@ -28,7 +28,7 @@ import (
func TestWrapResourceID(t *testing.T) {
expected := "storageid" + "$" + "spaceid" + "!" + "opaqueid"
- wrapped := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"})
+ wrapped := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"})
if wrapped != expected {
t.Errorf("wrapped id doesn't have the expected format: got %s expected %s", wrapped, expected)
diff --git a/internal/http/services/owncloud/ocdav/propfind/propfind.go b/internal/http/services/owncloud/ocdav/propfind/propfind.go
index 31f11b6ebc..42269f8063 100644
--- a/internal/http/services/owncloud/ocdav/propfind/propfind.go
+++ b/internal/http/services/owncloud/ocdav/propfind/propfind.go
@@ -1177,7 +1177,7 @@ func mdToPropResponse(ctx context.Context, pf *XML, md *provider.ResourceInfo, p
// return all known properties
if id != nil {
- sid := storagespace.FormatResourceID(*id)
+ sid := storagespace.FormatResourceID(id)
appendToOK(
prop.Escaped("oc:id", sid),
prop.Escaped("oc:fileid", sid),
@@ -1186,7 +1186,7 @@ func mdToPropResponse(ctx context.Context, pf *XML, md *provider.ResourceInfo, p
}
if md.ParentId != nil {
- appendToOK(prop.Escaped("oc:file-parent", storagespace.FormatResourceID(*md.ParentId)))
+ appendToOK(prop.Escaped("oc:file-parent", storagespace.FormatResourceID(md.ParentId)))
} else {
appendToNotFound(prop.NotFound("oc:file-parent"))
}
@@ -1305,19 +1305,19 @@ func mdToPropResponse(ctx context.Context, pf *XML, md *provider.ResourceInfo, p
// I tested the desktop client and phoenix to annotate which properties are requestted, see below cases
case "fileid": // phoenix only
if id != nil {
- appendToOK(prop.Escaped("oc:fileid", storagespace.FormatResourceID(*id)))
+ appendToOK(prop.Escaped("oc:fileid", storagespace.FormatResourceID(id)))
} else {
appendToNotFound(prop.NotFound("oc:fileid"))
}
case "id": // desktop client only
if id != nil {
- appendToOK(prop.Escaped("oc:id", storagespace.FormatResourceID(*id)))
+ appendToOK(prop.Escaped("oc:id", storagespace.FormatResourceID(id)))
} else {
appendToNotFound(prop.NotFound("oc:id"))
}
case "file-parent":
if md.ParentId != nil {
- appendToOK(prop.Escaped("oc:file-parent", storagespace.FormatResourceID(*md.ParentId)))
+ appendToOK(prop.Escaped("oc:file-parent", storagespace.FormatResourceID(md.ParentId)))
} else {
appendToNotFound(prop.NotFound("oc:file-parent"))
}
@@ -1521,7 +1521,7 @@ func mdToPropResponse(ctx context.Context, pf *XML, md *provider.ResourceInfo, p
case "privatelink":
privateURL, err := url.Parse(publicURL)
if err == nil && id != nil {
- privateURL.Path = path.Join(privateURL.Path, "f", storagespace.FormatResourceID(*id))
+ privateURL.Path = path.Join(privateURL.Path, "f", storagespace.FormatResourceID(id))
propstatOK.Prop = append(propstatOK.Prop, prop.Escaped("oc:privatelink", privateURL.String()))
} else {
propstatNotFound.Prop = append(propstatNotFound.Prop, prop.NotFound("oc:privatelink"))
diff --git a/internal/http/services/owncloud/ocdav/propfind/propfind_test.go b/internal/http/services/owncloud/ocdav/propfind/propfind_test.go
index 07692245f0..7d4dcebbfa 100644
--- a/internal/http/services/owncloud/ocdav/propfind/propfind_test.go
+++ b/internal/http/services/owncloud/ocdav/propfind/propfind_test.go
@@ -128,7 +128,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"},
Name: "foospace",
}
@@ -141,7 +141,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooquxspace", OpaqueId: "root"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooquxspace", OpaqueId: "root"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooquxspace", OpaqueId: "root"},
Name: "fooquxspace",
}
@@ -154,7 +154,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace", OpaqueId: "sharedfile"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace", OpaqueId: "sharedfile"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace", OpaqueId: "sharedfile"},
Name: "fooFileShareSpace",
}
@@ -167,7 +167,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace2", OpaqueId: "sharedfile2"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace2", OpaqueId: "sharedfile2"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace2", OpaqueId: "sharedfile2"},
Name: "fooFileShareSpace2",
}
@@ -180,7 +180,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooDirShareSpace", OpaqueId: "shareddir"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooDirShareSpace", OpaqueId: "shareddir"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooDirShareSpace", OpaqueId: "shareddir"},
Name: "fooDirShareSpace",
}
@@ -787,7 +787,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
spaceIDUrl := net.EncodePath(spaceID)
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -822,7 +822,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -838,7 +838,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -855,7 +855,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -873,7 +873,7 @@ var _ = Describe("PropfindWithDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -959,7 +959,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"},
Name: "foospace",
}
@@ -972,7 +972,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooquxspace", OpaqueId: "root"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooquxspace", OpaqueId: "root"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooquxspace", OpaqueId: "root"},
Name: "fooquxspace",
}
@@ -985,7 +985,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace", OpaqueId: "sharedfile"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace", OpaqueId: "sharedfile"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace", OpaqueId: "sharedfile"},
Name: "fooFileShareSpace",
}
@@ -998,7 +998,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace2", OpaqueId: "sharedfile2"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace2", OpaqueId: "sharedfile2"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooFileShareSpace2", OpaqueId: "sharedfile2"},
Name: "fooFileShareSpace2",
}
@@ -1011,7 +1011,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
},
},
},
- Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooDirShareSpace", OpaqueId: "shareddir"})},
+ Id: &sprovider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooDirShareSpace", OpaqueId: "shareddir"})},
Root: &sprovider.ResourceId{StorageId: "provider-1", SpaceId: "fooDirShareSpace", OpaqueId: "shareddir"},
Name: "fooDirShareSpace",
}
@@ -1598,7 +1598,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
spaceIDUrl := net.EncodePath(spaceID)
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -1633,7 +1633,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -1649,7 +1649,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -1666,7 +1666,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusMultiStatus))
@@ -1684,7 +1684,7 @@ var _ = Describe("PropfindWithoutDepthInfinity", func() {
Expect(err).ToNot(HaveOccurred())
req = req.WithContext(ctx)
- spaceID := storagespace.FormatResourceID(sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
+ spaceID := storagespace.FormatResourceID(&sprovider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "root"})
handler.HandleSpacesPropfind(rr, req, spaceID)
Expect(rr.Code).To(Equal(http.StatusBadRequest))
diff --git a/internal/http/services/owncloud/ocdav/put.go b/internal/http/services/owncloud/ocdav/put.go
index 5f931a16f8..9811efd385 100644
--- a/internal/http/services/owncloud/ocdav/put.go
+++ b/internal/http/services/owncloud/ocdav/put.go
@@ -230,7 +230,7 @@ func (s *svc) handlePut(ctx context.Context, w http.ResponseWriter, r *http.Requ
w.Header().Set(net.HeaderETag, sRes.Info.Etag)
w.Header().Set(net.HeaderOCETag, sRes.Info.Etag)
- w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(*sRes.Info.Id))
+ w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(sRes.Info.Id))
w.Header().Set(net.HeaderLastModified, net.RFC1123Z(sRes.Info.Mtime))
w.WriteHeader(http.StatusCreated)
diff --git a/internal/http/services/owncloud/ocdav/spaces.go b/internal/http/services/owncloud/ocdav/spaces.go
index 158fc569b6..37797d60ad 100644
--- a/internal/http/services/owncloud/ocdav/spaces.go
+++ b/internal/http/services/owncloud/ocdav/spaces.go
@@ -22,6 +22,7 @@ import (
"net/http"
"path"
+ provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocdav/config"
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocdav/errors"
"github.com/cs3org/reva/v2/internal/http/services/owncloud/ocdav/net"
@@ -30,6 +31,7 @@ import (
"github.com/cs3org/reva/v2/pkg/rhttp/router"
"github.com/cs3org/reva/v2/pkg/storagespace"
"github.com/cs3org/reva/v2/pkg/utils"
+ "google.golang.org/protobuf/proto"
)
// SpacesHandler handles trashbin requests
@@ -167,10 +169,10 @@ func (h *SpacesHandler) handleSpacesTrashbin(w http.ResponseWriter, r *http.Requ
}
log.Debug().Str("key", key).Str("path", r.URL.Path).Str("dst", dst).Msg("spaces restore")
- dstRef := ref
+ dstRef := proto.Clone(&ref).(*provider.Reference)
dstRef.Path = utils.MakeRelativePath(dst)
- trashbinHandler.restore(w, r, s, &ref, &dstRef, key, r.URL.Path)
+ trashbinHandler.restore(w, r, s, &ref, dstRef, key, r.URL.Path)
case http.MethodDelete:
trashbinHandler.delete(w, r, s, &ref, key, r.URL.Path)
default:
diff --git a/internal/http/services/owncloud/ocdav/trashbin.go b/internal/http/services/owncloud/ocdav/trashbin.go
index 0888151f95..ef742c54df 100644
--- a/internal/http/services/owncloud/ocdav/trashbin.go
+++ b/internal/http/services/owncloud/ocdav/trashbin.go
@@ -601,7 +601,7 @@ func (h *TrashbinHandler) restore(w http.ResponseWriter, r *http.Request, s *svc
info := dstStatRes.Info
w.Header().Set(net.HeaderContentType, info.MimeType)
w.Header().Set(net.HeaderETag, info.Etag)
- w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(*info.Id))
+ w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(info.Id))
w.Header().Set(net.HeaderOCETag, info.Etag)
w.WriteHeader(successCode)
diff --git a/internal/http/services/owncloud/ocdav/tus.go b/internal/http/services/owncloud/ocdav/tus.go
index 04696eb05a..2b85a1d231 100644
--- a/internal/http/services/owncloud/ocdav/tus.go
+++ b/internal/http/services/owncloud/ocdav/tus.go
@@ -377,7 +377,7 @@ func (s *svc) handleTusPost(ctx context.Context, w http.ResponseWriter, r *http.
)
w.Header().Set(net.HeaderContentType, info.MimeType)
- w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(*info.Id))
+ w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(info.Id))
w.Header().Set(net.HeaderOCETag, info.Etag)
w.Header().Set(net.HeaderETag, info.Etag)
w.Header().Set(net.HeaderOCPermissions, permissions)
diff --git a/internal/http/services/owncloud/ocdav/versions.go b/internal/http/services/owncloud/ocdav/versions.go
index 0c9de36c35..e9b25ac999 100644
--- a/internal/http/services/owncloud/ocdav/versions.go
+++ b/internal/http/services/owncloud/ocdav/versions.go
@@ -58,7 +58,7 @@ func (h *VersionsHandler) Handler(s *svc, rid *provider.ResourceId) http.Handler
}
// baseURI is encoded as part of the response payload in href field
- baseURI := path.Join(ctx.Value(net.CtxKeyBaseURI).(string), storagespace.FormatResourceID(*rid))
+ baseURI := path.Join(ctx.Value(net.CtxKeyBaseURI).(string), storagespace.FormatResourceID(rid))
ctx = context.WithValue(ctx, net.CtxKeyBaseURI, baseURI)
r = r.WithContext(ctx)
diff --git a/internal/http/services/owncloud/ocs/handlers/apps/sharing/sharees/token.go b/internal/http/services/owncloud/ocs/handlers/apps/sharing/sharees/token.go
index be0c12e1ca..90774e6187 100644
--- a/internal/http/services/owncloud/ocs/handlers/apps/sharing/sharees/token.go
+++ b/internal/http/services/owncloud/ocs/handlers/apps/sharing/sharees/token.go
@@ -81,7 +81,7 @@ func handleGetToken(ctx context.Context, tkn string, pw string, c gateway.Gatewa
}
if protected && !t.PasswordProtected {
- space, status, err := spacelookup.LookUpStorageSpaceByID(ctx, c, storagespace.FormatResourceID(provider.ResourceId{StorageId: t.StorageID, SpaceId: t.SpaceID, OpaqueId: t.OpaqueID}))
+ space, status, err := spacelookup.LookUpStorageSpaceByID(ctx, c, storagespace.FormatResourceID(&provider.ResourceId{StorageId: t.StorageID, SpaceId: t.SpaceID, OpaqueId: t.OpaqueID}))
// add info only if user is able to stat
if err == nil && status.Code == rpc.Code_CODE_OK {
t.SpacePath = utils.ReadPlainFromOpaque(space.Opaque, "path")
@@ -111,7 +111,7 @@ func buildTokenInfo(owner *user.User, tkn string, token string, passProtected bo
return t, fmt.Errorf("can't stat resource. %+v %s", sRes, err)
}
- t.ID = storagespace.FormatResourceID(*sRes.Share.GetResourceId())
+ t.ID = storagespace.FormatResourceID(sRes.Share.GetResourceId())
t.StorageID = sRes.Share.ResourceId.GetStorageId()
t.SpaceID = sRes.Share.ResourceId.GetSpaceId()
t.OpaqueID = sRes.Share.ResourceId.GetOpaqueId()
diff --git a/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/public.go b/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/public.go
index dd636f4b54..25da16b6dc 100644
--- a/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/public.go
+++ b/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/public.go
@@ -323,7 +323,7 @@ func (h *Handler) updatePublicShare(w http.ResponseWriter, r *http.Request, shar
return
}
- createdByUser := publicshare.IsCreatedByUser(*share, user)
+ createdByUser := publicshare.IsCreatedByUser(share, user)
// NOTE: you are allowed to update a link TO a public link without the `PublicLink.Write` permission if you created it yourself
if (permKey != nil && *permKey != 0) || !createdByUser {
@@ -540,7 +540,7 @@ func (h *Handler) removePublicShare(w http.ResponseWriter, r *http.Request, shar
}
u := ctxpkg.ContextMustGetUser(ctx)
- if !publicshare.IsCreatedByUser(*share, u) {
+ if !publicshare.IsCreatedByUser(share, u) {
sRes, err := c.Stat(r.Context(), &provider.StatRequest{Ref: &provider.Reference{ResourceId: share.ResourceId}})
if err != nil {
log.Err(err).Interface("resource_id", share.ResourceId).Msg("failed to stat shared resource")
diff --git a/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/shares.go b/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/shares.go
index b006d5d528..02d92344f1 100644
--- a/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/shares.go
+++ b/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/shares.go
@@ -179,13 +179,14 @@ func (h *Handler) startCacheWarmup(c sharecache.Warmup) {
}
}
-func (h *Handler) extractReference(r *http.Request) (provider.Reference, error) {
- var ref provider.Reference
+func (h *Handler) extractReference(r *http.Request) (*provider.Reference, error) {
+ ref := &provider.Reference{}
// NOTE: space_ref is deprecated and will be removed in ~2 weeks (1.6.22)
sr := r.FormValue("space_ref")
if sr != "" {
- return storagespace.ParseReference(sr)
+ ref, err := storagespace.ParseReference(sr)
+ return &ref, err
}
p, id := r.FormValue("path"), r.FormValue("space")
@@ -243,7 +244,7 @@ func (h *Handler) CreateShare(w http.ResponseWriter, r *http.Request) {
return
}
- statReq := provider.StatRequest{Ref: &ref, FieldMask: &fieldmaskpb.FieldMask{Paths: []string{"space"}}}
+ statReq := provider.StatRequest{Ref: ref, FieldMask: &fieldmaskpb.FieldMask{Paths: []string{"space"}}}
statRes, err := client.Stat(ctx, &statReq)
if err != nil {
sublog.Debug().Err(err).Msg("CreateShare: error on stat call")
@@ -976,7 +977,7 @@ func (h *Handler) listSharesWithMe(w http.ResponseWriter, r *http.Request) {
}
var status *rpc.Status
- pinfo, status, err = h.getResourceInfoByReference(ctx, client, &ref)
+ pinfo, status, err = h.getResourceInfoByReference(ctx, client, ref)
if err != nil {
response.WriteOCSError(w, r, response.MetaServerError.StatusCode, "error sending a grpc stat request", err)
return
@@ -1157,7 +1158,7 @@ func (h *Handler) listSharesWithOthers(w http.ResponseWriter, r *http.Request) {
response.WriteOCSError(w, r, response.MetaBadRequest.StatusCode, errParsingSpaceReference.Error(), errParsingSpaceReference)
return
}
- filters, linkFilters, e = h.addFilters(w, r, &ref)
+ filters, linkFilters, e = h.addFilters(w, r, ref)
if e != nil {
// result has been written as part of addFilters
return
@@ -1275,7 +1276,7 @@ func (h *Handler) addFileInfo(ctx context.Context, s *conversions.ShareData, inf
s.MimeType = parsedMt
// TODO STime: &types.Timestamp{Seconds: info.Mtime.Seconds, Nanos: info.Mtime.Nanos},
// TODO Storage: int
- s.ItemSource = storagespace.FormatResourceID(*info.Id)
+ s.ItemSource = storagespace.FormatResourceID(info.Id)
s.FileSource = s.ItemSource
s.Path = path.Join("/", info.Path)
switch {
@@ -1317,7 +1318,7 @@ func (h *Handler) addFileInfo(ctx context.Context, s *conversions.ShareData, inf
s.StorageID = storageIDPrefix + s.FileTarget
if info.ParentId != nil {
- s.FileParent = storagespace.FormatResourceID(*info.ParentId)
+ s.FileParent = storagespace.FormatResourceID(info.ParentId)
}
// item type
s.ItemType = conversions.ResourceType(info.GetType()).String()
@@ -1333,7 +1334,7 @@ func (h *Handler) addFileInfo(ctx context.Context, s *conversions.ShareData, inf
}
if info.GetSpace().GetRoot() != nil {
- s.SpaceID = storagespace.FormatResourceID(*info.GetSpace().GetRoot())
+ s.SpaceID = storagespace.FormatResourceID(info.GetSpace().GetRoot())
}
s.SpaceAlias = utils.ReadPlainFromOpaque(info.GetSpace().GetOpaque(), "spaceAlias")
}
diff --git a/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/spaces.go b/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/spaces.go
index 35ccf7a65b..aa85d0ae1a 100644
--- a/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/spaces.go
+++ b/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/spaces.go
@@ -150,14 +150,14 @@ func (h *Handler) addSpaceMember(w http.ResponseWriter, r *http.Request, info *p
return
}
- if !isSpaceManagerRemaining(lgRes.Grants, grantee) {
+ if !isSpaceManagerRemaining(lgRes.Grants, &grantee) {
response.WriteOCSError(w, r, http.StatusForbidden, "the space must have at least one manager", nil)
return
}
// we have to send the update request to the gateway to give it a chance to invalidate its cache
// TODO the gateway no longer should cache stuff because invalidation is to expensive. The decomposedfs already has a better cache.
- if granteeExists(lgRes.Grants, grantee) {
+ if granteeExists(lgRes.Grants, &grantee) {
if permissions != nil {
fieldmask = append(fieldmask, "permissions")
}
@@ -257,7 +257,7 @@ func (h *Handler) removeSpaceMember(w http.ResponseWriter, r *http.Request, spac
return
}
- if len(lgRes.Grants) == 1 || !isSpaceManagerRemaining(lgRes.Grants, grantee) {
+ if len(lgRes.Grants) == 1 || !isSpaceManagerRemaining(lgRes.Grants, &grantee) {
response.WriteOCSError(w, r, http.StatusForbidden, "can't remove the last manager", nil)
return
}
@@ -349,28 +349,28 @@ func (h *Handler) findProvider(ctx context.Context, ref *provider.Reference) (*r
return res.Providers[0], nil
}
-func isSpaceManagerRemaining(grants []*provider.Grant, grantee provider.Grantee) bool {
+func isSpaceManagerRemaining(grants []*provider.Grant, grantee *provider.Grantee) bool {
for _, g := range grants {
// RemoveGrant is currently the way to check for the manager role
// If it is not set than the current grant is not for a manager and
// we can just continue with the next one.
- if g.Permissions.RemoveGrant && !isEqualGrantee(*g.Grantee, grantee) {
+ if g.Permissions.RemoveGrant && !isEqualGrantee(g.Grantee, grantee) {
return true
}
}
return false
}
-func granteeExists(grants []*provider.Grant, grantee provider.Grantee) bool {
+func granteeExists(grants []*provider.Grant, grantee *provider.Grantee) bool {
for _, g := range grants {
- if isEqualGrantee(*g.Grantee, grantee) {
+ if isEqualGrantee(g.Grantee, grantee) {
return true
}
}
return false
}
-func isEqualGrantee(a, b provider.Grantee) bool {
+func isEqualGrantee(a, b *provider.Grantee) bool {
// Ideally we would want to use utils.GranteeEqual()
// but the grants stored in the decomposedfs aren't complete (missing usertype and idp)
// because of that the check would fail so we can only check the ... for now.
diff --git a/pkg/app/provider/demo/demo.go b/pkg/app/provider/demo/demo.go
index 9964eb0948..e5a83cf750 100644
--- a/pkg/app/provider/demo/demo.go
+++ b/pkg/app/provider/demo/demo.go
@@ -40,7 +40,7 @@ type demoProvider struct {
}
func (p *demoProvider) GetAppURL(ctx context.Context, resource *provider.ResourceInfo, viewMode appprovider.ViewMode, token, language string) (*appprovider.OpenInAppURL, error) {
- url := fmt.Sprintf("", p.iframeUIProvider, storagespace.FormatResourceID(*resource.Id), viewMode.String(), token)
+ url := fmt.Sprintf("", p.iframeUIProvider, storagespace.FormatResourceID(resource.Id), viewMode.String(), token)
return &appprovider.OpenInAppURL{
AppUrl: url,
Method: "GET",
diff --git a/pkg/app/registry/micro/manager.go b/pkg/app/registry/micro/manager.go
index 26fa6b5f56..4df4e0ad3f 100644
--- a/pkg/app/registry/micro/manager.go
+++ b/pkg/app/registry/micro/manager.go
@@ -190,13 +190,13 @@ func (m *manager) getProvidersFromMicroRegistry(ctx context.Context) ([]*registr
for _, node := range services[0].Nodes {
p := m.providerFromMetadata(node.Metadata)
p.Address = node.Address
- providers = append(providers, &p)
+ providers = append(providers, p)
}
return providers, nil
}
-func (m *manager) providerFromMetadata(metadata map[string]string) registrypb.ProviderInfo {
- p := registrypb.ProviderInfo{
+func (m *manager) providerFromMetadata(metadata map[string]string) *registrypb.ProviderInfo {
+ p := ®istrypb.ProviderInfo{
MimeTypes: splitMimeTypes(metadata[m.namespace+".app-provider.mime_type"]),
// Address: node.Address,
Name: metadata[m.namespace+".app-provider.name"],
diff --git a/pkg/appauth/manager/json/json.go b/pkg/appauth/manager/json/json.go
index fa6cc6fc49..0b63252dae 100644
--- a/pkg/appauth/manager/json/json.go
+++ b/pkg/appauth/manager/json/json.go
@@ -38,6 +38,7 @@ import (
"github.com/pkg/errors"
"github.com/sethvargo/go-password/password"
"golang.org/x/crypto/bcrypt"
+ "google.golang.org/protobuf/proto"
)
func init() {
@@ -165,9 +166,9 @@ func (mgr *jsonManager) GenerateAppPassword(ctx context.Context, scope map[strin
return nil, errors.Wrap(err, "error saving new token")
}
- clonedAppPass := *appPass
+ clonedAppPass := proto.Clone(appPass).(*apppb.AppPassword)
clonedAppPass.Password = token
- return &clonedAppPass, nil
+ return clonedAppPass, nil
}
func (mgr *jsonManager) ListAppPasswords(ctx context.Context) ([]*apppb.AppPassword, error) {
diff --git a/pkg/auth/manager/nextcloud/nextcloud.go b/pkg/auth/manager/nextcloud/nextcloud.go
index 2951a1b076..d59cc3cbe2 100644
--- a/pkg/auth/manager/nextcloud/nextcloud.go
+++ b/pkg/auth/manager/nextcloud/nextcloud.go
@@ -180,8 +180,8 @@ func (am *Manager) Authenticate(ctx context.Context, clientID, clientSecret stri
}
type resultsObj struct {
- User user.User `json:"user"`
- Scopes map[string]authpb.Scope `json:"scopes"`
+ User user.User `json:"user"`
+ Scopes map[string]*authpb.Scope `json:"scopes"`
}
result := &resultsObj{}
err = json.Unmarshal(body, &result)
@@ -191,7 +191,7 @@ func (am *Manager) Authenticate(ctx context.Context, clientID, clientSecret stri
var pointersMap = make(map[string]*authpb.Scope)
for k := range result.Scopes {
scope := result.Scopes[k]
- pointersMap[k] = &scope
+ pointersMap[k] = scope
}
return &result.User, pointersMap, nil
}
diff --git a/pkg/auth/scope/ocmshare.go b/pkg/auth/scope/ocmshare.go
index af01f0a152..ec51c10ec9 100644
--- a/pkg/auth/scope/ocmshare.go
+++ b/pkg/auth/scope/ocmshare.go
@@ -93,25 +93,25 @@ func ocmShareScope(_ context.Context, scope *authpb.Scope, resource interface{},
// editor role
case *provider.CreateContainerRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
case *provider.TouchFileRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
case *provider.DeleteRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
case *provider.MoveRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetSource(), ocmNamespace) && checkStorageRefForOCMShare(&share, v.GetDestination(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetSource(), ocmNamespace) && checkStorageRefForOCMShare(&share, v.GetDestination(), ocmNamespace), nil
case *provider.InitiateFileUploadRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
case *provider.SetArbitraryMetadataRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
case *provider.UnsetArbitraryMetadataRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
case *provider.SetLockRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
case *provider.RefreshLockRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
case *provider.UnlockRequest:
- return hasRoleEditor(*scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
+ return hasRoleEditor(scope) && checkStorageRefForOCMShare(&share, v.GetRef(), ocmNamespace), nil
// App provider requests
case *appregistry.GetDefaultAppProviderForMimeTypeRequest:
diff --git a/pkg/auth/scope/publicshare.go b/pkg/auth/scope/publicshare.go
index 92d9925391..8dd0eafcfd 100644
--- a/pkg/auth/scope/publicshare.go
+++ b/pkg/auth/scope/publicshare.go
@@ -106,19 +106,19 @@ func publicshareScope(ctx context.Context, scope *authpb.Scope, resource interfa
// Editor role
// need to return appropriate status codes in the ocs/ocdav layers.
case *provider.CreateContainerRequest:
- return hasRoleEditor(*scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
case *provider.TouchFileRequest:
- return hasRoleEditor(*scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
case *provider.DeleteRequest:
- return hasRoleEditor(*scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
case *provider.MoveRequest:
- return hasRoleEditor(*scope) && checkStorageRef(ctx, &share, v.GetSource()) && checkStorageRef(ctx, &share, v.GetDestination()), nil
+ return hasRoleEditor(scope) && checkStorageRef(ctx, &share, v.GetSource()) && checkStorageRef(ctx, &share, v.GetDestination()), nil
case *provider.InitiateFileUploadRequest:
- return hasRoleEditor(*scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
case *provider.SetArbitraryMetadataRequest:
- return hasRoleEditor(*scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
case *provider.UnsetArbitraryMetadataRequest:
- return hasRoleEditor(*scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkStorageRef(ctx, &share, v.GetRef()), nil
// App provider requests
case *appregistry.GetDefaultAppProviderForMimeTypeRequest:
diff --git a/pkg/auth/scope/resourceinfo.go b/pkg/auth/scope/resourceinfo.go
index 769f3aa5dd..2d2f311705 100644
--- a/pkg/auth/scope/resourceinfo.go
+++ b/pkg/auth/scope/resourceinfo.go
@@ -83,19 +83,19 @@ func resourceinfoScope(_ context.Context, scope *authpb.Scope, resource interfac
// Editor role
// need to return appropriate status codes in the ocs/ocdav layers.
case *provider.CreateContainerRequest:
- return hasRoleEditor(*scope) && checkResourceInfo(&r, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkResourceInfo(&r, v.GetRef()), nil
case *provider.TouchFileRequest:
- return hasRoleEditor(*scope) && checkResourceInfo(&r, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkResourceInfo(&r, v.GetRef()), nil
case *provider.DeleteRequest:
- return hasRoleEditor(*scope) && checkResourceInfo(&r, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkResourceInfo(&r, v.GetRef()), nil
case *provider.MoveRequest:
- return hasRoleEditor(*scope) && checkResourceInfo(&r, v.GetSource()) && checkResourceInfo(&r, v.GetDestination()), nil
+ return hasRoleEditor(scope) && checkResourceInfo(&r, v.GetSource()) && checkResourceInfo(&r, v.GetDestination()), nil
case *provider.InitiateFileUploadRequest:
- return hasRoleEditor(*scope) && checkResourceInfo(&r, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkResourceInfo(&r, v.GetRef()), nil
case *provider.SetArbitraryMetadataRequest:
- return hasRoleEditor(*scope) && checkResourceInfo(&r, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkResourceInfo(&r, v.GetRef()), nil
case *provider.UnsetArbitraryMetadataRequest:
- return hasRoleEditor(*scope) && checkResourceInfo(&r, v.GetRef()), nil
+ return hasRoleEditor(scope) && checkResourceInfo(&r, v.GetRef()), nil
case string:
return checkResourcePath(v), nil
diff --git a/pkg/auth/scope/scope.go b/pkg/auth/scope/scope.go
index 17ce9bd79b..a8ebe4c34a 100644
--- a/pkg/auth/scope/scope.go
+++ b/pkg/auth/scope/scope.go
@@ -56,6 +56,6 @@ func VerifyScope(ctx context.Context, scopeMap map[string]*authpb.Scope, resourc
return false, nil
}
-func hasRoleEditor(scope authpb.Scope) bool {
+func hasRoleEditor(scope *authpb.Scope) bool {
return scope.Role == authpb.Role_ROLE_OWNER || scope.Role == authpb.Role_ROLE_EDITOR || scope.Role == authpb.Role_ROLE_UPLOADER
}
diff --git a/pkg/conversions/main.go b/pkg/conversions/main.go
index dbeaedd372..e46f4fa3b4 100644
--- a/pkg/conversions/main.go
+++ b/pkg/conversions/main.go
@@ -345,7 +345,7 @@ func ReceivedOCMShare2ShareData(share *ocm.ReceivedShare, path string) (*ShareDa
FileTarget: shareTarget,
MimeType: mime.Detect(share.ResourceType == provider.ResourceType_RESOURCE_TYPE_CONTAINER, share.Name),
ItemType: ResourceType(share.ResourceType).String(),
- ItemSource: storagespace.FormatResourceID(provider.ResourceId{
+ ItemSource: storagespace.FormatResourceID(&provider.ResourceId{
StorageId: utils.OCMStorageProviderID,
SpaceId: share.Id.OpaqueId,
OpaqueId: opaqueid,
diff --git a/pkg/group/manager/json/json.go b/pkg/group/manager/json/json.go
index fd83967e99..6914cb9ea5 100644
--- a/pkg/group/manager/json/json.go
+++ b/pkg/group/manager/json/json.go
@@ -32,6 +32,7 @@ import (
"github.com/cs3org/reva/v2/pkg/group/manager/registry"
"github.com/mitchellh/mapstructure"
"github.com/pkg/errors"
+ "google.golang.org/protobuf/proto"
)
func init() {
@@ -90,11 +91,11 @@ func New(m map[string]interface{}) (group.Manager, error) {
func (m *manager) GetGroup(ctx context.Context, gid *grouppb.GroupId, skipFetchingMembers bool) (*grouppb.Group, error) {
for _, g := range m.groups {
if (g.Id.GetOpaqueId() == gid.OpaqueId || g.GroupName == gid.OpaqueId) && (gid.Idp == "" || gid.Idp == g.Id.GetIdp()) {
- group := *g
+ group := proto.Clone(g).(*grouppb.Group)
if skipFetchingMembers {
group.Members = nil
}
- return &group, nil
+ return group, nil
}
}
return nil, errtypes.NotFound(gid.OpaqueId)
@@ -103,11 +104,11 @@ func (m *manager) GetGroup(ctx context.Context, gid *grouppb.GroupId, skipFetchi
func (m *manager) GetGroupByClaim(ctx context.Context, claim, value string, skipFetchingMembers bool) (*grouppb.Group, error) {
for _, g := range m.groups {
if groupClaim, err := extractClaim(g, claim); err == nil && value == groupClaim {
- group := *g
+ group := proto.Clone(g).(*grouppb.Group)
if skipFetchingMembers {
group.Members = nil
}
- return &group, nil
+ return group, nil
}
}
return nil, errtypes.NotFound(value)
@@ -131,11 +132,11 @@ func (m *manager) FindGroups(ctx context.Context, query string, skipFetchingMemb
groups := []*grouppb.Group{}
for _, g := range m.groups {
if groupContains(g, query) {
- group := *g
+ group := proto.Clone(g).(*grouppb.Group)
if skipFetchingMembers {
group.Members = nil
}
- groups = append(groups, &group)
+ groups = append(groups, group)
}
}
return groups, nil
diff --git a/pkg/group/manager/json/json_test.go b/pkg/group/manager/json/json_test.go
index fa4171a50c..44e453cb15 100644
--- a/pkg/group/manager/json/json_test.go
+++ b/pkg/group/manager/json/json_test.go
@@ -27,6 +27,9 @@ import (
grouppb "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
"github.com/cs3org/reva/v2/pkg/errtypes"
+ "github.com/google/go-cmp/cmp"
+ "google.golang.org/protobuf/proto"
+ "google.golang.org/protobuf/testing/protocmp"
)
var ctx = context.Background()
@@ -112,13 +115,13 @@ func TestUserManager(t *testing.T) {
// positive test GetGroup
resGroup, _ := manager.GetGroup(ctx, gid, false)
- if !reflect.DeepEqual(resGroup, group) {
+ if !proto.Equal(resGroup, group) {
t.Fatalf("group differs: expected=%v got=%v", group, resGroup)
}
// positive test GetGroup without members
resGroupWithoutMembers, _ := manager.GetGroup(ctx, gid, true)
- if !reflect.DeepEqual(resGroupWithoutMembers, groupWithoutMembers) {
+ if !proto.Equal(resGroupWithoutMembers, groupWithoutMembers) {
t.Fatalf("group differs: expected=%v got=%v", groupWithoutMembers, resGroupWithoutMembers)
}
@@ -131,7 +134,7 @@ func TestUserManager(t *testing.T) {
// positive test GetGroupByClaim by mail
resGroupByEmail, _ := manager.GetGroupByClaim(ctx, "mail", "sailing-lovers@example.org", false)
- if !reflect.DeepEqual(resGroupByEmail, group) {
+ if !proto.Equal(resGroupByEmail, group) {
t.Fatalf("group differs: expected=%v got=%v", group, resGroupByEmail)
}
@@ -144,7 +147,7 @@ func TestUserManager(t *testing.T) {
// test GetMembers
resMembers, _ := manager.GetMembers(ctx, gid)
- if !reflect.DeepEqual(resMembers, members) {
+ if !cmp.Equal(resMembers, members, protocmp.Transform()) {
t.Fatalf("members differ: expected=%v got=%v", members, resMembers)
}
diff --git a/pkg/ocm/share/repository/nextcloud/nextcloud_test.go b/pkg/ocm/share/repository/nextcloud/nextcloud_test.go
index 47bee65c12..183cddfed4 100644
--- a/pkg/ocm/share/repository/nextcloud/nextcloud_test.go
+++ b/pkg/ocm/share/repository/nextcloud/nextcloud_test.go
@@ -34,6 +34,7 @@ import (
. "github.com/onsi/gomega"
"google.golang.org/genproto/protobuf/field_mask"
"google.golang.org/grpc/metadata"
+ "google.golang.org/protobuf/testing/protocmp"
)
func setUpNextcloudServer() (*nextcloud.Manager, *[]string, func()) {
@@ -250,7 +251,7 @@ var _ = Describe("Nextcloud", func() {
},
})
Expect(err).ToNot(HaveOccurred())
- Expect(*share).To(Equal(ocm.Share{
+ Expect(share).To(BeComparableTo(&ocm.Share{
Id: &ocm.ShareId{},
Grantee: &provider.Grantee{
Id: &provider.Grantee_UserId{
@@ -279,7 +280,7 @@ var _ = Describe("Nextcloud", func() {
Seconds: 1234567890,
Nanos: 0,
},
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/ocm/GetShare {"Spec":{"Id":{"opaque_id":"some-share-id"}}}`)
})
})
@@ -370,7 +371,7 @@ var _ = Describe("Nextcloud", func() {
})
Expect(err).ToNot(HaveOccurred())
Expect(len(shares)).To(Equal(1))
- Expect(*shares[0]).To(Equal(ocm.Share{
+ Expect(shares[0]).To(BeComparableTo(&ocm.Share{
Id: &ocm.ShareId{},
Grantee: &provider.Grantee{
Id: &provider.Grantee_UserId{
@@ -399,7 +400,7 @@ var _ = Describe("Nextcloud", func() {
Seconds: 1234567890,
Nanos: 0,
},
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/ocm/ListShares [{"type":4,"Term":{"Creator":{"idp":"0.0.0.0:19000","opaque_id":"f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c","type":1}}}]`)
})
})
@@ -413,7 +414,7 @@ var _ = Describe("Nextcloud", func() {
receivedShares, err := am.ListReceivedShares(ctx, user)
Expect(err).ToNot(HaveOccurred())
Expect(len(receivedShares)).To(Equal(1))
- Expect(*receivedShares[0]).To(Equal(ocm.ReceivedShare{
+ Expect(receivedShares[0]).To(BeComparableTo(&ocm.ReceivedShare{
Id: &ocm.ShareId{},
RemoteShareId: "",
Grantee: &provider.Grantee{
@@ -444,7 +445,7 @@ var _ = Describe("Nextcloud", func() {
Nanos: 0,
},
State: ocm.ShareState_SHARE_STATE_ACCEPTED,
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/ocm/ListReceivedShares `)
})
})
@@ -463,7 +464,7 @@ var _ = Describe("Nextcloud", func() {
},
})
Expect(err).ToNot(HaveOccurred())
- Expect(*receivedShare).To(Equal(ocm.ReceivedShare{
+ Expect(receivedShare).To(BeComparableTo(ocm.ReceivedShare{
Id: &ocm.ShareId{},
RemoteShareId: "",
Grantee: &provider.Grantee{
@@ -494,7 +495,7 @@ var _ = Describe("Nextcloud", func() {
Nanos: 0,
},
State: ocm.ShareState_SHARE_STATE_ACCEPTED,
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/ocm/GetReceivedShare {"Spec":{"Id":{"opaque_id":"some-share-id"}}}`)
})
})
@@ -542,7 +543,7 @@ var _ = Describe("Nextcloud", func() {
Paths: []string{"state"},
})
Expect(err).ToNot(HaveOccurred())
- Expect(*receivedShare).To(Equal(ocm.ReceivedShare{
+ Expect(receivedShare).To(BeComparableTo(ocm.ReceivedShare{
Id: &ocm.ShareId{},
RemoteShareId: "",
Grantee: &provider.Grantee{
@@ -573,7 +574,7 @@ var _ = Describe("Nextcloud", func() {
Nanos: 0,
},
State: ocm.ShareState_SHARE_STATE_ACCEPTED,
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/ocm/UpdateReceivedShare {"received_share":{"id":{},"grantee":{"Id":{"UserId":{"idp":"0.0.0.0:19000","opaque_id":"f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c","type":1}}},"owner":{"idp":"0.0.0.0:19000","opaque_id":"f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c","type":1},"creator":{"idp":"0.0.0.0:19000","opaque_id":"f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c","type":1},"ctime":{"seconds":1234567890},"mtime":{"seconds":1234567890},"state":2},"field_mask":{"paths":["state"]}}`)
})
})
diff --git a/pkg/ocm/storage/received/ocm.go b/pkg/ocm/storage/received/ocm.go
index 4703476fdf..ae7147a69e 100644
--- a/pkg/ocm/storage/received/ocm.go
+++ b/pkg/ocm/storage/received/ocm.go
@@ -491,7 +491,7 @@ func (d *driver) ListStorageSpaces(ctx context.Context, filters []*provider.List
}
space := &provider.StorageSpace{
Id: &provider.StorageSpaceId{
- OpaqueId: storagespace.FormatResourceID(*root),
+ OpaqueId: storagespace.FormatResourceID(root),
},
SpaceType: "mountpoint",
Owner: &userv1beta1.User{
@@ -510,7 +510,7 @@ func (d *driver) ListStorageSpaces(ctx context.Context, filters []*provider.List
}
space := &provider.StorageSpace{
Id: &provider.StorageSpaceId{
- OpaqueId: storagespace.FormatResourceID(*root),
+ OpaqueId: storagespace.FormatResourceID(root),
},
SpaceType: "mountpoint",
Owner: &userv1beta1.User{
diff --git a/pkg/ocm/storage/received/upload.go b/pkg/ocm/storage/received/upload.go
index 1e4a5c1fd1..b2e39e5a79 100644
--- a/pkg/ocm/storage/received/upload.go
+++ b/pkg/ocm/storage/received/upload.go
@@ -76,23 +76,23 @@ func (d *driver) InitiateUpload(ctx context.Context, ref *provider.Reference, up
}, nil
}
-func (d *driver) Upload(ctx context.Context, req storage.UploadRequest, _ storage.UploadFinishedFunc) (provider.ResourceInfo, error) {
+func (d *driver) Upload(ctx context.Context, req storage.UploadRequest, _ storage.UploadFinishedFunc) (*provider.ResourceInfo, error) {
shareID, _ := shareInfoFromReference(req.Ref)
u, err := d.GetUpload(ctx, shareID.OpaqueId)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
info, err := u.GetInfo(ctx)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
client, _, rel, err := d.webdavClient(ctx, nil, &provider.Reference{
Path: filepath.Join(info.MetaData["dir"], info.MetaData["filename"]),
})
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
client.SetInterceptor(func(method string, rq *http.Request) {
// Set the content length on the request struct directly instead of the header.
@@ -104,7 +104,7 @@ func (d *driver) Upload(ctx context.Context, req storage.UploadRequest, _ storag
}
})
- return provider.ResourceInfo{}, client.WriteStream(rel, req.Body, 0)
+ return &provider.ResourceInfo{}, client.WriteStream(rel, req.Body, 0)
}
// UseIn tells the tus upload middleware which extensions it supports.
diff --git a/pkg/publicshare/manager/cs3/cs3.go b/pkg/publicshare/manager/cs3/cs3.go
index 6383f24220..db3bb88a26 100644
--- a/pkg/publicshare/manager/cs3/cs3.go
+++ b/pkg/publicshare/manager/cs3/cs3.go
@@ -32,6 +32,7 @@ import (
"github.com/mitchellh/mapstructure"
"github.com/pkg/errors"
"golang.org/x/crypto/bcrypt"
+ "google.golang.org/protobuf/proto"
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
@@ -175,7 +176,7 @@ func (m *Manager) Dump(ctx context.Context, shareChan chan<- *publicshare.WithPa
return err
}
local.Password = ps.Password
- local.PublicShare = ps.PublicShare
+ proto.Merge(&local.PublicShare, &ps.PublicShare)
shareChan <- &local
}
@@ -361,8 +362,8 @@ func (m *Manager) getByToken(ctx context.Context, token string) (*publicshare.Wi
if err != nil {
return nil, err
}
- id := storagespace.UpdateLegacyResourceID(*ps.PublicShare.ResourceId)
- ps.PublicShare.ResourceId = &id
+ id := storagespace.UpdateLegacyResourceID(ps.PublicShare.ResourceId)
+ ps.PublicShare.ResourceId = id
return ps, nil
}
@@ -421,11 +422,11 @@ func (m *Manager) ListPublicShares(ctx context.Context, u *user.User, filters []
return nil, err
}
- if !publicshare.MatchesFilters(ps.PublicShare, filters) {
+ if !publicshare.MatchesFilters(&ps.PublicShare, filters) {
continue
}
- if publicshare.IsExpired(ps.PublicShare) {
+ if publicshare.IsExpired(&ps.PublicShare) {
ref := &link.PublicShareReference{
Spec: &link.PublicShareReference_Id{
Id: ps.PublicShare.Id,
@@ -505,7 +506,7 @@ func (m *Manager) ListPublicShares(ctx context.Context, u *user.User, filters []
statMem[resourceIDToIndex(s.PublicShare.GetResourceId())] = struct{}{}
}
- if publicshare.MatchesFilters(s.PublicShare, filters) {
+ if publicshare.MatchesFilters(&s.PublicShare, filters) {
result = append(result, &s.PublicShare)
shareMem[s.PublicShare.Token] = struct{}{}
}
@@ -545,7 +546,7 @@ func (m *Manager) GetPublicShareByToken(ctx context.Context, token string, auth
return nil, err
}
- if publicshare.IsExpired(ps.PublicShare) {
+ if publicshare.IsExpired(&ps.PublicShare) {
return nil, errtypes.NotFound("public share has expired")
}
diff --git a/pkg/publicshare/manager/cs3/cs3_test.go b/pkg/publicshare/manager/cs3/cs3_test.go
index 7a5dcc95f3..f94f3518fe 100644
--- a/pkg/publicshare/manager/cs3/cs3_test.go
+++ b/pkg/publicshare/manager/cs3/cs3_test.go
@@ -31,6 +31,7 @@ import (
. "github.com/onsi/gomega"
"github.com/stretchr/testify/mock"
"golang.org/x/crypto/bcrypt"
+ "google.golang.org/protobuf/proto"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
link "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1"
@@ -182,7 +183,11 @@ var _ = Describe("Cs3", func() {
h, err := bcrypt.GenerateFromPassword([]byte(grant.Password), bcrypt.DefaultCost)
Expect(err).ToNot(HaveOccurred())
hashedPassword = string(h)
- shareJSON, err := json.Marshal(publicshare.WithPassword{PublicShare: *existingShare, Password: hashedPassword})
+ tmpShare := &publicshare.WithPassword{
+ Password: hashedPassword,
+ }
+ proto.Merge(&tmpShare.PublicShare, existingShare)
+ shareJSON, err := json.Marshal(tmpShare)
Expect(err).ToNot(HaveOccurred())
storage.On("SimpleDownload", mock.Anything, mock.MatchedBy(func(in string) bool {
return strings.HasPrefix(in, "publicshares/")
@@ -204,10 +209,11 @@ var _ = Describe("Cs3", func() {
wg.Done()
}()
go func() {
- sharesChan <- &publicshare.WithPassword{
- Password: "foo",
- PublicShare: *existingShare,
+ tmpShare := &publicshare.WithPassword{
+ Password: hashedPassword,
}
+ proto.Merge(&tmpShare.PublicShare, existingShare)
+ sharesChan <- tmpShare
close(sharesChan)
wg.Done()
}()
diff --git a/pkg/publicshare/manager/json/json.go b/pkg/publicshare/manager/json/json.go
index 1d2b44265e..6cfc552238 100644
--- a/pkg/publicshare/manager/json/json.go
+++ b/pkg/publicshare/manager/json/json.go
@@ -32,6 +32,7 @@ import (
"github.com/rs/zerolog/log"
"golang.org/x/crypto/bcrypt"
+ "google.golang.org/protobuf/proto"
user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
@@ -273,7 +274,7 @@ func (m *manager) CreatePublicShare(ctx context.Context, u *user.User, rInfo *pr
Nanos: uint32(now % int64(time.Second)),
}
- s := link.PublicShare{
+ s := &link.PublicShare{
Id: id,
Owner: rInfo.GetOwner(),
Creator: u.Id,
@@ -289,9 +290,9 @@ func (m *manager) CreatePublicShare(ctx context.Context, u *user.User, rInfo *pr
}
ps := &publicShare{
- PublicShare: s,
- Password: password,
+ Password: password,
}
+ proto.Merge(&ps.PublicShare, s)
m.mutex.Lock()
defer m.mutex.Unlock()
@@ -324,7 +325,7 @@ func (m *manager) CreatePublicShare(ctx context.Context, u *user.User, rInfo *pr
return nil, err
}
- return &s, nil
+ return s, nil
}
// UpdatePublicShare updates the public share
@@ -461,7 +462,7 @@ func (m *manager) GetPublicShare(ctx context.Context, u *user.User, ref *link.Pu
}
if ref.GetId().GetOpaqueId() == ps.Id.OpaqueId {
- if publicshare.IsExpired(ps) {
+ if publicshare.IsExpired(&ps) {
if err := m.revokeExpiredPublicShare(ctx, &ps); err != nil {
return nil, err
}
@@ -509,7 +510,7 @@ func (m *manager) ListPublicShares(ctx context.Context, u *user.User, filters []
return nil, err
}
- if publicshare.IsExpired(local.PublicShare) {
+ if publicshare.IsExpired(&local.PublicShare) {
if err := m.revokeExpiredPublicShare(ctx, &local.PublicShare); err != nil {
log.Error().Err(err).
Str("share_token", local.Token).
@@ -518,12 +519,12 @@ func (m *manager) ListPublicShares(ctx context.Context, u *user.User, filters []
continue
}
- if !publicshare.MatchesFilters(local.PublicShare, filters) {
+ if !publicshare.MatchesFilters(&local.PublicShare, filters) {
continue
}
key := strings.Join([]string{local.ResourceId.StorageId, local.ResourceId.OpaqueId}, "!")
- if _, hit := cache[key]; !hit && !publicshare.IsCreatedByUser(local.PublicShare, u) {
+ if _, hit := cache[key]; !hit && !publicshare.IsCreatedByUser(&local.PublicShare, u) {
sRes, err := client.Stat(ctx, &provider.StatRequest{Ref: &provider.Reference{ResourceId: local.ResourceId}})
if err != nil {
log.Error().
@@ -583,7 +584,7 @@ func (m *manager) cleanupExpiredShares() {
var ps link.PublicShare
_ = utils.UnmarshalJSONToProtoV1([]byte(d.(string)), &ps)
- if publicshare.IsExpired(ps) {
+ if publicshare.IsExpired(&ps) {
_ = m.revokeExpiredPublicShare(context.Background(), &ps)
}
}
@@ -693,7 +694,7 @@ func (m *manager) GetPublicShareByToken(ctx context.Context, token string, auth
}
if local.Token == token {
- if publicshare.IsExpired(local) {
+ if publicshare.IsExpired(&local) {
if err := m.revokeExpiredPublicShare(ctx, &local); err != nil {
return nil, err
}
diff --git a/pkg/publicshare/manager/json/json_test.go b/pkg/publicshare/manager/json/json_test.go
index f9385896ae..b63cbe7e02 100644
--- a/pkg/publicshare/manager/json/json_test.go
+++ b/pkg/publicshare/manager/json/json_test.go
@@ -34,6 +34,8 @@ import (
"github.com/cs3org/reva/v2/pkg/publicshare/manager/json/persistence/cs3"
"github.com/cs3org/reva/v2/pkg/storage/utils/metadata"
"golang.org/x/crypto/bcrypt"
+ "google.golang.org/protobuf/proto"
+ "google.golang.org/protobuf/testing/protocmp"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
@@ -123,8 +125,8 @@ var _ = Describe("Json", func() {
Expect(len(pshares)).To(Equal(1))
Expect(bcrypt.CompareHashAndPassword([]byte(pshares[0].Password), []byte("foo"))).To(Succeed())
- Expect(pshares[0].PublicShare.Creator).To(Equal(user1.Id))
- Expect(pshares[0].PublicShare.ResourceId).To(Equal(sharedResource.Id))
+ Expect(pshares[0].PublicShare.Creator).To(BeComparableTo(user1.Id, protocmp.Transform()))
+ Expect(pshares[0].PublicShare.ResourceId).To(BeComparableTo(sharedResource.Id, protocmp.Transform()))
})
})
@@ -148,10 +150,11 @@ var _ = Describe("Json", func() {
wg.Done()
}()
go func() {
- sharesChan <- &publicshare.WithPassword{
- Password: "foo",
- PublicShare: *existingShare,
+ tmpShare := &publicshare.WithPassword{
+ Password: "foo",
}
+ proto.Merge(&tmpShare.PublicShare, existingShare)
+ sharesChan <- tmpShare
close(sharesChan)
wg.Done()
}()
diff --git a/pkg/publicshare/manager/memory/memory.go b/pkg/publicshare/manager/memory/memory.go
index 9dc2929c01..72506b9368 100644
--- a/pkg/publicshare/manager/memory/memory.go
+++ b/pkg/publicshare/manager/memory/memory.go
@@ -158,7 +158,7 @@ func (m *manager) GetPublicShare(ctx context.Context, u *user.User, ref *link.Pu
// Attempt to fetch public share by Id
if ref.GetId() != nil {
- share, err = m.getPublicShareByTokenID(ctx, *ref.GetId())
+ share, err = m.getPublicShareByTokenID(ctx, ref.GetId())
if err != nil {
return nil, errors.New("no shares found by id")
}
@@ -193,7 +193,7 @@ func (m *manager) RevokePublicShare(ctx context.Context, u *user.User, ref *link
// check whether the reference exists
switch {
case ref.GetId() != nil && ref.GetId().OpaqueId != "":
- s, err := m.getPublicShareByTokenID(ctx, *ref.GetId())
+ s, err := m.getPublicShareByTokenID(ctx, ref.GetId())
if err != nil {
return errors.New("reference does not exist")
}
@@ -225,7 +225,7 @@ func randString(n int) string {
return string(b)
}
-func (m *manager) getPublicShareByTokenID(ctx context.Context, targetID link.PublicShareId) (*link.PublicShare, error) {
+func (m *manager) getPublicShareByTokenID(ctx context.Context, targetID *link.PublicShareId) (*link.PublicShare, error) {
var found *link.PublicShare
m.shares.Range(func(k, v interface{}) bool {
id := v.(*link.PublicShare).GetId()
diff --git a/pkg/publicshare/manager/owncloudsql/owncloudsql.go b/pkg/publicshare/manager/owncloudsql/owncloudsql.go
index dfedfca78d..de45fbe153 100644
--- a/pkg/publicshare/manager/owncloudsql/owncloudsql.go
+++ b/pkg/publicshare/manager/owncloudsql/owncloudsql.go
@@ -42,6 +42,7 @@ import (
"github.com/mitchellh/mapstructure"
"github.com/pkg/errors"
"golang.org/x/crypto/bcrypt"
+ "google.golang.org/protobuf/proto"
// Provides mysql drivers
_ "github.com/go-sql-driver/mysql"
@@ -268,7 +269,7 @@ func (m *mgr) GetPublicShare(ctx context.Context, u *user.User, ref *link.Public
return nil, err
}
- if publicshare.IsExpired(ps.PublicShare) {
+ if publicshare.IsExpired(&ps.PublicShare) {
if err := m.cleanupExpiredShares(); err != nil {
return nil, err
}
@@ -305,10 +306,11 @@ func (m *mgr) getByToken(ctx context.Context, token string) (*publicshare.WithPa
if err != nil {
return nil, err
}
- return &publicshare.WithPassword{
- PublicShare: *ps,
- Password: strings.TrimPrefix(s.ShareWith, "1|"),
- }, nil
+ ret := &publicshare.WithPassword{
+ Password: strings.TrimPrefix(s.ShareWith, "1|"),
+ }
+ proto.Merge(&ret.PublicShare, ps)
+ return ret, nil
}
func getByToken(db *sql.DB, token string) (DBShare, error) {
@@ -352,10 +354,11 @@ func (m *mgr) getByID(ctx context.Context, id string) (*publicshare.WithPassword
if err != nil {
return nil, err
}
- return &publicshare.WithPassword{
- PublicShare: *ps,
- Password: strings.TrimPrefix(s.ShareWith, "1|"),
- }, nil
+ ret := &publicshare.WithPassword{
+ Password: strings.TrimPrefix(s.ShareWith, "1|"),
+ }
+ proto.Merge(&ret.PublicShare, ps)
+ return ret, nil
}
func (m *mgr) ListPublicShares(ctx context.Context, u *user.User, filters []*link.ListPublicSharesRequest_Filter, sign bool) ([]*link.PublicShare, error) {
@@ -436,7 +439,7 @@ func (m *mgr) ListPublicShares(ctx context.Context, u *user.User, filters []*lin
if cs3Share, err = m.ConvertToCS3PublicShare(ctx, s); err != nil {
return nil, err
}
- if publicshare.IsExpired(*cs3Share) {
+ if publicshare.IsExpired(cs3Share) {
_ = m.cleanupExpiredShares()
} else {
if cs3Share.PasswordProtected && sign {
@@ -495,7 +498,7 @@ func (m *mgr) GetPublicShareByToken(ctx context.Context, token string, auth *lin
return nil, err
}
- if publicshare.IsExpired(ps.PublicShare) {
+ if publicshare.IsExpired(&ps.PublicShare) {
if err := m.cleanupExpiredShares(); err != nil {
return nil, err
}
diff --git a/pkg/publicshare/publicshare.go b/pkg/publicshare/publicshare.go
index 4eca5cdccb..b0689c566b 100644
--- a/pkg/publicshare/publicshare.go
+++ b/pkg/publicshare/publicshare.go
@@ -131,7 +131,7 @@ func StorageIDFilter(id string) *link.ListPublicSharesRequest_Filter {
}
// MatchesFilter tests if the share passes the filter.
-func MatchesFilter(share link.PublicShare, filter *link.ListPublicSharesRequest_Filter) bool {
+func MatchesFilter(share *link.PublicShare, filter *link.ListPublicSharesRequest_Filter) bool {
switch filter.Type {
case link.ListPublicSharesRequest_Filter_TYPE_RESOURCE_ID:
return utils.ResourceIDEqual(share.ResourceId, filter.GetResourceId())
@@ -143,7 +143,7 @@ func MatchesFilter(share link.PublicShare, filter *link.ListPublicSharesRequest_
}
// MatchesAnyFilter checks if the share passes at least one of the given filters.
-func MatchesAnyFilter(share link.PublicShare, filters []*link.ListPublicSharesRequest_Filter) bool {
+func MatchesAnyFilter(share *link.PublicShare, filters []*link.ListPublicSharesRequest_Filter) bool {
for _, f := range filters {
if MatchesFilter(share, f) {
return true
@@ -156,7 +156,7 @@ func MatchesAnyFilter(share link.PublicShare, filters []*link.ListPublicSharesRe
// Filters of the same type form a disjuntion, a logical OR. Filters of separate type form a conjunction, a logical AND.
// Here is an example:
// (resource_id=1 OR resource_id=2) AND (grantee_type=USER OR grantee_type=GROUP)
-func MatchesFilters(share link.PublicShare, filters []*link.ListPublicSharesRequest_Filter) bool {
+func MatchesFilters(share *link.PublicShare, filters []*link.ListPublicSharesRequest_Filter) bool {
if len(filters) == 0 {
return true
}
@@ -179,7 +179,7 @@ func GroupFiltersByType(filters []*link.ListPublicSharesRequest_Filter) map[link
}
// IsExpired tests whether a public share is expired
-func IsExpired(s link.PublicShare) bool {
+func IsExpired(s *link.PublicShare) bool {
expiration := time.Unix(int64(s.Expiration.GetSeconds()), int64(s.Expiration.GetNanos()))
return s.Expiration != nil && expiration.Before(time.Now())
}
@@ -208,7 +208,7 @@ func Authenticate(share *link.PublicShare, pw string, auth *link.PublicShareAuth
}
// IsCreatedByUser checks if a share was created by the user.
-func IsCreatedByUser(share link.PublicShare, user *user.User) bool {
+func IsCreatedByUser(share *link.PublicShare, user *user.User) bool {
return utils.UserEqual(user.Id, share.Owner) || utils.UserEqual(user.Id, share.Creator)
}
diff --git a/pkg/rhttp/datatx/manager/simple/simple.go b/pkg/rhttp/datatx/manager/simple/simple.go
index 607d6336ad..24e4a8f892 100644
--- a/pkg/rhttp/datatx/manager/simple/simple.go
+++ b/pkg/rhttp/datatx/manager/simple/simple.go
@@ -118,7 +118,7 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
w.Header().Set(net.HeaderETag, info.Etag)
w.Header().Set(net.HeaderOCETag, info.Etag)
if info.Id != nil {
- w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(*info.Id))
+ w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(info.Id))
}
if info.Mtime != nil {
t := utils.TSToTime(info.Mtime).UTC()
diff --git a/pkg/rhttp/datatx/manager/spaces/spaces.go b/pkg/rhttp/datatx/manager/spaces/spaces.go
index 1e06a2fedc..743e05d4ae 100644
--- a/pkg/rhttp/datatx/manager/spaces/spaces.go
+++ b/pkg/rhttp/datatx/manager/spaces/spaces.go
@@ -109,7 +109,7 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
ResourceId: &rid,
Path: fn,
}
- var info provider.ResourceInfo
+ var info *provider.ResourceInfo
info, err = fs.Upload(ctx, storage.UploadRequest{
Ref: ref,
Body: r.Body,
@@ -125,7 +125,7 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
w.Header().Set(net.HeaderETag, info.Etag)
w.Header().Set(net.HeaderOCETag, info.Etag)
if info.Id != nil {
- w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(*info.Id))
+ w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(info.Id))
}
if info.Mtime != nil {
t := utils.TSToTime(info.Mtime).UTC()
diff --git a/pkg/rhttp/datatx/manager/tus/tus.go b/pkg/rhttp/datatx/manager/tus/tus.go
index d60fa1e686..f3ddd77c70 100644
--- a/pkg/rhttp/datatx/manager/tus/tus.go
+++ b/pkg/rhttp/datatx/manager/tus/tus.go
@@ -215,7 +215,7 @@ func setHeaders(fs storage.FS, w http.ResponseWriter, r *http.Request) {
if expires != "" {
w.Header().Set(net.HeaderTusUploadExpires, expires)
}
- resourceid := provider.ResourceId{
+ resourceid := &provider.ResourceId{
StorageId: info.MetaData["providerID"],
SpaceId: info.Storage["SpaceRoot"],
OpaqueId: info.Storage["NodeId"],
diff --git a/pkg/rhttp/datatx/utils/download/download.go b/pkg/rhttp/datatx/utils/download/download.go
index c15029bd2f..51a61092f9 100644
--- a/pkg/rhttp/datatx/utils/download/download.go
+++ b/pkg/rhttp/datatx/utils/download/download.go
@@ -228,7 +228,7 @@ func GetOrHeadFile(w http.ResponseWriter, r *http.Request, fs storage.FS, spaceI
w.Header().Set(net.HeaderContentDisposistion, net.ContentDispositionAttachment(path.Base(md.Path)))
w.Header().Set(net.HeaderETag, md.Etag)
- w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(*md.Id))
+ w.Header().Set(net.HeaderOCFileID, storagespace.FormatResourceID(md.Id))
w.Header().Set(net.HeaderOCETag, md.Etag)
w.Header().Set(net.HeaderLastModified, net.RFC1123Z(md.Mtime))
diff --git a/pkg/share/manager/cs3/cs3.go b/pkg/share/manager/cs3/cs3.go
index a22693f327..eb648ff738 100644
--- a/pkg/share/manager/cs3/cs3.go
+++ b/pkg/share/manager/cs3/cs3.go
@@ -718,8 +718,7 @@ func (m *Manager) getShareByID(ctx context.Context, id string) (*collaboration.S
}
err = json.Unmarshal(data, userShare)
if err == nil && userShare.Grantee.GetUserId() != nil {
- id := storagespace.UpdateLegacyResourceID(*userShare.GetResourceId())
- userShare.ResourceId = &id
+ userShare.ResourceId = storagespace.UpdateLegacyResourceID(userShare.GetResourceId())
return userShare, nil
}
@@ -728,8 +727,7 @@ func (m *Manager) getShareByID(ctx context.Context, id string) (*collaboration.S
}
err = json.Unmarshal(data, groupShare) // try to unmarshal to a group share if the user share unmarshalling failed
if err == nil && groupShare.Grantee.GetGroupId() != nil {
- id := storagespace.UpdateLegacyResourceID(*groupShare.GetResourceId())
- groupShare.ResourceId = &id
+ groupShare.ResourceId = storagespace.UpdateLegacyResourceID(groupShare.GetResourceId())
return groupShare, nil
}
diff --git a/pkg/share/manager/jsoncs3/jsoncs3.go b/pkg/share/manager/jsoncs3/jsoncs3.go
index edd5e00b2c..e8e00dd410 100644
--- a/pkg/share/manager/jsoncs3/jsoncs3.go
+++ b/pkg/share/manager/jsoncs3/jsoncs3.go
@@ -643,7 +643,7 @@ func (m *Manager) listSharesByIDs(ctx context.Context, user *userv1beta1.User, f
}
if !(share.IsCreatedByUser(s, user) || share.IsGrantedToUser(s, user)) {
- key := storagespace.FormatResourceID(*resourceID)
+ key := storagespace.FormatResourceID(resourceID)
if _, hit := statCache[key]; !hit {
req := &provider.StatRequest{
Ref: &provider.Reference{ResourceId: resourceID},
diff --git a/pkg/storage/fs/nextcloud/nextcloud.go b/pkg/storage/fs/nextcloud/nextcloud.go
index c09bbc94dd..86146b24f0 100644
--- a/pkg/storage/fs/nextcloud/nextcloud.go
+++ b/pkg/storage/fs/nextcloud/nextcloud.go
@@ -397,19 +397,19 @@ func (nc *StorageDriver) InitiateUpload(ctx context.Context, ref *provider.Refer
}
// Upload as defined in the storage.FS interface
-func (nc *StorageDriver) Upload(ctx context.Context, req storage.UploadRequest, _ storage.UploadFinishedFunc) (provider.ResourceInfo, error) {
+func (nc *StorageDriver) Upload(ctx context.Context, req storage.UploadRequest, _ storage.UploadFinishedFunc) (*provider.ResourceInfo, error) {
err := nc.doUpload(ctx, req.Ref.Path, req.Body)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
// return id, etag and mtime
ri, err := nc.GetMD(ctx, req.Ref, []string{}, []string{"id", "etag", "mtime"})
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
- return *ri, nil
+ return ri, nil
}
// Download as defined in the storage.FS interface
diff --git a/pkg/storage/fs/nextcloud/nextcloud_test.go b/pkg/storage/fs/nextcloud/nextcloud_test.go
index b91abefc63..bd87f62c45 100644
--- a/pkg/storage/fs/nextcloud/nextcloud_test.go
+++ b/pkg/storage/fs/nextcloud/nextcloud_test.go
@@ -28,6 +28,7 @@ import (
"strings"
"google.golang.org/grpc/metadata"
+ "google.golang.org/protobuf/testing/protocmp"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
@@ -227,7 +228,7 @@ var _ = Describe("Nextcloud", func() {
mdKeys := []string{"val1", "val2", "val3"}
result, err := nc.GetMD(ctx, ref, mdKeys, nil)
Expect(err).ToNot(HaveOccurred())
- Expect(*result).To(Equal(provider.ResourceInfo{
+ Expect(result).To(BeComparableTo(provider.ResourceInfo{
Opaque: &types.Opaque{
Map: nil,
},
@@ -277,7 +278,7 @@ var _ = Describe("Nextcloud", func() {
ArbitraryMetadata: &provider.ArbitraryMetadata{
Metadata: map[string]string{"some": "arbi", "trary": "meta", "da": "ta"},
},
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/GetMD {"ref":{"resource_id":{"storage_id":"storage-id","opaque_id":"opaque-id"},"path":"/some/path"},"mdKeys":["val1","val2","val3"]}`)
})
})
@@ -299,7 +300,7 @@ var _ = Describe("Nextcloud", func() {
results, err := nc.ListFolder(ctx, ref, mdKeys, []string{})
Expect(err).NotTo(HaveOccurred())
Expect(len(results)).To(Equal(1))
- Expect(*results[0]).To(Equal(provider.ResourceInfo{
+ Expect(results[0]).To(BeComparableTo(&provider.ResourceInfo{
Opaque: &types.Opaque{
Map: nil,
},
@@ -349,7 +350,7 @@ var _ = Describe("Nextcloud", func() {
ArbitraryMetadata: &provider.ArbitraryMetadata{
Metadata: map[string]string{"some": "arbi", "trary": "meta", "da": "ta"},
},
- }))
+ }, protocmp.Transform()))
Expect(err).ToNot(HaveOccurred())
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/ListFolder {"ref":{"resource_id":{"storage_id":"storage-id","opaque_id":"opaque-id"},"path":"/some"},"mdKeys":["val1","val2","val3"]}`)
})
@@ -447,7 +448,7 @@ var _ = Describe("Nextcloud", func() {
Expect(err).ToNot(HaveOccurred())
// https://github.com/cs3org/go-cs3apis/blob/970eec3/cs3/storage/provider/v1beta1/resources.pb.go#L1003-L1023
Expect(len(results)).To(Equal(2))
- Expect(*results[0]).To(Equal(provider.FileVersion{
+ Expect(results[0]).To(BeComparableTo(&provider.FileVersion{
Opaque: &types.Opaque{
Map: map[string]*types.OpaqueEntry{
"some": {
@@ -459,8 +460,8 @@ var _ = Describe("Nextcloud", func() {
Size: uint64(12345),
Mtime: uint64(1234567890),
Etag: "deadb00f",
- }))
- Expect(*results[1]).To(Equal(provider.FileVersion{
+ }, protocmp.Transform()))
+ Expect(results[1]).To(BeComparableTo(&provider.FileVersion{
Opaque: &types.Opaque{
Map: map[string]*types.OpaqueEntry{
"different": {
@@ -472,7 +473,7 @@ var _ = Describe("Nextcloud", func() {
Size: uint64(12345),
Mtime: uint64(1234567890),
Etag: "deadbeef",
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/ListRevisions {"resource_id":{"storage_id":"storage-id","opaque_id":"opaque-id"},"path":"/some/path"}`)
})
})
@@ -531,7 +532,7 @@ var _ = Describe("Nextcloud", func() {
Expect(err).ToNot(HaveOccurred())
// https://github.com/cs3org/go-cs3apis/blob/970eec3/cs3/storage/provider/v1beta1/resources.pb.go#L1085-L1110
Expect(len(results)).To(Equal(1))
- Expect(*results[0]).To(Equal(provider.RecycleItem{
+ Expect(results[0]).To(BeComparableTo(&provider.RecycleItem{
Opaque: &types.Opaque{},
Key: "some-deleted-version",
Ref: &provider.Reference{
@@ -540,7 +541,7 @@ var _ = Describe("Nextcloud", func() {
},
Size: uint64(12345),
DeletionTime: &types.Timestamp{Seconds: uint64(1234567890)},
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/ListRecycle {"key":"asdf","path":"/some/file.txt"}`)
})
})
@@ -929,7 +930,7 @@ var _ = Describe("Nextcloud", func() {
Expect(err).ToNot(HaveOccurred())
Expect(len(spaces)).To(Equal(1))
// https://github.com/cs3org/go-cs3apis/blob/970eec3/cs3/storage/provider/v1beta1/resources.pb.go#L1341-L1366
- Expect(*spaces[0]).To(Equal(provider.StorageSpace{
+ Expect(spaces[0]).To(BeComparableTo(&provider.StorageSpace{
Opaque: &types.Opaque{
Map: map[string](*types.OpaqueEntry){
"foo": &types.OpaqueEntry{Value: []byte("sama")},
@@ -957,7 +958,7 @@ var _ = Describe("Nextcloud", func() {
Mtime: &types.Timestamp{
Seconds: uint64(1234567890),
},
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/ListStorageSpaces [{"type":3,"Term":{"Owner":{"idp":"0.0.0.0:19000","opaque_id":"f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c","type":1}}},{"type":2,"Term":{"Id":{"opaque_id":"opaque-id"}}},{"type":4,"Term":{"SpaceType":"home"}}]`)
})
})
@@ -990,7 +991,7 @@ var _ = Describe("Nextcloud", func() {
Type: "home",
})
Expect(err).ToNot(HaveOccurred())
- Expect(*result).To(Equal(provider.CreateStorageSpaceResponse{
+ Expect(result).To(BeComparableTo(&provider.CreateStorageSpaceResponse{
Opaque: nil,
Status: nil,
StorageSpace: &provider.StorageSpace{
@@ -1022,7 +1023,7 @@ var _ = Describe("Nextcloud", func() {
Seconds: uint64(1234567890),
},
},
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/CreateStorageSpace {"opaque":{"map":{"bar":{"value":"c2FtYQ=="},"foo":{"value":"c2FtYQ=="}}},"owner":{"id":{"idp":"some-idp","opaque_id":"some-opaque-user-id","type":1}},"type":"home","name":"My Storage Space","quota":{"quota_max_bytes":456,"quota_max_files":123}}`)
})
})
diff --git a/pkg/storage/fs/owncloudsql/upload.go b/pkg/storage/fs/owncloudsql/upload.go
index b3763d4f88..872cf0503b 100644
--- a/pkg/storage/fs/owncloudsql/upload.go
+++ b/pkg/storage/fs/owncloudsql/upload.go
@@ -49,10 +49,10 @@ import (
var defaultFilePerm = os.FileMode(0664)
-func (fs *owncloudsqlfs) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (provider.ResourceInfo, error) {
+func (fs *owncloudsqlfs) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (*provider.ResourceInfo, error) {
upload, err := fs.GetUpload(ctx, req.Ref.GetPath())
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "owncloudsql: error retrieving upload")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "owncloudsql: error retrieving upload")
}
uploadInfo := upload.(*fileUpload)
@@ -62,18 +62,18 @@ func (fs *owncloudsqlfs) Upload(ctx context.Context, req storage.UploadRequest,
var assembledFile string
p, assembledFile, err = fs.chunkHandler.WriteChunk(p, req.Body)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if p == "" {
if err = uploadInfo.Terminate(ctx); err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "owncloudsql: error removing auxiliary files")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "owncloudsql: error removing auxiliary files")
}
- return provider.ResourceInfo{}, errtypes.PartialContent(req.Ref.String())
+ return &provider.ResourceInfo{}, errtypes.PartialContent(req.Ref.String())
}
uploadInfo.info.Storage["InternalDestination"] = p
fd, err := os.Open(assembledFile)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "owncloudsql: error opening assembled file")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "owncloudsql: error opening assembled file")
}
defer fd.Close()
defer os.RemoveAll(assembledFile)
@@ -81,11 +81,11 @@ func (fs *owncloudsqlfs) Upload(ctx context.Context, req storage.UploadRequest,
}
if _, err := uploadInfo.WriteChunk(ctx, 0, req.Body); err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "owncloudsql: error writing to binary file")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "owncloudsql: error writing to binary file")
}
if err := uploadInfo.FinishUpload(ctx); err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if uff != nil {
@@ -100,7 +100,7 @@ func (fs *owncloudsqlfs) Upload(ctx context.Context, req storage.UploadRequest,
}
owner, ok := ctxpkg.ContextGetUser(uploadInfo.ctx)
if !ok {
- return provider.ResourceInfo{}, errtypes.PreconditionFailed("error getting user from uploadinfo context")
+ return &provider.ResourceInfo{}, errtypes.PreconditionFailed("error getting user from uploadinfo context")
}
// spaces support in localfs needs to be revisited:
// * info.Storage["SpaceRoot"] is never set
@@ -108,7 +108,7 @@ func (fs *owncloudsqlfs) Upload(ctx context.Context, req storage.UploadRequest,
uff(owner.Id, owner.Id, uploadRef)
}
- ri := provider.ResourceInfo{
+ ri := &provider.ResourceInfo{
// fill with at least fileid, mtime and etag
Id: &provider.ResourceId{
StorageId: uploadInfo.info.MetaData["providerID"],
diff --git a/pkg/storage/fs/posix/testhelpers/helpers.go b/pkg/storage/fs/posix/testhelpers/helpers.go
index d18e34e44c..60d3a5761d 100644
--- a/pkg/storage/fs/posix/testhelpers/helpers.go
+++ b/pkg/storage/fs/posix/testhelpers/helpers.go
@@ -285,7 +285,7 @@ func (t *TestEnv) CreateTestStorageSpace(typ string, quota *providerv1beta1.Quot
Status: &v1beta11.Status{Code: v1beta11.Code_CODE_OK},
}, nil)
// Permissions required for setup below
- t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(providerv1beta1.ResourcePermissions{
+ t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&providerv1beta1.ResourcePermissions{
Stat: true,
AddGrant: true,
}, nil).Times(1) //
@@ -319,7 +319,7 @@ func (t *TestEnv) CreateTestStorageSpace(typ string, quota *providerv1beta1.Quot
}
// Create dir1
- t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(providerv1beta1.ResourcePermissions{
+ t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&providerv1beta1.ResourcePermissions{
Stat: true,
CreateContainer: true,
}, nil).Times(1) // Permissions required for setup below
@@ -335,7 +335,7 @@ func (t *TestEnv) CreateTestStorageSpace(typ string, quota *providerv1beta1.Quot
}
// Create subdir1 in dir1
- t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(providerv1beta1.ResourcePermissions{
+ t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&providerv1beta1.ResourcePermissions{
Stat: true,
CreateContainer: true,
}, nil).Times(1) // Permissions required for setup below
@@ -351,7 +351,7 @@ func (t *TestEnv) CreateTestStorageSpace(typ string, quota *providerv1beta1.Quot
}
// Create emptydir
- t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(providerv1beta1.ResourcePermissions{
+ t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&providerv1beta1.ResourcePermissions{
Stat: true,
CreateContainer: true,
}, nil).Times(1) // Permissions required for setup below
diff --git a/pkg/storage/fs/s3/upload.go b/pkg/storage/fs/s3/upload.go
index fa1eb29ffa..d80705f15f 100644
--- a/pkg/storage/fs/s3/upload.go
+++ b/pkg/storage/fs/s3/upload.go
@@ -32,12 +32,12 @@ import (
"github.com/pkg/errors"
)
-func (fs *s3FS) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (provider.ResourceInfo, error) {
+func (fs *s3FS) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (*provider.ResourceInfo, error) {
log := appctx.GetLogger(ctx)
fn, err := fs.resolve(ctx, req.Ref)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "error resolving ref")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "error resolving ref")
}
upParams := &s3manager.UploadInput{
@@ -52,10 +52,10 @@ func (fs *s3FS) Upload(ctx context.Context, req storage.UploadRequest, uff stora
log.Error().Err(err)
if aerr, ok := err.(awserr.Error); ok {
if aerr.Code() == s3.ErrCodeNoSuchBucket {
- return provider.ResourceInfo{}, errtypes.NotFound(fn)
+ return &provider.ResourceInfo{}, errtypes.NotFound(fn)
}
}
- return provider.ResourceInfo{}, errors.Wrap(err, "s3fs: error creating object "+fn)
+ return &provider.ResourceInfo{}, errors.Wrap(err, "s3fs: error creating object "+fn)
}
log.Debug().Interface("result", result) // todo cache etag?
@@ -63,10 +63,10 @@ func (fs *s3FS) Upload(ctx context.Context, req storage.UploadRequest, uff stora
// return id, etag and mtime
ri, err := fs.GetMD(ctx, req.Ref, []string{}, []string{"id", "etag", "mtime"})
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
- return *ri, nil
+ return ri, nil
}
// InitiateUpload returns upload ids corresponding to different protocols it supports
diff --git a/pkg/storage/registry/spaces/spaces.go b/pkg/storage/registry/spaces/spaces.go
index 05c8695560..79a09e171e 100644
--- a/pkg/storage/registry/spaces/spaces.go
+++ b/pkg/storage/registry/spaces/spaces.go
@@ -276,7 +276,7 @@ func (r *registry) ListProviders(ctx context.Context, filters map[string]string)
if filters["opaque_id"] == "" {
filters["opaque_id"] = filters["space_id"]
}
- id := storagespace.FormatResourceID(providerpb.ResourceId{
+ id := storagespace.FormatResourceID(&providerpb.ResourceId{
StorageId: filters["storage_id"],
SpaceId: filters["space_id"],
OpaqueId: filters["opaque_id"],
diff --git a/pkg/storage/registry/spaces/spaces_test.go b/pkg/storage/registry/spaces/spaces_test.go
index 816ab2676d..5e2a8e9ece 100644
--- a/pkg/storage/registry/spaces/spaces_test.go
+++ b/pkg/storage/registry/spaces/spaces_test.go
@@ -65,11 +65,11 @@ var _ = Describe("Spaces", func() {
fooClient.On("ListStorageSpaces", mock.Anything, mock.Anything).Return(
func(_ context.Context, req *provider.ListStorageSpacesRequest, _ ...grpc.CallOption) *provider.ListStorageSpacesResponse {
- rid := provider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "foospace"}
+ rid := &provider.ResourceId{StorageId: "provider-1", SpaceId: "foospace", OpaqueId: "foospace"}
spaces := []*provider.StorageSpace{
{
Id: &provider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(rid)},
- Root: &rid,
+ Root: rid,
Name: "Foo space",
SpaceType: "personal",
Owner: alice,
@@ -87,11 +87,11 @@ var _ = Describe("Spaces", func() {
}, nil)
barClient.On("ListStorageSpaces", mock.Anything, mock.Anything).Return(
func(_ context.Context, req *provider.ListStorageSpacesRequest, _ ...grpc.CallOption) *provider.ListStorageSpacesResponse {
- rid := provider.ResourceId{StorageId: "provider-1", SpaceId: "barspace", OpaqueId: "barspace"}
+ rid := &provider.ResourceId{StorageId: "provider-1", SpaceId: "barspace", OpaqueId: "barspace"}
spaces := []*provider.StorageSpace{
{
Id: &provider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(rid)},
- Root: &rid,
+ Root: rid,
Name: "Bar space",
SpaceType: "personal",
Owner: alice,
@@ -109,18 +109,18 @@ var _ = Describe("Spaces", func() {
}, nil)
bazClient.On("ListStorageSpaces", mock.Anything, mock.Anything).Return(
func(_ context.Context, req *provider.ListStorageSpacesRequest, _ ...grpc.CallOption) *provider.ListStorageSpacesResponse {
- rid1 := provider.ResourceId{StorageId: "provider-1", SpaceId: "bazspace1", OpaqueId: "bazspace1"}
- rid2 := provider.ResourceId{StorageId: "provider-1", SpaceId: "bazspace2", OpaqueId: "bazspace2"}
+ rid1 := &provider.ResourceId{StorageId: "provider-1", SpaceId: "bazspace1", OpaqueId: "bazspace1"}
+ rid2 := &provider.ResourceId{StorageId: "provider-1", SpaceId: "bazspace2", OpaqueId: "bazspace2"}
space1 := &provider.StorageSpace{
Id: &provider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(rid1)},
- Root: &rid1,
+ Root: rid1,
Name: "Baz space 1",
SpaceType: "project",
Owner: alice,
}
space2 := &provider.StorageSpace{
Id: &provider.StorageSpaceId{OpaqueId: storagespace.FormatResourceID(rid2)},
- Root: &rid2,
+ Root: rid2,
Name: "Baz space 2",
SpaceType: "project",
Owner: alice,
diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go
index c3917526e7..6fc19a0a23 100644
--- a/pkg/storage/storage.go
+++ b/pkg/storage/storage.go
@@ -40,7 +40,7 @@ type FS interface {
GetMD(ctx context.Context, ref *provider.Reference, mdKeys, fieldMask []string) (*provider.ResourceInfo, error)
ListFolder(ctx context.Context, ref *provider.Reference, mdKeys, fieldMask []string) ([]*provider.ResourceInfo, error)
InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error)
- Upload(ctx context.Context, req UploadRequest, uploadFunc UploadFinishedFunc) (provider.ResourceInfo, error)
+ Upload(ctx context.Context, req UploadRequest, uploadFunc UploadFinishedFunc) (*provider.ResourceInfo, error)
Download(ctx context.Context, ref *provider.Reference) (io.ReadCloser, error)
ListRevisions(ctx context.Context, ref *provider.Reference) ([]*provider.FileVersion, error)
DownloadRevision(ctx context.Context, ref *provider.Reference, key string) (io.ReadCloser, error)
diff --git a/pkg/storage/utils/decomposedfs/decomposedfs.go b/pkg/storage/utils/decomposedfs/decomposedfs.go
index 881538afc3..529f32d0eb 100644
--- a/pkg/storage/utils/decomposedfs/decomposedfs.go
+++ b/pkg/storage/utils/decomposedfs/decomposedfs.go
@@ -567,7 +567,7 @@ func (fs *Decomposedfs) GetQuota(ctx context.Context, ref *provider.Reference) (
}
// FIXME move treesize & quota to fieldmask
- ri, err := n.AsResourceInfo(ctx, &rp, []string{"treesize", "quota"}, []string{}, true)
+ ri, err := n.AsResourceInfo(ctx, rp, []string{"treesize", "quota"}, []string{}, true)
if err != nil {
return 0, 0, 0, err
}
@@ -661,7 +661,7 @@ func (fs *Decomposedfs) GetPathByID(ctx context.Context, id *provider.ResourceId
case err != nil:
return "", err
case !rp.GetPath:
- f := storagespace.FormatResourceID(*id)
+ f := storagespace.FormatResourceID(id)
if rp.Stat {
return "", errtypes.PermissionDenied(f)
}
@@ -881,7 +881,7 @@ func (fs *Decomposedfs) GetMD(ctx context.Context, ref *provider.Reference, mdKe
return nil, errtypes.NotFound(f)
}
- md, err := node.AsResourceInfo(ctx, &rp, mdKeys, fieldMask, utils.IsRelativeReference(ref))
+ md, err := node.AsResourceInfo(ctx, rp, mdKeys, fieldMask, utils.IsRelativeReference(ref))
if err != nil {
return nil, err
}
@@ -961,8 +961,8 @@ func (fs *Decomposedfs) ListFolder(ctx context.Context, ref *provider.Reference,
np := rp
// add this childs permissions
pset, _ := child.PermissionSet(ctx)
- node.AddPermissions(&np, &pset)
- ri, err := child.AsResourceInfo(ctx, &np, mdKeys, fieldMask, utils.IsRelativeReference(ref))
+ node.AddPermissions(np, pset)
+ ri, err := child.AsResourceInfo(ctx, np, mdKeys, fieldMask, utils.IsRelativeReference(ref))
if err != nil {
return errtypes.InternalError(err.Error())
}
diff --git a/pkg/storage/utils/decomposedfs/decomposedfs_concurrency_test.go b/pkg/storage/utils/decomposedfs/decomposedfs_concurrency_test.go
index 55999537c3..b424b864eb 100644
--- a/pkg/storage/utils/decomposedfs/decomposedfs_concurrency_test.go
+++ b/pkg/storage/utils/decomposedfs/decomposedfs_concurrency_test.go
@@ -178,7 +178,7 @@ var _ = Describe("Decomposed", func() {
Describe("CreateDir", func() {
JustBeforeEach(func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
CreateContainer: true,
}, nil)
diff --git a/pkg/storage/utils/decomposedfs/decomposedfs_test.go b/pkg/storage/utils/decomposedfs/decomposedfs_test.go
index 0dacc5b2d2..ef7bc144fe 100644
--- a/pkg/storage/utils/decomposedfs/decomposedfs_test.go
+++ b/pkg/storage/utils/decomposedfs/decomposedfs_test.go
@@ -73,7 +73,7 @@ var _ = Describe("Decomposed", func() {
ResourceId: env.SpaceRootRes,
Path: "/dir2",
}
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{CreateContainer: true, Stat: true}, nil)
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{CreateContainer: true, Stat: true}, nil)
err := env.Fs.CreateDir(env.Ctx, dir2)
Expect(err).ToNot(HaveOccurred())
ri, err := env.Fs.GetMD(env.Ctx, dir2, []string{}, []string{})
@@ -85,7 +85,7 @@ var _ = Describe("Decomposed", func() {
ResourceId: env.SpaceRootRes,
Path: "/dir1/dir2",
}
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{CreateContainer: true, Stat: true}, nil)
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{CreateContainer: true, Stat: true}, nil)
err := env.Fs.CreateDir(env.Ctx, dir2)
Expect(err).ToNot(HaveOccurred())
ri, err := env.Fs.GetMD(env.Ctx, dir2, []string{}, []string{})
@@ -93,7 +93,7 @@ var _ = Describe("Decomposed", func() {
Expect(ri.Path).To(Equal(dir2.Path))
})
It("dir already exists", func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{CreateContainer: true}, nil)
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{CreateContainer: true}, nil)
err := env.Fs.CreateDir(env.Ctx, ref)
Expect(err).To(HaveOccurred())
Expect(err).Should(MatchError(errtypes.AlreadyExists("/dir1")))
@@ -103,7 +103,7 @@ var _ = Describe("Decomposed", func() {
ResourceId: env.SpaceRootRes,
Path: "/dir1/dir3",
}
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{CreateContainer: true}, nil)
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{CreateContainer: true}, nil)
err := env.Fs.CreateDir(env.Ctx, dir3)
Expect(err).ToNot(HaveOccurred())
err = env.Fs.CreateDir(env.Ctx, dir3)
@@ -115,7 +115,7 @@ var _ = Describe("Decomposed", func() {
ResourceId: env.SpaceRootRes,
Path: "/dir1/dir2/dir3",
}
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{CreateContainer: true}, nil)
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{CreateContainer: true}, nil)
err := env.Fs.CreateDir(env.Ctx, dir2)
Expect(err).To(HaveOccurred())
Expect(err).Should(MatchError(errtypes.PreconditionFailed("/dir1/dir2")))
@@ -125,7 +125,7 @@ var _ = Describe("Decomposed", func() {
ResourceId: env.SpaceRootRes,
Path: "/dir1/dir2/dir3/dir4",
}
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{CreateContainer: true}, nil)
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{CreateContainer: true}, nil)
err := env.Fs.CreateDir(env.Ctx, dir2)
Expect(err).To(HaveOccurred())
Expect(err).Should(MatchError(errtypes.PreconditionFailed("error: not found: dir2")))
@@ -136,7 +136,7 @@ var _ = Describe("Decomposed", func() {
Describe("Delete", func() {
Context("with no permissions", func() {
It("returns an error", func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{}, nil)
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{}, nil)
err := env.Fs.Delete(env.Ctx, ref)
@@ -146,7 +146,7 @@ var _ = Describe("Decomposed", func() {
Context("with insufficient permissions", func() {
It("returns an error", func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
Delete: false,
}, nil)
@@ -159,7 +159,7 @@ var _ = Describe("Decomposed", func() {
Context("with sufficient permissions", func() {
JustBeforeEach(func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
Delete: true,
}, nil)
diff --git a/pkg/storage/utils/decomposedfs/grants_test.go b/pkg/storage/utils/decomposedfs/grants_test.go
index c70760a9d8..96f6a5e405 100644
--- a/pkg/storage/utils/decomposedfs/grants_test.go
+++ b/pkg/storage/utils/decomposedfs/grants_test.go
@@ -81,7 +81,7 @@ var _ = Describe("Grants", func() {
Context("with no permissions", func() {
JustBeforeEach(func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{}, nil)
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{}, nil)
})
Describe("AddGrant", func() {
@@ -94,7 +94,7 @@ var _ = Describe("Grants", func() {
Context("with insufficient permissions", func() {
JustBeforeEach(func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
}, nil)
})
@@ -109,7 +109,7 @@ var _ = Describe("Grants", func() {
Context("with sufficient permissions", func() {
JustBeforeEach(func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
AddGrant: true,
ListGrants: true,
diff --git a/pkg/storage/utils/decomposedfs/node/node.go b/pkg/storage/utils/decomposedfs/node/node.go
index f7437d1723..42a507e303 100644
--- a/pkg/storage/utils/decomposedfs/node/node.go
+++ b/pkg/storage/utils/decomposedfs/node/node.go
@@ -501,7 +501,7 @@ func (n *Node) readOwner(ctx context.Context) (*userpb.UserId, error) {
// the parent nodes are not taken into account
// accessDenied is separate from the resource permissions
// because we only support full denials
-func (n *Node) PermissionSet(ctx context.Context) (provider.ResourcePermissions, bool) {
+func (n *Node) PermissionSet(ctx context.Context) (*provider.ResourcePermissions, bool) {
u, ok := ctxpkg.ContextGetUser(ctx)
if !ok {
appctx.GetLogger(ctx).Debug().Str("spaceid", n.SpaceID).Str("nodeid", n.ID).Msg("no user in context, returning default permissions")
@@ -1002,14 +1002,14 @@ func isGrantExpired(g *provider.Grant) bool {
// ReadUserPermissions will assemble the permissions for the current user on the given node without parent nodes
// we indicate if the access was denied by setting a grant with no permissions
-func (n *Node) ReadUserPermissions(ctx context.Context, u *userpb.User) (ap provider.ResourcePermissions, accessDenied bool, err error) {
+func (n *Node) ReadUserPermissions(ctx context.Context, u *userpb.User) (ap *provider.ResourcePermissions, accessDenied bool, err error) {
// check if the current user is the owner
if utils.UserEqual(u.Id, n.Owner()) {
appctx.GetLogger(ctx).Debug().Str("spaceid", n.SpaceID).Str("nodeid", n.ID).Msg("user is owner, returning owner permissions")
return OwnerPermissions(), false, nil
}
- ap = provider.ResourcePermissions{}
+ ap = &provider.ResourcePermissions{}
// for an efficient group lookup convert the list of groups to a map
// groups are just strings ... groupnames ... or group ids ??? AAARGH !!!
@@ -1062,7 +1062,7 @@ func (n *Node) ReadUserPermissions(ctx context.Context, u *userpb.User) (ap prov
if grants.PermissionsEqual(g.Permissions, &provider.ResourcePermissions{}) {
return NoPermissions(), true, nil
}
- AddPermissions(&ap, g.GetPermissions())
+ AddPermissions(ap, g.GetPermissions())
case metadata.IsAttrUnset(err):
appctx.GetLogger(ctx).Error().Str("spaceid", n.SpaceID).Str("nodeid", n.ID).Str("grant", grantees[i]).Interface("grantees", grantees).Msg("grant vanished from node after listing")
// continue with next segment
diff --git a/pkg/storage/utils/decomposedfs/node/node_test.go b/pkg/storage/utils/decomposedfs/node/node_test.go
index d7dc2288ba..09192025bf 100644
--- a/pkg/storage/utils/decomposedfs/node/node_test.go
+++ b/pkg/storage/utils/decomposedfs/node/node_test.go
@@ -187,14 +187,14 @@ var _ = Describe("Node", func() {
Describe("the Etag field", func() {
It("is set", func() {
perms := node.OwnerPermissions()
- ri, err := n.AsResourceInfo(env.Ctx, &perms, []string{}, []string{}, false)
+ ri, err := n.AsResourceInfo(env.Ctx, perms, []string{}, []string{}, false)
Expect(err).ToNot(HaveOccurred())
Expect(len(ri.Etag)).To(Equal(34))
})
It("changes when the tmtime is set", func() {
perms := node.OwnerPermissions()
- ri, err := n.AsResourceInfo(env.Ctx, &perms, []string{}, []string{}, false)
+ ri, err := n.AsResourceInfo(env.Ctx, perms, []string{}, []string{}, false)
Expect(err).ToNot(HaveOccurred())
Expect(len(ri.Etag)).To(Equal(34))
before := ri.Etag
@@ -202,7 +202,7 @@ var _ = Describe("Node", func() {
tmtime := time.Now()
Expect(n.SetTMTime(env.Ctx, &tmtime)).To(Succeed())
- ri, err = n.AsResourceInfo(env.Ctx, &perms, []string{}, []string{}, false)
+ ri, err = n.AsResourceInfo(env.Ctx, perms, []string{}, []string{}, false)
Expect(err).ToNot(HaveOccurred())
Expect(len(ri.Etag)).To(Equal(34))
Expect(ri.Etag).ToNot(Equal(before))
@@ -218,7 +218,7 @@ var _ = Describe("Node", func() {
Expect(err).ToNot(HaveOccurred())
perms := node.OwnerPermissions()
- ri, err := n.AsResourceInfo(env.Ctx, &perms, []string{}, []string{}, false)
+ ri, err := n.AsResourceInfo(env.Ctx, perms, []string{}, []string{}, false)
Expect(err).ToNot(HaveOccurred())
Expect(ri.Opaque).ToNot(BeNil())
Expect(ri.Opaque.Map["lock"]).ToNot(BeNil())
@@ -243,7 +243,7 @@ var _ = Describe("Node", func() {
nodePSpace, err := env.Lookup.NodeFromSpaceID(env.Ctx, pSpace.SpaceId)
Expect(err).ToNot(HaveOccurred())
u := ctxpkg.ContextMustGetUser(env.Ctx)
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
UpdateGrant: true,
Stat: true,
}, nil).Times(1)
@@ -264,13 +264,13 @@ var _ = Describe("Node", func() {
Expect(err).ToNot(HaveOccurred())
perms, _ := nodePSpace.PermissionSet(env.Ctx)
expected := ocsconv.NewManagerRole().CS3ResourcePermissions()
- Expect(grants.PermissionsEqual(&perms, expected)).To(BeTrue())
+ Expect(grants.PermissionsEqual(perms, expected)).To(BeTrue())
})
It("Checks the Editor permissions on a project space and a denial", func() {
storageSpace, err := env.CreateTestStorageSpace("project", &provider.Quota{QuotaMaxBytes: 2000})
Expect(err).ToNot(HaveOccurred())
u := ctxpkg.ContextMustGetUser(env.Ctx)
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
UpdateGrant: true,
Stat: true,
}, nil).Times(1)
@@ -293,8 +293,8 @@ var _ = Describe("Node", func() {
Expect(err).ToNot(HaveOccurred())
permissionsActual, _ := spaceRoot.PermissionSet(env.Ctx)
permissionsExpected := ocsconv.NewEditorRole().CS3ResourcePermissions()
- Expect(grants.PermissionsEqual(&permissionsActual, permissionsExpected)).To(BeTrue())
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ Expect(grants.PermissionsEqual(permissionsActual, permissionsExpected)).To(BeTrue())
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
CreateContainer: true,
}, nil).Times(1)
@@ -307,7 +307,7 @@ var _ = Describe("Node", func() {
)
Expect(err).ToNot(HaveOccurred())
// adding a denial on the subpath
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
DenyGrant: true,
Stat: true,
}, nil).Times(1)
@@ -332,7 +332,7 @@ var _ = Describe("Node", func() {
Expect(err).ToNot(HaveOccurred())
subfolderActual, denied := subfolder.PermissionSet(env.Ctx)
subfolderExpected := ocsconv.NewDeniedRole().CS3ResourcePermissions()
- Expect(grants.PermissionsEqual(&subfolderActual, subfolderExpected)).To(BeTrue())
+ Expect(grants.PermissionsEqual(subfolderActual, subfolderExpected)).To(BeTrue())
Expect(denied).To(BeTrue())
})
})
diff --git a/pkg/storage/utils/decomposedfs/node/permissions.go b/pkg/storage/utils/decomposedfs/node/permissions.go
index 444156e7f5..f00f5081ba 100644
--- a/pkg/storage/utils/decomposedfs/node/permissions.go
+++ b/pkg/storage/utils/decomposedfs/node/permissions.go
@@ -42,13 +42,13 @@ var (
)
// NoPermissions represents an empty set of permissions
-func NoPermissions() provider.ResourcePermissions {
- return provider.ResourcePermissions{}
+func NoPermissions() *provider.ResourcePermissions {
+ return &provider.ResourcePermissions{}
}
// ShareFolderPermissions defines permissions for the shared jail
-func ShareFolderPermissions() provider.ResourcePermissions {
- return provider.ResourcePermissions{
+func ShareFolderPermissions() *provider.ResourcePermissions {
+ return &provider.ResourcePermissions{
// read permissions
ListContainer: true,
Stat: true,
@@ -60,8 +60,8 @@ func ShareFolderPermissions() provider.ResourcePermissions {
}
// OwnerPermissions defines permissions for nodes owned by the user
-func OwnerPermissions() provider.ResourcePermissions {
- return provider.ResourcePermissions{
+func OwnerPermissions() *provider.ResourcePermissions {
+ return &provider.ResourcePermissions{
// all permissions
AddGrant: true,
CreateContainer: true,
@@ -86,9 +86,9 @@ func OwnerPermissions() provider.ResourcePermissions {
}
// ServiceAccountPermissions defines the permissions for nodes when requested by a service account
-func ServiceAccountPermissions() provider.ResourcePermissions {
+func ServiceAccountPermissions() *provider.ResourcePermissions {
// TODO: Different permissions for different service accounts
- return provider.ResourcePermissions{
+ return &provider.ResourcePermissions{
Stat: true,
ListContainer: true,
GetPath: true, // for search index
@@ -117,17 +117,17 @@ func NewPermissions(lu PathLookup) *Permissions {
}
// AssemblePermissions will assemble the permissions for the current user on the given node, taking into account all parent nodes
-func (p *Permissions) AssemblePermissions(ctx context.Context, n *Node) (ap provider.ResourcePermissions, err error) {
+func (p *Permissions) AssemblePermissions(ctx context.Context, n *Node) (ap *provider.ResourcePermissions, err error) {
return p.assemblePermissions(ctx, n, true)
}
// AssembleTrashPermissions will assemble the permissions for the current user on the given node, taking into account all parent nodes
-func (p *Permissions) AssembleTrashPermissions(ctx context.Context, n *Node) (ap provider.ResourcePermissions, err error) {
+func (p *Permissions) AssembleTrashPermissions(ctx context.Context, n *Node) (ap *provider.ResourcePermissions, err error) {
return p.assemblePermissions(ctx, n, false)
}
// assemblePermissions will assemble the permissions for the current user on the given node, taking into account all parent nodes
-func (p *Permissions) assemblePermissions(ctx context.Context, n *Node, failOnTrashedSubtree bool) (ap provider.ResourcePermissions, err error) {
+func (p *Permissions) assemblePermissions(ctx context.Context, n *Node, failOnTrashedSubtree bool) (ap *provider.ResourcePermissions, err error) {
u, ok := ctxpkg.ContextGetUser(ctx)
if !ok {
return NoPermissions(), nil
@@ -151,7 +151,7 @@ func (p *Permissions) assemblePermissions(ctx context.Context, n *Node, failOnTr
// determine root
rn := n.SpaceRoot
cn := n
- ap = provider.ResourcePermissions{}
+ ap = &provider.ResourcePermissions{}
// for an efficient group lookup convert the list of groups to a map
// groups are just strings ... groupnames ... or group ids ??? AAARGH !!!
@@ -167,7 +167,7 @@ func (p *Permissions) assemblePermissions(ctx context.Context, n *Node, failOnTr
if accessDenied {
return np, nil
}
- AddPermissions(&ap, &np)
+ AddPermissions(ap, np)
} else {
appctx.GetLogger(ctx).Error().Err(err).Str("spaceid", cn.SpaceID).Str("nodeid", cn.ID).Msg("error reading permissions")
// continue with next segment
@@ -193,7 +193,7 @@ func (p *Permissions) assemblePermissions(ctx context.Context, n *Node, failOnTr
if accessDenied {
return np, nil
}
- AddPermissions(&ap, &np)
+ AddPermissions(ap, np)
} else {
appctx.GetLogger(ctx).Error().Err(err).Str("spaceid", cn.SpaceID).Str("nodeid", cn.ID).Msg("error reading root node permissions")
}
diff --git a/pkg/storage/utils/decomposedfs/permissions/mocks/PermissionsChecker.go b/pkg/storage/utils/decomposedfs/permissions/mocks/PermissionsChecker.go
index 26af1da0f9..71336d28a1 100644
--- a/pkg/storage/utils/decomposedfs/permissions/mocks/PermissionsChecker.go
+++ b/pkg/storage/utils/decomposedfs/permissions/mocks/PermissionsChecker.go
@@ -43,22 +43,24 @@ func (_m *PermissionsChecker) EXPECT() *PermissionsChecker_Expecter {
}
// AssemblePermissions provides a mock function with given fields: ctx, n
-func (_m *PermissionsChecker) AssemblePermissions(ctx context.Context, n *node.Node) (providerv1beta1.ResourcePermissions, error) {
+func (_m *PermissionsChecker) AssemblePermissions(ctx context.Context, n *node.Node) (*providerv1beta1.ResourcePermissions, error) {
ret := _m.Called(ctx, n)
if len(ret) == 0 {
panic("no return value specified for AssemblePermissions")
}
- var r0 providerv1beta1.ResourcePermissions
+ var r0 *providerv1beta1.ResourcePermissions
var r1 error
- if rf, ok := ret.Get(0).(func(context.Context, *node.Node) (providerv1beta1.ResourcePermissions, error)); ok {
+ if rf, ok := ret.Get(0).(func(context.Context, *node.Node) (*providerv1beta1.ResourcePermissions, error)); ok {
return rf(ctx, n)
}
- if rf, ok := ret.Get(0).(func(context.Context, *node.Node) providerv1beta1.ResourcePermissions); ok {
+ if rf, ok := ret.Get(0).(func(context.Context, *node.Node) *providerv1beta1.ResourcePermissions); ok {
r0 = rf(ctx, n)
} else {
- r0 = ret.Get(0).(providerv1beta1.ResourcePermissions)
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*providerv1beta1.ResourcePermissions)
+ }
}
if rf, ok := ret.Get(1).(func(context.Context, *node.Node) error); ok {
@@ -89,33 +91,35 @@ func (_c *PermissionsChecker_AssemblePermissions_Call) Run(run func(ctx context.
return _c
}
-func (_c *PermissionsChecker_AssemblePermissions_Call) Return(ap providerv1beta1.ResourcePermissions, err error) *PermissionsChecker_AssemblePermissions_Call {
+func (_c *PermissionsChecker_AssemblePermissions_Call) Return(ap *providerv1beta1.ResourcePermissions, err error) *PermissionsChecker_AssemblePermissions_Call {
_c.Call.Return(ap, err)
return _c
}
-func (_c *PermissionsChecker_AssemblePermissions_Call) RunAndReturn(run func(context.Context, *node.Node) (providerv1beta1.ResourcePermissions, error)) *PermissionsChecker_AssemblePermissions_Call {
+func (_c *PermissionsChecker_AssemblePermissions_Call) RunAndReturn(run func(context.Context, *node.Node) (*providerv1beta1.ResourcePermissions, error)) *PermissionsChecker_AssemblePermissions_Call {
_c.Call.Return(run)
return _c
}
// AssembleTrashPermissions provides a mock function with given fields: ctx, n
-func (_m *PermissionsChecker) AssembleTrashPermissions(ctx context.Context, n *node.Node) (providerv1beta1.ResourcePermissions, error) {
+func (_m *PermissionsChecker) AssembleTrashPermissions(ctx context.Context, n *node.Node) (*providerv1beta1.ResourcePermissions, error) {
ret := _m.Called(ctx, n)
if len(ret) == 0 {
panic("no return value specified for AssembleTrashPermissions")
}
- var r0 providerv1beta1.ResourcePermissions
+ var r0 *providerv1beta1.ResourcePermissions
var r1 error
- if rf, ok := ret.Get(0).(func(context.Context, *node.Node) (providerv1beta1.ResourcePermissions, error)); ok {
+ if rf, ok := ret.Get(0).(func(context.Context, *node.Node) (*providerv1beta1.ResourcePermissions, error)); ok {
return rf(ctx, n)
}
- if rf, ok := ret.Get(0).(func(context.Context, *node.Node) providerv1beta1.ResourcePermissions); ok {
+ if rf, ok := ret.Get(0).(func(context.Context, *node.Node) *providerv1beta1.ResourcePermissions); ok {
r0 = rf(ctx, n)
} else {
- r0 = ret.Get(0).(providerv1beta1.ResourcePermissions)
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*providerv1beta1.ResourcePermissions)
+ }
}
if rf, ok := ret.Get(1).(func(context.Context, *node.Node) error); ok {
@@ -146,12 +150,12 @@ func (_c *PermissionsChecker_AssembleTrashPermissions_Call) Run(run func(ctx con
return _c
}
-func (_c *PermissionsChecker_AssembleTrashPermissions_Call) Return(ap providerv1beta1.ResourcePermissions, err error) *PermissionsChecker_AssembleTrashPermissions_Call {
+func (_c *PermissionsChecker_AssembleTrashPermissions_Call) Return(ap *providerv1beta1.ResourcePermissions, err error) *PermissionsChecker_AssembleTrashPermissions_Call {
_c.Call.Return(ap, err)
return _c
}
-func (_c *PermissionsChecker_AssembleTrashPermissions_Call) RunAndReturn(run func(context.Context, *node.Node) (providerv1beta1.ResourcePermissions, error)) *PermissionsChecker_AssembleTrashPermissions_Call {
+func (_c *PermissionsChecker_AssembleTrashPermissions_Call) RunAndReturn(run func(context.Context, *node.Node) (*providerv1beta1.ResourcePermissions, error)) *PermissionsChecker_AssembleTrashPermissions_Call {
_c.Call.Return(run)
return _c
}
diff --git a/pkg/storage/utils/decomposedfs/permissions/spacepermissions.go b/pkg/storage/utils/decomposedfs/permissions/spacepermissions.go
index 75e8e73c60..aa99a9cff3 100644
--- a/pkg/storage/utils/decomposedfs/permissions/spacepermissions.go
+++ b/pkg/storage/utils/decomposedfs/permissions/spacepermissions.go
@@ -31,8 +31,8 @@ const (
// PermissionsChecker defines an interface for checking permissions on a Node
type PermissionsChecker interface {
- AssemblePermissions(ctx context.Context, n *node.Node) (ap provider.ResourcePermissions, err error)
- AssembleTrashPermissions(ctx context.Context, n *node.Node) (ap provider.ResourcePermissions, err error)
+ AssemblePermissions(ctx context.Context, n *node.Node) (ap *provider.ResourcePermissions, err error)
+ AssembleTrashPermissions(ctx context.Context, n *node.Node) (ap *provider.ResourcePermissions, err error)
}
// CS3PermissionsClient defines an interface for checking permissions against the CS3 permissions service
@@ -52,14 +52,14 @@ func NewPermissions(item PermissionsChecker, permissionsSelector pool.Selectable
}
// AssemblePermissions is used to assemble file permissions
-func (p Permissions) AssemblePermissions(ctx context.Context, n *node.Node) (provider.ResourcePermissions, error) {
+func (p Permissions) AssemblePermissions(ctx context.Context, n *node.Node) (*provider.ResourcePermissions, error) {
ctx, span := tracer.Start(ctx, "AssemblePermissions")
defer span.End()
return p.item.AssemblePermissions(ctx, n)
}
// AssembleTrashPermissions is used to assemble file permissions
-func (p Permissions) AssembleTrashPermissions(ctx context.Context, n *node.Node) (provider.ResourcePermissions, error) {
+func (p Permissions) AssembleTrashPermissions(ctx context.Context, n *node.Node) (*provider.ResourcePermissions, error) {
return p.item.AssembleTrashPermissions(ctx, n)
}
@@ -143,17 +143,17 @@ func (p Permissions) checkPermission(ctx context.Context, perm string, ref *prov
}
// IsManager returns true if the given resource permissions evaluate the user as "manager"
-func IsManager(rp provider.ResourcePermissions) bool {
+func IsManager(rp *provider.ResourcePermissions) bool {
return rp.RemoveGrant
}
// IsEditor returns true if the given resource permissions evaluate the user as "editor"
-func IsEditor(rp provider.ResourcePermissions) bool {
+func IsEditor(rp *provider.ResourcePermissions) bool {
return rp.InitiateFileUpload
}
// IsViewer returns true if the given resource permissions evaluate the user as "viewer"
-func IsViewer(rp provider.ResourcePermissions) bool {
+func IsViewer(rp *provider.ResourcePermissions) bool {
return rp.Stat
}
diff --git a/pkg/storage/utils/decomposedfs/recycle_test.go b/pkg/storage/utils/decomposedfs/recycle_test.go
index 1af163d093..5cfe9ec5e7 100644
--- a/pkg/storage/utils/decomposedfs/recycle_test.go
+++ b/pkg/storage/utils/decomposedfs/recycle_test.go
@@ -452,9 +452,9 @@ var _ = Describe("Recycle", func() {
})
func registerPermissions(m *mocks.PermissionsChecker, uid string, exp *provider.ResourcePermissions) {
- p := provider.ResourcePermissions{}
+ p := &provider.ResourcePermissions{}
if exp != nil {
- p = *exp
+ p = exp
}
m.On("AssemblePermissions",
mock.MatchedBy(func(ctx context.Context) bool {
diff --git a/pkg/storage/utils/decomposedfs/revisions.go b/pkg/storage/utils/decomposedfs/revisions.go
index 93ea47c718..030b66bb50 100644
--- a/pkg/storage/utils/decomposedfs/revisions.go
+++ b/pkg/storage/utils/decomposedfs/revisions.go
@@ -352,7 +352,7 @@ func (fs *Decomposedfs) getRevisionNode(ctx context.Context, ref *provider.Refer
switch {
case err != nil:
return nil, err
- case !hasPermission(&p):
+ case !hasPermission(p):
return nil, errtypes.PermissionDenied(filepath.Join(n.ParentID, n.Name))
}
diff --git a/pkg/storage/utils/decomposedfs/spaces.go b/pkg/storage/utils/decomposedfs/spaces.go
index a635db2da0..8cedb275ab 100644
--- a/pkg/storage/utils/decomposedfs/spaces.go
+++ b/pkg/storage/utils/decomposedfs/spaces.go
@@ -1002,7 +1002,7 @@ func (fs *Decomposedfs) StorageSpaceFromNode(ctx context.Context, n *node.Node,
}
if si := spaceAttributes.String(prefixes.SpaceImageAttr); si != "" {
space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "image", storagespace.FormatResourceID(
- provider.ResourceId{StorageId: space.Root.StorageId, SpaceId: space.Root.SpaceId, OpaqueId: si},
+ &provider.ResourceId{StorageId: space.Root.StorageId, SpaceId: space.Root.SpaceId, OpaqueId: si},
))
}
if sd := spaceAttributes.String(prefixes.SpaceDescriptionAttr); sd != "" {
@@ -1010,7 +1010,7 @@ func (fs *Decomposedfs) StorageSpaceFromNode(ctx context.Context, n *node.Node,
}
if sr := spaceAttributes.String(prefixes.SpaceReadmeAttr); sr != "" {
space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "readme", storagespace.FormatResourceID(
- provider.ResourceId{StorageId: space.Root.StorageId, SpaceId: space.Root.SpaceId, OpaqueId: sr},
+ &provider.ResourceId{StorageId: space.Root.StorageId, SpaceId: space.Root.SpaceId, OpaqueId: sr},
))
}
if sa := spaceAttributes.String(prefixes.SpaceAliasAttr); sa != "" {
@@ -1019,7 +1019,7 @@ func (fs *Decomposedfs) StorageSpaceFromNode(ctx context.Context, n *node.Node,
// add rootinfo
ps, _ := n.SpaceRoot.PermissionSet(ctx)
- space.RootInfo, _ = n.SpaceRoot.AsResourceInfo(ctx, &ps, []string{"quota"}, nil, false)
+ space.RootInfo, _ = n.SpaceRoot.AsResourceInfo(ctx, ps, []string{"quota"}, nil, false)
// we cannot put free, used and remaining into the quota, as quota, when set would always imply a quota limit
// for now we use opaque properties with a 'quota.' prefix
diff --git a/pkg/storage/utils/decomposedfs/spaces_test.go b/pkg/storage/utils/decomposedfs/spaces_test.go
index 39c4f5d066..bf1ab03d74 100644
--- a/pkg/storage/utils/decomposedfs/spaces_test.go
+++ b/pkg/storage/utils/decomposedfs/spaces_test.go
@@ -60,7 +60,7 @@ var _ = Describe("Spaces", func() {
return &cs3permissions.CheckPermissionResponse{Status: &rpcv1beta1.Status{Code: rpcv1beta1.Code_CODE_PERMISSION_DENIED}}
},
nil)
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(func(ctx context.Context, n *node.Node) provider.ResourcePermissions {
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(func(ctx context.Context, n *node.Node) *provider.ResourcePermissions {
if ctxpkg.ContextMustGetUser(ctx).Id.GetOpaqueId() == "25b69780-5f39-43be-a7ac-a9b9e9fe4230" {
return node.OwnerPermissions() // id of owner/admin
}
@@ -218,7 +218,7 @@ var _ = Describe("Spaces", func() {
})
Expect(err).ToNot(HaveOccurred())
env.PermissionsClient.On("CheckPermission", mock.Anything, mock.Anything, mock.Anything).Return(&cs3permissions.CheckPermissionResponse{Status: &rpcv1beta1.Status{Code: rpcv1beta1.Code_CODE_OK}}, nil)
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
AddGrant: true,
GetQuota: true,
@@ -287,14 +287,14 @@ var _ = Describe("Spaces", func() {
}, nil)
env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(
- func(ctx context.Context, n *node.Node) provider.ResourcePermissions {
+ func(ctx context.Context, n *node.Node) *provider.ResourcePermissions {
switch ctxpkg.ContextMustGetUser(ctx).GetId().GetOpaqueId() {
case manager.GetId().GetOpaqueId():
return node.OwnerPermissions() // id of owner/admin
case editor.GetId().GetOpaqueId():
- return provider.ResourcePermissions{InitiateFileUpload: true} // mock editor
+ return &provider.ResourcePermissions{InitiateFileUpload: true} // mock editor
case viewer.GetId().GetOpaqueId():
- return provider.ResourcePermissions{Stat: true} // mock viewer
+ return &provider.ResourcePermissions{Stat: true} // mock viewer
default:
return node.NoPermissions()
}
diff --git a/pkg/storage/utils/decomposedfs/testhelpers/helpers.go b/pkg/storage/utils/decomposedfs/testhelpers/helpers.go
index 3110a525af..1aa49e7a7c 100644
--- a/pkg/storage/utils/decomposedfs/testhelpers/helpers.go
+++ b/pkg/storage/utils/decomposedfs/testhelpers/helpers.go
@@ -279,7 +279,7 @@ func (t *TestEnv) CreateTestStorageSpace(typ string, quota *providerv1beta1.Quot
Status: &v1beta11.Status{Code: v1beta11.Code_CODE_OK},
}, nil)
// Permissions required for setup below
- t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(providerv1beta1.ResourcePermissions{
+ t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&providerv1beta1.ResourcePermissions{
Stat: true,
AddGrant: true,
}, nil).Times(1) //
@@ -313,7 +313,7 @@ func (t *TestEnv) CreateTestStorageSpace(typ string, quota *providerv1beta1.Quot
}
// Create dir1
- t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(providerv1beta1.ResourcePermissions{
+ t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&providerv1beta1.ResourcePermissions{
Stat: true,
CreateContainer: true,
}, nil).Times(1) // Permissions required for setup below
@@ -329,7 +329,7 @@ func (t *TestEnv) CreateTestStorageSpace(typ string, quota *providerv1beta1.Quot
}
// Create subdir1 in dir1
- t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(providerv1beta1.ResourcePermissions{
+ t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&providerv1beta1.ResourcePermissions{
Stat: true,
CreateContainer: true,
}, nil).Times(1) // Permissions required for setup below
@@ -345,7 +345,7 @@ func (t *TestEnv) CreateTestStorageSpace(typ string, quota *providerv1beta1.Quot
}
// Create emptydir
- t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(providerv1beta1.ResourcePermissions{
+ t.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&providerv1beta1.ResourcePermissions{
Stat: true,
CreateContainer: true,
}, nil).Times(1) // Permissions required for setup below
diff --git a/pkg/storage/utils/decomposedfs/tree/tree_test.go b/pkg/storage/utils/decomposedfs/tree/tree_test.go
index 5701158c05..7859250470 100644
--- a/pkg/storage/utils/decomposedfs/tree/tree_test.go
+++ b/pkg/storage/utils/decomposedfs/tree/tree_test.go
@@ -289,7 +289,7 @@ var _ = Describe("Tree", func() {
var dir *node.Node
JustBeforeEach(func() {
- env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ env.Permissions.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
CreateContainer: true,
Stat: true,
}, nil)
@@ -306,7 +306,7 @@ var _ = Describe("Tree", func() {
Expect(err).ToNot(HaveOccurred())
perms := node.OwnerPermissions()
- riBefore, err := dir.AsResourceInfo(env.Ctx, &perms, []string{}, []string{}, false)
+ riBefore, err := dir.AsResourceInfo(env.Ctx, perms, []string{}, []string{}, false)
Expect(err).ToNot(HaveOccurred())
err = env.Tree.Propagate(env.Ctx, file, 0)
@@ -318,7 +318,7 @@ var _ = Describe("Tree", func() {
OpaqueId: dir.ID,
})
Expect(err).ToNot(HaveOccurred())
- riAfter, err := dir.AsResourceInfo(env.Ctx, &perms, []string{}, []string{}, false)
+ riAfter, err := dir.AsResourceInfo(env.Ctx, perms, []string{}, []string{}, false)
Expect(err).ToNot(HaveOccurred())
Expect(riAfter.Etag).ToNot(Equal(riBefore.Etag))
})
diff --git a/pkg/storage/utils/decomposedfs/upload.go b/pkg/storage/utils/decomposedfs/upload.go
index 33b077972c..dc2a075515 100644
--- a/pkg/storage/utils/decomposedfs/upload.go
+++ b/pkg/storage/utils/decomposedfs/upload.go
@@ -46,10 +46,10 @@ import (
// Upload uploads data to the given resource
// TODO Upload (and InitiateUpload) needs a way to receive the expected checksum.
// Maybe in metadata as 'checksum' => 'sha1 aeosvp45w5xaeoe' = lowercase, space separated?
-func (fs *Decomposedfs) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (provider.ResourceInfo, error) {
+func (fs *Decomposedfs) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (*provider.ResourceInfo, error) {
up, err := fs.GetUpload(ctx, req.Ref.GetPath())
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error retrieving upload")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error retrieving upload")
}
session := up.(*upload.OcisSession)
@@ -59,17 +59,17 @@ func (fs *Decomposedfs) Upload(ctx context.Context, req storage.UploadRequest, u
if session.Chunk() != "" { // check chunking v1
p, assembledFile, err := fs.chunkHandler.WriteChunk(session.Chunk(), req.Body)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if p == "" {
if err = session.Terminate(ctx); err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error removing auxiliary files")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error removing auxiliary files")
}
- return provider.ResourceInfo{}, errtypes.PartialContent(req.Ref.String())
+ return &provider.ResourceInfo{}, errtypes.PartialContent(req.Ref.String())
}
fd, err := os.Open(assembledFile)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error opening assembled file")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error opening assembled file")
}
defer fd.Close()
defer os.RemoveAll(assembledFile)
@@ -77,21 +77,21 @@ func (fs *Decomposedfs) Upload(ctx context.Context, req storage.UploadRequest, u
size, err := session.WriteChunk(ctx, 0, req.Body)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error writing to binary file")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error writing to binary file")
}
session.SetSize(size)
} else {
size, err := session.WriteChunk(ctx, 0, req.Body)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error writing to binary file")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "Decomposedfs: error writing to binary file")
}
if size != req.Length {
- return provider.ResourceInfo{}, errtypes.PartialContent("Decomposedfs: unexpected end of stream")
+ return &provider.ResourceInfo{}, errtypes.PartialContent("Decomposedfs: unexpected end of stream")
}
}
if err := session.FinishUpload(ctx); err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if uff != nil {
@@ -107,7 +107,7 @@ func (fs *Decomposedfs) Upload(ctx context.Context, req storage.UploadRequest, u
uff(session.SpaceOwner(), &executant, uploadRef)
}
- ri := provider.ResourceInfo{
+ ri := &provider.ResourceInfo{
// fill with at least fileid, mtime and etag
Id: &provider.ResourceId{
StorageId: session.ProviderID(),
diff --git a/pkg/storage/utils/decomposedfs/upload_async_test.go b/pkg/storage/utils/decomposedfs/upload_async_test.go
index 0de7ccede9..47ead74e84 100644
--- a/pkg/storage/utils/decomposedfs/upload_async_test.go
+++ b/pkg/storage/utils/decomposedfs/upload_async_test.go
@@ -160,7 +160,7 @@ var _ = Describe("Async file uploads", Ordered, func() {
// for this test we don't care about permissions
pmock.On("AssemblePermissions", mock.Anything, mock.Anything).
- Return(provider.ResourcePermissions{
+ Return(&provider.ResourcePermissions{
Stat: true,
GetQuota: true,
InitiateFileUpload: true,
diff --git a/pkg/storage/utils/decomposedfs/upload_test.go b/pkg/storage/utils/decomposedfs/upload_test.go
index a3a7f8e533..3ae7033d26 100644
--- a/pkg/storage/utils/decomposedfs/upload_test.go
+++ b/pkg/storage/utils/decomposedfs/upload_test.go
@@ -130,7 +130,7 @@ var _ = Describe("File uploads", func() {
cs3permissionsclient.On("CheckPermission", mock.Anything, mock.Anything, mock.Anything).Return(&cs3permissions.CheckPermissionResponse{
Status: &v1beta11.Status{Code: v1beta11.Code_CODE_OK},
}, nil)
- pmock.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ pmock.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
AddGrant: true,
}, nil).Times(1)
@@ -155,7 +155,7 @@ var _ = Describe("File uploads", func() {
Context("the user's quota is exceeded", func() {
BeforeEach(func() {
- pmock.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ pmock.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
GetQuota: true,
}, nil)
@@ -175,7 +175,7 @@ var _ = Describe("File uploads", func() {
Context("the user has insufficient permissions", func() {
BeforeEach(func() {
- pmock.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ pmock.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
}, nil)
})
@@ -197,7 +197,7 @@ var _ = Describe("File uploads", func() {
Expect(err).ToNot(HaveOccurred())
err = h.SetXattrString(ctx, prefixes.SpaceNameAttr, "username")
Expect(err).ToNot(HaveOccurred())
- pmock.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(provider.ResourcePermissions{
+ pmock.On("AssemblePermissions", mock.Anything, mock.Anything, mock.Anything).Return(&provider.ResourcePermissions{
Stat: true,
}, nil)
})
@@ -214,7 +214,7 @@ var _ = Describe("File uploads", func() {
Context("with sufficient permissions", func() {
BeforeEach(func() {
pmock.On("AssemblePermissions", mock.Anything, mock.Anything).
- Return(provider.ResourcePermissions{
+ Return(&provider.ResourcePermissions{
Stat: true,
GetQuota: true,
InitiateFileUpload: true,
diff --git a/pkg/storage/utils/eosfs/upload.go b/pkg/storage/utils/eosfs/upload.go
index f8a4737821..9e434c1d5f 100644
--- a/pkg/storage/utils/eosfs/upload.go
+++ b/pkg/storage/utils/eosfs/upload.go
@@ -30,28 +30,28 @@ import (
"github.com/pkg/errors"
)
-func (fs *eosfs) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (provider.ResourceInfo, error) {
+func (fs *eosfs) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (*provider.ResourceInfo, error) {
p, err := fs.resolve(ctx, req.Ref)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "eos: error resolving reference")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "eos: error resolving reference")
}
if fs.isShareFolder(ctx, p) {
- return provider.ResourceInfo{}, errtypes.PermissionDenied("eos: cannot upload under the virtual share folder")
+ return &provider.ResourceInfo{}, errtypes.PermissionDenied("eos: cannot upload under the virtual share folder")
}
if chunking.IsChunked(p) {
var assembledFile string
p, assembledFile, err = fs.chunkHandler.WriteChunk(p, req.Body)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if p == "" {
- return provider.ResourceInfo{}, errtypes.PartialContent(req.Ref.String())
+ return &provider.ResourceInfo{}, errtypes.PartialContent(req.Ref.String())
}
fd, err := os.Open(assembledFile)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "eos: error opening assembled file")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "eos: error opening assembled file")
}
defer fd.Close()
defer os.RemoveAll(assembledFile)
@@ -62,31 +62,31 @@ func (fs *eosfs) Upload(ctx context.Context, req storage.UploadRequest, uff stor
u, err := getUser(ctx)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "eos: no user in ctx")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "eos: no user in ctx")
}
// We need the auth corresponding to the parent directory
// as the file might not exist at the moment
auth, err := fs.getUserAuth(ctx, u, path.Dir(fn))
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if err := fs.c.Write(ctx, auth, fn, req.Body); err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
eosFileInfo, err := fs.c.GetFileInfoByPath(ctx, auth, fn)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
ri, err := fs.convertToResourceInfo(ctx, eosFileInfo)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
- return *ri, nil
+ return ri, nil
}
func (fs *eosfs) InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error) {
diff --git a/pkg/storage/utils/localfs/upload.go b/pkg/storage/utils/localfs/upload.go
index 22c2c335c8..45c61dc8a1 100644
--- a/pkg/storage/utils/localfs/upload.go
+++ b/pkg/storage/utils/localfs/upload.go
@@ -40,10 +40,10 @@ import (
var defaultFilePerm = os.FileMode(0664)
-func (fs *localfs) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (provider.ResourceInfo, error) {
+func (fs *localfs) Upload(ctx context.Context, req storage.UploadRequest, uff storage.UploadFinishedFunc) (*provider.ResourceInfo, error) {
upload, err := fs.GetUpload(ctx, req.Ref.GetPath())
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "localfs: error retrieving upload")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "localfs: error retrieving upload")
}
uploadInfo := upload.(*fileUpload)
@@ -53,18 +53,18 @@ func (fs *localfs) Upload(ctx context.Context, req storage.UploadRequest, uff st
var assembledFile string
p, assembledFile, err = fs.chunkHandler.WriteChunk(p, req.Body)
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if p == "" {
if err = uploadInfo.Terminate(ctx); err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "localfs: error removing auxiliary files")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "localfs: error removing auxiliary files")
}
- return provider.ResourceInfo{}, errtypes.PartialContent(req.Ref.String())
+ return &provider.ResourceInfo{}, errtypes.PartialContent(req.Ref.String())
}
uploadInfo.info.Storage["InternalDestination"] = p
fd, err := os.Open(assembledFile)
if err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "localfs: error opening assembled file")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "localfs: error opening assembled file")
}
defer fd.Close()
defer os.RemoveAll(assembledFile)
@@ -72,11 +72,11 @@ func (fs *localfs) Upload(ctx context.Context, req storage.UploadRequest, uff st
}
if _, err := uploadInfo.WriteChunk(ctx, 0, req.Body); err != nil {
- return provider.ResourceInfo{}, errors.Wrap(err, "localfs: error writing to binary file")
+ return &provider.ResourceInfo{}, errors.Wrap(err, "localfs: error writing to binary file")
}
if err := uploadInfo.FinishUpload(ctx); err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if uff != nil {
@@ -91,7 +91,7 @@ func (fs *localfs) Upload(ctx context.Context, req storage.UploadRequest, uff st
}
owner, ok := ctxpkg.ContextGetUser(uploadInfo.ctx)
if !ok {
- return provider.ResourceInfo{}, errtypes.PreconditionFailed("error getting user from uploadinfo context")
+ return &provider.ResourceInfo{}, errtypes.PreconditionFailed("error getting user from uploadinfo context")
}
// spaces support in localfs needs to be revisited:
// * info.Storage["SpaceRoot"] is never set
@@ -102,10 +102,10 @@ func (fs *localfs) Upload(ctx context.Context, req storage.UploadRequest, uff st
// return id, etag and mtime
ri, err := fs.GetMD(ctx, req.Ref, []string{}, []string{"id", "etag", "mtime"})
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
- return *ri, nil
+ return ri, nil
}
// InitiateUpload returns upload ids corresponding to different protocols it supports
diff --git a/pkg/storage/utils/middleware/middleware.go b/pkg/storage/utils/middleware/middleware.go
index 7617be693f..4566007171 100644
--- a/pkg/storage/utils/middleware/middleware.go
+++ b/pkg/storage/utils/middleware/middleware.go
@@ -334,7 +334,7 @@ func (f *FS) InitiateUpload(ctx context.Context, ref *provider.Reference, upload
return res0, res1
}
-func (f *FS) Upload(ctx context.Context, req storage.UploadRequest, uploadFunc storage.UploadFinishedFunc) (provider.ResourceInfo, error) {
+func (f *FS) Upload(ctx context.Context, req storage.UploadRequest, uploadFunc storage.UploadFinishedFunc) (*provider.ResourceInfo, error) {
var (
err error
unhook UnHook
@@ -343,7 +343,7 @@ func (f *FS) Upload(ctx context.Context, req storage.UploadRequest, uploadFunc s
for _, hook := range f.hooks {
ctx, unhook, err = hook("Upload", ctx, req.Ref.GetResourceId().GetSpaceId())
if err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
if unhook != nil {
unhooks = append(unhooks, unhook)
@@ -354,7 +354,7 @@ func (f *FS) Upload(ctx context.Context, req storage.UploadRequest, uploadFunc s
for _, unhook := range unhooks {
if err := unhook(); err != nil {
- return provider.ResourceInfo{}, err
+ return &provider.ResourceInfo{}, err
}
}
diff --git a/pkg/storage/utils/templates/templates.go b/pkg/storage/utils/templates/templates.go
index bd9052773a..085ba09f28 100644
--- a/pkg/storage/utils/templates/templates.go
+++ b/pkg/storage/utils/templates/templates.go
@@ -162,7 +162,7 @@ func newSpaceData(u *userpb.User, st, n, id string) *SpaceData {
func newResourceData(i *providerv1beta1.ResourceInfo) *ResourceData {
rd := &ResourceData{
ResourceInfo: i,
- ResourceID: storagespace.FormatResourceID(*i.Id),
+ ResourceID: storagespace.FormatResourceID(i.Id),
}
return rd
}
diff --git a/pkg/storagespace/storagespace.go b/pkg/storagespace/storagespace.go
index bafc06523c..78fa52df09 100644
--- a/pkg/storagespace/storagespace.go
+++ b/pkg/storagespace/storagespace.go
@@ -74,7 +74,7 @@ func SplitStorageID(sid string) (storageID, spaceID string) {
// FormatResourceID converts a ResourceId into the string format.
// The result format will look like:
// $!
-func FormatResourceID(sid provider.ResourceId) string {
+func FormatResourceID(sid *provider.ResourceId) string {
if sid.OpaqueId == "" {
return FormatStorageID(sid.StorageId, sid.SpaceId)
}
@@ -140,15 +140,15 @@ func FormatReference(ref *provider.Reference) (string, error) {
if ref == nil || ref.ResourceId == nil || ref.ResourceId.SpaceId == "" {
return "", ErrInvalidSpaceReference
}
- ssid := FormatResourceID(*ref.ResourceId)
+ ssid := FormatResourceID(ref.ResourceId)
return path.Join(ssid, ref.Path), nil
}
// UpdateLegacyResourceID checks if the given resource id contains a correct triple and will convert legacy ids without a spaceid
// by splitting the storageid.
-func UpdateLegacyResourceID(id provider.ResourceId) provider.ResourceId {
+func UpdateLegacyResourceID(id *provider.ResourceId) *provider.ResourceId {
if storageid, spaceid := SplitStorageID(id.StorageId); storageid != "" && id.SpaceId == "" {
- return provider.ResourceId{
+ return &provider.ResourceId{
StorageId: storageid,
SpaceId: spaceid,
OpaqueId: id.OpaqueId,
diff --git a/pkg/storagespace/storagespace_test.go b/pkg/storagespace/storagespace_test.go
index 364da1be84..6bc4987c39 100644
--- a/pkg/storagespace/storagespace_test.go
+++ b/pkg/storagespace/storagespace_test.go
@@ -66,27 +66,27 @@ func TestSplitStorageID(t *testing.T) {
func TestParseID(t *testing.T) {
tests := []struct {
input string
- expected provider.ResourceId
+ expected *provider.ResourceId
expectedErr error
}{
{
"spaceid" + _idDelimiter + "opaqueid",
- provider.ResourceId{SpaceId: "spaceid", OpaqueId: "opaqueid"},
+ &provider.ResourceId{SpaceId: "spaceid", OpaqueId: "opaqueid"},
nil,
},
{
"storageid" + _storageIDDelimiter + "spaceid" + _idDelimiter + "opaqueid",
- provider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"},
+ &provider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"},
nil,
},
{
"",
- provider.ResourceId{},
+ &provider.ResourceId{},
ErrInvalidSpaceID,
},
{
"spaceid",
- provider.ResourceId{SpaceId: "spaceid"},
+ &provider.ResourceId{SpaceId: "spaceid"},
nil,
},
}
@@ -111,7 +111,7 @@ func TestParseID(t *testing.T) {
func TestFormatResourceID(t *testing.T) {
expected := "spaceid" + _idDelimiter + "opaqueid"
- wrapped := FormatResourceID(provider.ResourceId{SpaceId: "spaceid", OpaqueId: "opaqueid"})
+ wrapped := FormatResourceID(&provider.ResourceId{SpaceId: "spaceid", OpaqueId: "opaqueid"})
if wrapped != expected {
t.Errorf("wrapped id doesn't have the expected format: got %s expected %s", wrapped, expected)
@@ -313,29 +313,29 @@ func TestFormatAndParseReference(t *testing.T) {
t.Errorf("failed to parse space reference: %s error: %s", formatted, err)
}
if !(utils.ResourceIDEqual(parsed.ResourceId, tt.expected.ResourceId) && parsed.Path == tt.expected.Path) {
- t.Errorf("Formatted then parsed references don't match the original got: %v expected %v", parsed, tt.expected)
+ t.Errorf("Formatted then parsed references don't match the original got: %s expected %s", parsed.String(), tt.expected.String())
}
}
}
func TestUpdateLegacyResourceID(t *testing.T) {
tests := []struct {
- orig provider.ResourceId
- expected provider.ResourceId
+ orig *provider.ResourceId
+ expected *provider.ResourceId
}{
{
- orig: provider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"},
- expected: provider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"},
+ orig: &provider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"},
+ expected: &provider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"},
},
{
- orig: provider.ResourceId{StorageId: "storageid$spaceid", SpaceId: "", OpaqueId: "opaqueid"},
- expected: provider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"},
+ orig: &provider.ResourceId{StorageId: "storageid$spaceid", SpaceId: "", OpaqueId: "opaqueid"},
+ expected: &provider.ResourceId{StorageId: "storageid", SpaceId: "spaceid", OpaqueId: "opaqueid"},
},
}
for _, tt := range tests {
updated := UpdateLegacyResourceID(tt.orig)
- if !(utils.ResourceIDEqual(&updated, &tt.expected)) {
+ if !(utils.ResourceIDEqual(updated, tt.expected)) {
t.Errorf("Updating resourceid failed, got: %v expected %v", updated, tt.expected)
}
}
diff --git a/pkg/user/manager/demo/demo.go b/pkg/user/manager/demo/demo.go
index edadeeb970..0e6d6c5ac6 100644
--- a/pkg/user/manager/demo/demo.go
+++ b/pkg/user/manager/demo/demo.go
@@ -28,6 +28,7 @@ import (
"github.com/cs3org/reva/v2/pkg/errtypes"
"github.com/cs3org/reva/v2/pkg/user"
"github.com/cs3org/reva/v2/pkg/user/manager/registry"
+ "google.golang.org/protobuf/proto"
)
func init() {
@@ -57,11 +58,11 @@ func (m *manager) Configure(ml map[string]interface{}) error {
func (m *manager) GetUser(ctx context.Context, uid *userpb.UserId, skipFetchingGroups bool) (*userpb.User, error) {
if user, ok := m.catalog[uid.OpaqueId]; ok {
if uid.Idp == "" || user.Id.Idp == uid.Idp {
- u := *user
+ u := proto.Clone(user).(*userpb.User)
if skipFetchingGroups {
u.Groups = nil
}
- return &u, nil
+ return u, nil
}
}
return nil, errtypes.NotFound(uid.OpaqueId)
@@ -70,11 +71,11 @@ func (m *manager) GetUser(ctx context.Context, uid *userpb.UserId, skipFetchingG
func (m *manager) GetUserByClaim(ctx context.Context, claim, value string, skipFetchingGroups bool) (*userpb.User, error) {
for _, u := range m.catalog {
if userClaim, err := extractClaim(u, claim); err == nil && value == userClaim {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- return &user, nil
+ return user, nil
}
}
return nil, errtypes.NotFound(value)
@@ -105,11 +106,11 @@ func (m *manager) FindUsers(ctx context.Context, query string, skipFetchingGroup
users := []*userpb.User{}
for _, u := range m.catalog {
if userContains(u, query) {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- users = append(users, &user)
+ users = append(users, user)
}
}
return users, nil
diff --git a/pkg/user/manager/demo/demo_test.go b/pkg/user/manager/demo/demo_test.go
index c92a03550b..de2e9bdf25 100644
--- a/pkg/user/manager/demo/demo_test.go
+++ b/pkg/user/manager/demo/demo_test.go
@@ -25,6 +25,9 @@ import (
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
"github.com/cs3org/reva/v2/pkg/errtypes"
+ "github.com/google/go-cmp/cmp"
+ "google.golang.org/protobuf/proto"
+ "google.golang.org/protobuf/testing/protocmp"
)
var ctx = context.Background()
@@ -58,7 +61,7 @@ func TestUserManager(t *testing.T) {
// positive test GetUserByClaim by uid
resUserByUID, _ := manager.GetUserByClaim(ctx, "uid", "123", false)
- if !reflect.DeepEqual(resUserByUID, userEinstein) {
+ if !proto.Equal(resUserByUID, userEinstein) {
t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByUID)
}
@@ -71,13 +74,13 @@ func TestUserManager(t *testing.T) {
// positive test GetUserByClaim by mail
resUserByEmail, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", false)
- if !reflect.DeepEqual(resUserByEmail, userEinstein) {
+ if !proto.Equal(resUserByEmail, userEinstein) {
t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByEmail)
}
// positive test GetUserByClaim by uid without groups
resUserByUIDWithoutGroups, _ := manager.GetUserByClaim(ctx, "uid", "123", true)
- if !reflect.DeepEqual(resUserByUIDWithoutGroups, userEinsteinWithoutGroups) {
+ if !proto.Equal(resUserByUIDWithoutGroups, userEinsteinWithoutGroups) {
t.Fatalf("user differs: expected=%v got=%v", userEinsteinWithoutGroups, resUserByUIDWithoutGroups)
}
@@ -96,7 +99,7 @@ func TestUserManager(t *testing.T) {
// test FindUsers
resUser, _ := manager.FindUsers(ctx, "einstein", false)
- if !reflect.DeepEqual(resUser, []*userpb.User{userEinstein}) {
+ if !cmp.Equal(resUser, []*userpb.User{userEinstein}, protocmp.Transform()) {
t.Fatalf("user differs: expected=%v got=%v", []*userpb.User{userEinstein}, resUser)
}
diff --git a/pkg/user/manager/json/json.go b/pkg/user/manager/json/json.go
index d4c9f8d2d3..2adbbd5812 100644
--- a/pkg/user/manager/json/json.go
+++ b/pkg/user/manager/json/json.go
@@ -29,6 +29,7 @@ import (
"github.com/cs3org/reva/v2/pkg/user/manager/registry"
"github.com/mitchellh/mapstructure"
"github.com/pkg/errors"
+ "google.golang.org/protobuf/proto"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
"github.com/cs3org/reva/v2/pkg/errtypes"
@@ -97,11 +98,11 @@ func (m *manager) Configure(ml map[string]interface{}) error {
func (m *manager) GetUser(ctx context.Context, uid *userpb.UserId, skipFetchingGroups bool) (*userpb.User, error) {
for _, u := range m.users {
if (u.Id.GetOpaqueId() == uid.OpaqueId || u.Username == uid.OpaqueId) && (uid.Idp == "" || uid.Idp == u.Id.GetIdp()) {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- return &user, nil
+ return user, nil
}
}
return nil, errtypes.NotFound(uid.OpaqueId)
@@ -110,11 +111,11 @@ func (m *manager) GetUser(ctx context.Context, uid *userpb.UserId, skipFetchingG
func (m *manager) GetUserByClaim(ctx context.Context, claim, value string, skipFetchingGroups bool) (*userpb.User, error) {
for _, u := range m.users {
if userClaim, err := extractClaim(u, claim); err == nil && value == userClaim {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- return &user, nil
+ return user, nil
}
}
return nil, errtypes.NotFound(value)
@@ -147,11 +148,11 @@ func (m *manager) FindUsers(ctx context.Context, query string, skipFetchingGroup
users := []*userpb.User{}
for _, u := range m.users {
if userContains(u, query) {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- users = append(users, &user)
+ users = append(users, user)
}
}
return users, nil
diff --git a/pkg/user/manager/json/json_test.go b/pkg/user/manager/json/json_test.go
index 66174630e5..b655de9166 100644
--- a/pkg/user/manager/json/json_test.go
+++ b/pkg/user/manager/json/json_test.go
@@ -26,6 +26,7 @@ import (
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
"github.com/cs3org/reva/v2/pkg/errtypes"
+ "google.golang.org/protobuf/proto"
)
var ctx = context.Background()
@@ -114,7 +115,7 @@ func TestUserManager(t *testing.T) {
// positive test GetUserByClaim by mail
resUserByEmail, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", false)
- if !reflect.DeepEqual(resUserByEmail, userEinstein) {
+ if !proto.Equal(resUserByEmail, userEinstein) {
t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByEmail)
}
@@ -127,7 +128,7 @@ func TestUserManager(t *testing.T) {
// positive test GetUserByClaim by mail without groups
resUserByEmailWithoutGroups, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", true)
- if !reflect.DeepEqual(resUserByEmailWithoutGroups, userEinsteinWithoutGroups) {
+ if !proto.Equal(resUserByEmailWithoutGroups, userEinsteinWithoutGroups) {
t.Fatalf("user differs: expected=%v got=%v", userEinsteinWithoutGroups, resUserByEmailWithoutGroups)
}
diff --git a/pkg/user/manager/nextcloud/nextcloud_test.go b/pkg/user/manager/nextcloud/nextcloud_test.go
index 13408b3105..6f32b2b4d5 100644
--- a/pkg/user/manager/nextcloud/nextcloud_test.go
+++ b/pkg/user/manager/nextcloud/nextcloud_test.go
@@ -23,6 +23,7 @@ import (
"os"
"google.golang.org/grpc/metadata"
+ "google.golang.org/protobuf/testing/protocmp"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
@@ -206,7 +207,7 @@ var _ = Describe("Nextcloud", func() {
users, err := um.FindUsers(ctx, "some-query", false)
Expect(err).ToNot(HaveOccurred())
Expect(len(users)).To(Equal(1))
- Expect(*users[0]).To(Equal(userpb.User{
+ Expect(users[0]).To(BeComparableTo(&userpb.User{
Id: &userpb.UserId{
Idp: "some-idp",
OpaqueId: "some-opaque-user-id",
@@ -220,7 +221,7 @@ var _ = Describe("Nextcloud", func() {
Opaque: nil,
UidNumber: 0,
GidNumber: 0,
- }))
+ }, protocmp.Transform()))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/user/FindUsers some-query`)
})
})
diff --git a/tests/integration/grpc/storageprovider_test.go b/tests/integration/grpc/storageprovider_test.go
index aaeb79548d..9f2082b656 100644
--- a/tests/integration/grpc/storageprovider_test.go
+++ b/tests/integration/grpc/storageprovider_test.go
@@ -85,7 +85,7 @@ var _ = Describe("storage providers", func() {
ctx context.Context
providerClient storagep.ProviderAPIClient
- spacesClient storagep.SpaceAPIClient
+ spacesClient storagep.SpacesAPIClient
user = &userpb.User{
Id: &userpb.UserId{
Idp: "0.0.0.0:19000",
@@ -121,6 +121,7 @@ var _ = Describe("storage providers", func() {
revads, err = startRevads(dependencies, variables)
Expect(err).ToNot(HaveOccurred())
providerClient, err = pool.GetStorageProviderServiceClient(revads["storage"].GrpcAddress)
+ Expect(err).ToNot(HaveOccurred())
spacesClient, err = pool.GetSpacesProviderServiceClient(revads["storage"].GrpcAddress)
Expect(err).ToNot(HaveOccurred())
})