diff --git a/go.mod b/go.mod index 31ab2724154..6750eaaa18b 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/coreos/go-oidc v2.2.1+incompatible github.com/coreos/go-oidc/v3 v3.4.0 github.com/cs3org/go-cs3apis v0.0.0-20221012090518-ef2996678965 - github.com/cs3org/reva/v2 v2.13.2 + github.com/cs3org/reva/v2 v2.13.3-0.20230510083816-98d8707dea33 github.com/disintegration/imaging v1.6.2 github.com/dutchcoders/go-clamd v0.0.0-20170520113014-b970184f4d9e github.com/egirna/icap-client v0.1.1 diff --git a/go.sum b/go.sum index f06f635c977..24dbd7fd998 100644 --- a/go.sum +++ b/go.sum @@ -627,8 +627,8 @@ github.com/crewjam/httperr v0.2.0 h1:b2BfXR8U3AlIHwNeFFvZ+BV1LFvKLlzMjzaTnZMybNo github.com/crewjam/httperr v0.2.0/go.mod h1:Jlz+Sg/XqBQhyMjdDiC+GNNRzZTD7x39Gu3pglZ5oH4= github.com/crewjam/saml v0.4.13 h1:TYHggH/hwP7eArqiXSJUvtOPNzQDyQ7vwmwEqlFWhMc= github.com/crewjam/saml v0.4.13/go.mod h1:igEejV+fihTIlHXYP8zOec3V5A8y3lws5bQBFsTm4gA= -github.com/cs3org/reva/v2 v2.13.2 h1:M8UcHUMyYx8tbPyf68JgjxVpbMtqC5a6//BaBa5pEMY= -github.com/cs3org/reva/v2 v2.13.2/go.mod h1:ZhUAORNpfKdMXO9LWcQta+DM77ArnqNnEB+b/Zgdmmk= +github.com/cs3org/reva/v2 v2.13.3-0.20230510083816-98d8707dea33 h1:y6xBTPOADX3jVX1faEwKsFD0PjSCSxDAf2jJaFYLAao= +github.com/cs3org/reva/v2 v2.13.3-0.20230510083816-98d8707dea33/go.mod h1:ZhUAORNpfKdMXO9LWcQta+DM77ArnqNnEB+b/Zgdmmk= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8/go.mod h1:4abs/jPXcmJzYoYGF91JF9Uq9s/KL5n1jvFDix8KcqY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= diff --git a/vendor/github.com/cs3org/reva/v2/internal/grpc/services/gateway/ocmshareprovider.go b/vendor/github.com/cs3org/reva/v2/internal/grpc/services/gateway/ocmshareprovider.go index f635621f5ea..5db6b0b4b9d 100644 --- a/vendor/github.com/cs3org/reva/v2/internal/grpc/services/gateway/ocmshareprovider.go +++ b/vendor/github.com/cs3org/reva/v2/internal/grpc/services/gateway/ocmshareprovider.go @@ -373,9 +373,10 @@ func (s *svc) UpdateReceivedOCMShare(ctx context.Context, req *ocm.UpdateReceive Status: createRefStatus, }, err case ocm.ShareState_SHARE_STATE_REJECTED: - s.removeReference(ctx, req.GetShare().GetShare().ResourceId) // error is logged inside removeReference - // FIXME we are ignoring an error from removeReference here - return res, nil + return &ocm.UpdateReceivedOCMShareResponse{ + Status: status.NewUnimplemented(ctx, err, "ocm share rejection not supported at the moment"), + }, nil + } case "mount_point": // TODO(labkode): implementing updating mount point diff --git a/vendor/github.com/cs3org/reva/v2/internal/grpc/services/gateway/usershareprovider.go b/vendor/github.com/cs3org/reva/v2/internal/grpc/services/gateway/usershareprovider.go index 16ecab09a8c..81f3ffbe844 100644 --- a/vendor/github.com/cs3org/reva/v2/internal/grpc/services/gateway/usershareprovider.go +++ b/vendor/github.com/cs3org/reva/v2/internal/grpc/services/gateway/usershareprovider.go @@ -20,7 +20,6 @@ package gateway import ( "context" - "path" rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" collaboration "github.com/cs3org/go-cs3apis/cs3/sharing/collaboration/v1beta1" @@ -267,97 +266,6 @@ func (s *svc) UpdateReceivedShare(ctx context.Context, req *collaboration.Update */ } -func (s *svc) removeReference(ctx context.Context, resourceID *provider.ResourceId) *rpc.Status { - log := appctx.GetLogger(ctx) - - idReference := &provider.Reference{ResourceId: resourceID} - storageProvider, _, err := s.find(ctx, idReference) - if err != nil { - appctx.GetLogger(ctx). - Err(err). - Interface("reference", idReference). - Msg("removeReference: failed to get storage provider") - if _, ok := err.(errtypes.IsNotFound); ok { - return status.NewNotFound(ctx, "storage provider not found") - } - return status.NewInternal(ctx, "error finding storage provider") - } - - statRes, err := storageProvider.Stat(ctx, &provider.StatRequest{Ref: idReference}) - if err != nil { - log.Error().Err(err).Interface("reference", idReference).Msg("removeReference: error calling Stat") - return status.NewInternal(ctx, "gateway: error calling Stat for the share resource id: "+resourceID.String()) - } - - // FIXME how can we delete a reference if the original resource was deleted? - if statRes.Status.Code != rpc.Code_CODE_OK { - log.Error().Interface("status", statRes.Status).Interface("reference", idReference).Msg("removeReference: error calling Stat") - return status.NewInternal(ctx, "could not delete share reference") - } - - homeRes, err := s.GetHome(ctx, &provider.GetHomeRequest{}) - if err != nil { - return status.NewInternal(ctx, "could not delete share reference") - } - - sharePath := path.Join(homeRes.Path, s.c.ShareFolder, path.Base(statRes.Info.Path)) - log.Debug().Str("share_path", sharePath).Msg("remove reference of share") - - sharePathRef := &provider.Reference{Path: sharePath} - homeProvider, providerInfo, err := s.find(ctx, sharePathRef) - if err != nil { - appctx.GetLogger(ctx). - Err(err). - Interface("reference", sharePathRef). - Msg("removeReference: failed to get storage provider for share ref") - if _, ok := err.(errtypes.IsNotFound); ok { - return status.NewNotFound(ctx, "storage provider not found") - } - return status.NewInternal(ctx, "error finding storage provider") - } - - var ( - root *provider.ResourceId - mountPath string - ) - for _, space := range decodeSpaces(providerInfo) { - mountPath = decodePath(space) - root = space.Root - break // TODO can there be more than one space for a path? - } - - ref := unwrap(sharePathRef, mountPath, root) - - deleteReq := &provider.DeleteRequest{ - Opaque: &typesv1beta1.Opaque{ - Map: map[string]*typesv1beta1.OpaqueEntry{ - // This signals the storageprovider that we want to delete the share reference and not the underlying file. - "deleting_shared_resource": {}, - }, - }, - Ref: ref, - } - - deleteResp, err := homeProvider.Delete(ctx, deleteReq) - if err != nil { - return status.NewInternal(ctx, "could not delete share reference") - } - - switch deleteResp.Status.Code { - case rpc.Code_CODE_OK: - // we can continue deleting the reference - case rpc.Code_CODE_NOT_FOUND: - // This is fine, we wanted to delete it anyway - return status.NewOK(ctx) - default: - return status.NewInternal(ctx, "could not delete share reference") - } - - log.Debug().Str("share_path", sharePath).Msg("share reference successfully removed") - - return status.NewOK(ctx) -} - func (s *svc) denyGrant(ctx context.Context, id *provider.ResourceId, g *provider.Grantee, opaque *typesv1beta1.Opaque) (*rpc.Status, error) { ref := &provider.Reference{ ResourceId: id, @@ -676,11 +584,6 @@ func (s *svc) removeShare(ctx context.Context, req *collaboration.RemoveShareReq return nil, errors.Wrap(err, "gateway: error calling RemoveShare") } - // we do not want to remove the reference if it is a reshare - if utils.UserEqual(share.Owner, share.Creator) { - s.removeReference(ctx, share.ResourceId) - } - if s.c.CommitShareToStorageGrant { removeGrantStatus, err := s.removeGrant(ctx, share.ResourceId, share.Grantee, share.Permissions.Permissions, nil) if err != nil { diff --git a/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/shares.go b/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/shares.go index 41755087911..374e7b485b2 100644 --- a/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/shares.go +++ b/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/shares.go @@ -231,6 +231,13 @@ func (h *Handler) CreateShare(w http.ResponseWriter, r *http.Request) { return } + // check that this is a valid share + if statRes.Info.Id.OpaqueId == statRes.Info.Id.SpaceId && + (shareType != int(conversions.ShareTypeSpaceMembershipUser) && shareType != int(conversions.ShareTypeSpaceMembershipGroup)) { + response.WriteOCSError(w, r, http.StatusBadRequest, "Can not share space root", nil) + return + } + // check user has share permissions if !conversions.RoleFromResourcePermissions(statRes.Info.PermissionSet, false).OCSPermissions().Contain(conversions.PermissionShare) { response.WriteOCSError(w, r, http.StatusNotFound, "No share permission", nil) diff --git a/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/spaces.go b/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/spaces.go index 790ab188a55..fbdf6a15558 100644 --- a/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/spaces.go +++ b/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/spaces.go @@ -78,6 +78,11 @@ func (h *Handler) getGrantee(ctx context.Context, name string) (provider.Grantee func (h *Handler) addSpaceMember(w http.ResponseWriter, r *http.Request, info *provider.ResourceInfo, role *conversions.Role, roleVal []byte) { ctx := r.Context() + if info.Space.SpaceType == "personal" { + response.WriteOCSError(w, r, response.MetaBadRequest.StatusCode, "can not add members to personal spaces", nil) + return + } + shareWith := r.FormValue("shareWith") if shareWith == "" { response.WriteOCSError(w, r, response.MetaBadRequest.StatusCode, "missing shareWith", nil) diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/upload/upload.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/upload/upload.go index c06bc28f693..d65b3065c02 100644 --- a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/upload/upload.go +++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/upload/upload.go @@ -370,7 +370,7 @@ func (upload *Upload) cleanup(cleanNode, cleanBin, cleanInfo bool) { upload.Node = nil default: - if err := upload.lu.CopyMetadata(upload.Node.InternalPath(), p, func(attributeName string) bool { + if err := upload.lu.CopyMetadata(p, upload.Node.InternalPath(), func(attributeName string) bool { return strings.HasPrefix(attributeName, prefixes.ChecksumPrefix) || attributeName == prefixes.TypeAttr || attributeName == prefixes.BlobIDAttr || diff --git a/vendor/modules.txt b/vendor/modules.txt index b8448677cc8..3934223b52e 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -349,7 +349,7 @@ github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1 github.com/cs3org/go-cs3apis/cs3/storage/registry/v1beta1 github.com/cs3org/go-cs3apis/cs3/tx/v1beta1 github.com/cs3org/go-cs3apis/cs3/types/v1beta1 -# github.com/cs3org/reva/v2 v2.13.2 +# github.com/cs3org/reva/v2 v2.13.3-0.20230510083816-98d8707dea33 ## explicit; go 1.19 github.com/cs3org/reva/v2/cmd/revad/internal/grace github.com/cs3org/reva/v2/cmd/revad/runtime