From ef7889bba5afb2d1bec42e97bbff26378fa210ef Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Wed, 3 Nov 2021 17:09:37 +0100 Subject: [PATCH] Handle the case when owner is nil --- .../http/services/owncloud/ocdav/propfind.go | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/internal/http/services/owncloud/ocdav/propfind.go b/internal/http/services/owncloud/ocdav/propfind.go index 4dd326bf62c..646fcee3d5a 100644 --- a/internal/http/services/owncloud/ocdav/propfind.go +++ b/internal/http/services/owncloud/ocdav/propfind.go @@ -40,6 +40,7 @@ import ( "github.com/cs3org/reva/internal/http/services/owncloud/ocs/conversions" "github.com/cs3org/reva/pkg/appctx" ctxpkg "github.com/cs3org/reva/pkg/ctx" + "github.com/cs3org/reva/pkg/errtypes" rtrace "github.com/cs3org/reva/pkg/trace" "github.com/cs3org/reva/pkg/utils" "github.com/rs/zerolog" @@ -481,10 +482,12 @@ func (s *svc) mdToPropResponse(ctx context.Context, pf *propfindXML, md *provide ) sublog.Debug().Interface("role", role).Str("dav-permissions", wdp).Msg("converted PermissionSet") } + + var ownerUsername, ownerDisplayName string owner, err := s.getOwnerInfo(ctx, md.Owner) - if err != nil { - sublog.Err(err).Interface("owner", owner).Msg("error getting owner info") - return nil, err + if err == nil { + ownerUsername = owner.Username + ownerDisplayName = owner.DisplayName } propstatOK := propstatXML{ @@ -680,8 +683,8 @@ func (s *svc) mdToPropResponse(ctx context.Context, pf *propfindXML, md *provide propstatNotFound.Prop = append(propstatNotFound.Prop, s.newProp("oc:size", "")) } case "owner-id": // phoenix only - if md.Owner != nil { - propstatOK.Prop = append(propstatOK.Prop, s.newProp("oc:owner-id", owner.Username)) + if ownerUsername != "" { + propstatOK.Prop = append(propstatOK.Prop, s.newProp("oc:owner-id", ownerUsername)) } else { propstatNotFound.Prop = append(propstatNotFound.Prop, s.newProp("oc:owner-id", "")) } @@ -747,8 +750,8 @@ func (s *svc) mdToPropResponse(ctx context.Context, pf *propfindXML, md *provide propstatNotFound.Prop = append(propstatNotFound.Prop, s.newProp("oc:"+pf.Prop[i].Local, "")) } case "owner-display-name": // phoenix only - if md.Owner != nil { - propstatOK.Prop = append(propstatOK.Prop, s.newProp("oc:owner-display-name", owner.DisplayName)) + if ownerDisplayName != "" { + propstatOK.Prop = append(propstatOK.Prop, s.newProp("oc:owner-display-name", ownerDisplayName)) } else { propstatNotFound.Prop = append(propstatNotFound.Prop, s.newProp("oc:owner-display-name", "")) } @@ -905,6 +908,10 @@ func quoteEtag(etag string) string { } func (s *svc) getOwnerInfo(ctx context.Context, owner *userv1beta1.UserId) (*userv1beta1.User, error) { + if owner == nil { + return nil, errtypes.NotFound("owner is nil") + } + if isCurrentUserOwner(ctx, owner) { return ctxpkg.ContextMustGetUser(ctx), nil }