diff --git a/changelog/unreleased/fix-public-link-wopi.md b/changelog/unreleased/fix-public-link-wopi.md new file mode 100644 index 00000000000..b0fe9c8bde8 --- /dev/null +++ b/changelog/unreleased/fix-public-link-wopi.md @@ -0,0 +1,8 @@ +Bugfix: Fix app provider for editor public links + +Fixed opening the app provider in public links with the editor permission. +The app provider failed to open the file in read write mode. + + +https://github.com/owncloud/ocis/issues/2803 +https://github.com/cs3org/reva/pull/2310 diff --git a/internal/grpc/services/publicstorageprovider/publicstorageprovider.go b/internal/grpc/services/publicstorageprovider/publicstorageprovider.go index 148e86eb024..0ed67785b9c 100644 --- a/internal/grpc/services/publicstorageprovider/publicstorageprovider.go +++ b/internal/grpc/services/publicstorageprovider/publicstorageprovider.go @@ -108,7 +108,25 @@ func New(m map[string]interface{}, ss *grpc.Server) (rgrpc.Service, error) { } func (s *service) SetArbitraryMetadata(ctx context.Context, req *provider.SetArbitraryMetadataRequest) (*provider.SetArbitraryMetadataResponse, error) { - return nil, gstatus.Errorf(codes.Unimplemented, "method not implemented") + tkn, relativePath, err := s.unwrap(ctx, req.Ref) + if err != nil { + return nil, err + } + + _, shareInfo, st, err := s.resolveToken(ctx, tkn) + switch { + case err != nil: + return nil, err + case st != nil: + return &provider.SetArbitraryMetadataResponse{ + Status: st, + }, nil + } + + p := path.Join("/", shareInfo.Path, relativePath) + ref := &provider.Reference{Path: p} + + return s.gateway.SetArbitraryMetadata(ctx, &provider.SetArbitraryMetadataRequest{Opaque: req.Opaque, Ref: ref, ArbitraryMetadata: req.ArbitraryMetadata}) } func (s *service) UnsetArbitraryMetadata(ctx context.Context, req *provider.UnsetArbitraryMetadataRequest) (*provider.UnsetArbitraryMetadataResponse, error) {