Fix grantee lookup for Share/Space Created event for groups

'ShareCreated' and 'SpaceCreate' events for group shares have an empty
GranteeUserID attribute. We need to lookup the GranteeGroup to get the Grantee
Name for the notification mail

Partial Fix: #4703
This commit is contained in:
Ralf Haferkamp
2022-09-28 17:15:39 +02:00
committed by Ralf Haferkamp
parent 3b95dcc545
commit f71f7c7521
+74 -23
View File
@@ -10,6 +10,7 @@ import (
"syscall"
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
groupv1beta1 "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1"
userv1beta1 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
rpcv1beta1 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
providerv1beta1 "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
@@ -85,16 +86,6 @@ func (s eventsNotifier) handleSpaceShared(e events.SpaceShared) {
return
}
granteeUserResponse, err := s.gwClient.GetUser(context.Background(), &userv1beta1.GetUserRequest{
UserId: e.GranteeUserID,
})
if err != nil || sharerUserResponse.Status.Code != rpcv1beta1.Code_CODE_OK {
s.logger.Error().
Err(err).
Str("event", "SpaceCreated").
Msg("Could not get user response from gatway client")
return
}
// Get auth context
ownerCtx := ctxpkg.ContextSetUser(context.Background(), sharerUserResponse.User)
authRes, err := s.gwClient.Authenticate(ownerCtx, &gateway.AuthenticateRequest{
@@ -165,10 +156,45 @@ func (s eventsNotifier) handleSpaceShared(e events.SpaceShared) {
Msg("could not create link to the share")
return
}
spaceGrantee := ""
switch {
// Note: We're using the 'ownerCtx' (authenticated as the share owner) here for requesting
// the Grantees of the shares. Ideally the notfication service would use some kind of service
// user for this.
case e.GranteeUserID != nil:
granteeUserResponse, err := s.gwClient.GetUser(ownerCtx, &userv1beta1.GetUserRequest{
UserId: e.GranteeUserID,
})
if err != nil || granteeUserResponse.Status.Code != rpcv1beta1.Code_CODE_OK {
s.logger.Error().
Err(err).
Str("event", "ShareCreated").
Msg("Could not get user response from gatway client")
return
}
spaceGrantee = granteeUserResponse.GetUser().DisplayName
case e.GranteeGroupID != nil:
granteeGroupResponse, err := s.gwClient.GetGroup(ownerCtx, &groupv1beta1.GetGroupRequest{
GroupId: e.GranteeGroupID,
})
if err != nil || granteeGroupResponse.Status.Code != rpcv1beta1.Code_CODE_OK {
s.logger.Error().
Err(err).
Str("event", "ShareCreated").
Msg("Could not get group response from gatway client")
return
}
spaceGrantee = granteeGroupResponse.GetGroup().DisplayName
default:
s.logger.Error().
Str("event", "ShareCreated").
Msg("Event 'ShareCreated' has no grantee")
return
}
sharerDisplayName := sharerUserResponse.GetUser().DisplayName
msg, err := email.RenderEmailTemplate("sharedSpace.email.tmpl", map[string]string{
"SpaceGrantee": granteeUserResponse.GetUser().DisplayName,
"SpaceGrantee": spaceGrantee,
"SpaceSharer": sharerDisplayName,
"SpaceName": md.GetInfo().GetSpace().Name,
"ShareLink": shareLink,
@@ -207,17 +233,6 @@ func (s eventsNotifier) handleShareCreated(e events.ShareCreated) {
return
}
granteeUserResponse, err := s.gwClient.GetUser(context.Background(), &userv1beta1.GetUserRequest{
UserId: e.GranteeUserID,
})
if err != nil || sharerUserResponse.Status.Code != rpcv1beta1.Code_CODE_OK {
s.logger.Error().
Err(err).
Str("event", "ShareCreated").
Msg("Could not get user response from gatway client")
return
}
// Get auth context
ownerCtx := ctxpkg.ContextSetUser(context.Background(), sharerUserResponse.User)
authRes, err := s.gwClient.Authenticate(ownerCtx, &gateway.AuthenticateRequest{
@@ -279,9 +294,45 @@ func (s eventsNotifier) handleShareCreated(e events.ShareCreated) {
return
}
shareGrantee := ""
switch {
// Note: We're using the 'ownerCtx' (authenticated as the share owner) here for requesting
// the Grantees of the shares. Ideally the notfication service would use some kind of service
// user for this.
case e.GranteeUserID != nil:
granteeUserResponse, err := s.gwClient.GetUser(ownerCtx, &userv1beta1.GetUserRequest{
UserId: e.GranteeUserID,
})
if err != nil || granteeUserResponse.Status.Code != rpcv1beta1.Code_CODE_OK {
s.logger.Error().
Err(err).
Str("event", "ShareCreated").
Msg("Could not get user response from gatway client")
return
}
shareGrantee = granteeUserResponse.GetUser().DisplayName
case e.GranteeGroupID != nil:
granteeGroupResponse, err := s.gwClient.GetGroup(ownerCtx, &groupv1beta1.GetGroupRequest{
GroupId: e.GranteeGroupID,
})
if err != nil || granteeGroupResponse.Status.Code != rpcv1beta1.Code_CODE_OK {
s.logger.Error().
Err(err).
Str("event", "ShareCreated").
Msg("Could not get group response from gatway client")
return
}
shareGrantee = granteeGroupResponse.GetGroup().DisplayName
default:
s.logger.Error().
Str("event", "ShareCreated").
Msg("Event 'ShareCreated' has no grantee")
return
}
sharerDisplayName := sharerUserResponse.GetUser().DisplayName
msg, err := email.RenderEmailTemplate("shareCreated.email.tmpl", map[string]string{
"ShareGrantee": granteeUserResponse.GetUser().DisplayName,
"ShareGrantee": shareGrantee,
"ShareSharer": sharerDisplayName,
"ShareFolder": md.GetInfo().Name,
"ShareLink": shareLink,