mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-10-27 08:39:12 -04:00
send email when a share is removed (backport https://github.com/owncloud/ocis/pull/10915)
This commit is contained in:
1 parent
cdc806d21c
commit
3bd17299e3
6 files changed
+106
-1
No files matched your search
@@ -84,6 +84,7 @@ func Server(cfg *config.Config) *cobra.Command {
|
||||
evs := []events.Unmarshaller{
|
||||
events.ShareCreated{},
|
||||
events.ShareExpired{},
|
||||
events.ShareRemoved{},
|
||||
events.SpaceShared{},
|
||||
events.SpaceUnshared{},
|
||||
events.SpaceMembershipExpired{},
|
||||
|
||||
@@ -23,6 +23,19 @@ var (
|
||||
CallToAction: l10n.Template(`Click here to view it: {ShareLink}`),
|
||||
}
|
||||
|
||||
ShareRemoved = MessageTemplate{
|
||||
textTemplate: _textTemplate,
|
||||
htmlTemplate: _htmlTemplate,
|
||||
// ShareRemoved email template, Subject field (resolves directly)
|
||||
Subject: l10n.Template(`{ShareSharer} unshared '{ShareFolder}' with you`),
|
||||
// ShareRemoved email template, resolves via {{ .Greeting }}
|
||||
Greeting: l10n.Template(`Hello {ShareGrantee},`),
|
||||
// ShareRemoved email template, resolves via {{ .MessageBody }}
|
||||
MessageBody: l10n.Template(`{ShareSharer} has unshared '{ShareFolder}' with you.
|
||||
|
||||
Even though this share has been revoked you still might have access through other shares and/or space memberships.`),
|
||||
}
|
||||
|
||||
ShareExpired = MessageTemplate{
|
||||
textTemplate: _textTemplate,
|
||||
htmlTemplate: _htmlTemplate,
|
||||
|
||||
@@ -130,6 +130,25 @@ func (s eventsNotifier) createGroupedMail(ctx context.Context, logger zerolog.Lo
|
||||
"ShareFolder": shareFolder,
|
||||
"ExpiredAt": te.ExpiredAt.Format("2006-01-02 15:04:05"),
|
||||
})
|
||||
case events.ShareRemoved:
|
||||
logger := logger.With().
|
||||
Str("event", "ShareRemoved").
|
||||
Str("eventId", te.ItemID.OpaqueId).
|
||||
Logger()
|
||||
|
||||
executant, shareFolder, _, err := s.prepareShareRemoved(logger, te)
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("could not prepare vars for grouped email")
|
||||
continue
|
||||
}
|
||||
|
||||
mts = append(mts, email.ShareRemoved)
|
||||
mtsVars = append(mtsVars, map[string]string{
|
||||
"ShareSharer": executant.GetDisplayName(),
|
||||
"ShareFolder": shareFolder,
|
||||
})
|
||||
default:
|
||||
logger.Error().Str("eventType", e.Type).Msg("unsupported event type for grouped email")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -129,6 +129,8 @@ EventLoop:
|
||||
s.handleShareCreated(e, evt.ID)
|
||||
case events.ShareExpired:
|
||||
s.handleShareExpired(e, evt.ID)
|
||||
case events.ShareRemoved:
|
||||
s.handleShareRemoved(e, evt.ID)
|
||||
case events.ScienceMeshInviteTokenGenerated:
|
||||
s.handleScienceMeshInviteTokenGenerated(e)
|
||||
case events.SendEmailsEvent:
|
||||
|
||||
@@ -161,3 +161,73 @@ func (s eventsNotifier) prepareShareExpired(logger zerolog.Logger, e events.Shar
|
||||
|
||||
return shareFolder, ctx, err
|
||||
}
|
||||
|
||||
func (s eventsNotifier) handleShareRemoved(e events.ShareRemoved, eventId string) {
|
||||
logger := s.logger.With().
|
||||
Str("event", "ShareRemoved").
|
||||
Str("itemid", e.ItemID.OpaqueId).
|
||||
Logger()
|
||||
|
||||
executant, shareFolder, ctx, err := s.prepareShareRemoved(logger, e)
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("could not prepare vars for email")
|
||||
return
|
||||
}
|
||||
|
||||
granteeList := s.ensureGranteeList(ctx, executant.GetId(), e.GranteeUserID, e.GranteeGroupID)
|
||||
filteredGrantees := s.filter.execute(ctx, granteeList, defaults.SettingUUIDProfileEventShareRemoved)
|
||||
|
||||
recipientsInstant, recipientsDaily, recipientsInstantWeekly := s.splitter.execute(ctx, filteredGrantees)
|
||||
recipientsInstant = append(recipientsInstant, s.userEventStore.persist(_intervalDaily, eventId, recipientsDaily)...)
|
||||
recipientsInstant = append(recipientsInstant, s.userEventStore.persist(_intervalWeekly, eventId, recipientsInstantWeekly)...)
|
||||
if recipientsInstant == nil {
|
||||
return
|
||||
}
|
||||
|
||||
sharerDisplayName := executant.GetDisplayName()
|
||||
|
||||
emails, err := s.render(ctx, email.ShareRemoved,
|
||||
"ShareGrantee",
|
||||
map[string]string{
|
||||
"ShareSharer": sharerDisplayName,
|
||||
"ShareFolder": shareFolder,
|
||||
}, recipientsInstant, sharerDisplayName)
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("could not get render the email")
|
||||
return
|
||||
}
|
||||
s.send(ctx, emails)
|
||||
}
|
||||
|
||||
func (s eventsNotifier) prepareShareRemoved(logger zerolog.Logger, e events.ShareRemoved) (executant *user.User, shareFolder string, ctx context.Context, err error) {
|
||||
gatewayClient, err := s.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("could not select next gateway client")
|
||||
return executant, shareFolder, ctx, err
|
||||
}
|
||||
|
||||
ctx, err = utils.GetServiceUserContextWithContext(context.Background(), gatewayClient, s.serviceAccountID, s.serviceAccountSecret)
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("could not get service user context")
|
||||
return executant, shareFolder, ctx, err
|
||||
}
|
||||
|
||||
resourceInfo, err := s.getResourceInfo(ctx, e.ItemID, &fieldmaskpb.FieldMask{Paths: []string{"name"}})
|
||||
if err != nil {
|
||||
logger.Error().
|
||||
Err(err).
|
||||
Msg("could not stat resource")
|
||||
return executant, shareFolder, ctx, err
|
||||
}
|
||||
shareFolder = resourceInfo.Name
|
||||
|
||||
executant, err = utils.GetUserNoGroups(ctx, e.Executant, gatewayClient)
|
||||
if err != nil {
|
||||
logger.Error().
|
||||
Err(err).
|
||||
Msg("could not get user")
|
||||
return executant, shareFolder, ctx, err
|
||||
}
|
||||
|
||||
return executant, shareFolder, ctx, err
|
||||
}
|
||||
@@ -331,7 +331,7 @@ func generateBundleProfileRequest() *settingsmsg.Bundle {
|
||||
MultiChoiceCollectionValue: &settingsmsg.MultiChoiceCollection{
|
||||
Options: []*settingsmsg.MultiChoiceCollectionOption{
|
||||
&optionInAppTrue,
|
||||
&optionMailFalseDisabled,
|
||||
&optionMailTrue,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user