Initial QSfera import
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/qsfera/server/services/notifications/pkg/channels"
|
||||
"github.com/qsfera/server/services/notifications/pkg/email"
|
||||
"github.com/opencloud-eu/reva/v2/pkg/events"
|
||||
"github.com/opencloud-eu/reva/v2/pkg/utils"
|
||||
)
|
||||
|
||||
func (s eventsNotifier) handleScienceMeshInviteTokenGenerated(e events.ScienceMeshInviteTokenGenerated) {
|
||||
logger := s.logger.With().
|
||||
Str("event", "ScienceMeshInviteTokenGenerated").
|
||||
Logger()
|
||||
|
||||
gatewayClient, err := s.gatewaySelector.Next()
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("could not select next gateway client")
|
||||
return
|
||||
}
|
||||
|
||||
ctx, err := utils.GetServiceUserContextWithContext(context.Background(), gatewayClient, s.serviceAccountID, s.serviceAccountSecret)
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("Could not impersonate service user")
|
||||
return
|
||||
}
|
||||
|
||||
owner, err := utils.GetUserNoGroups(ctx, e.Sharer, gatewayClient)
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("unable to get user")
|
||||
return
|
||||
}
|
||||
|
||||
msgENV := map[string]string{
|
||||
"ShareSharer": owner.GetDisplayName(),
|
||||
"ShareSharerMail": owner.GetMail(),
|
||||
"ShareLink": e.InviteLink,
|
||||
"Token": e.Token,
|
||||
"ProviderDomain": owner.GetId().GetIdp(),
|
||||
"RecipientMail": e.RecipientMail,
|
||||
}
|
||||
|
||||
// validate the message, we only need recipient mail at the moment,
|
||||
// event that is optional when the event got triggered...
|
||||
// this means if we get a validation error, we can't send the message and skip it
|
||||
{
|
||||
validationEnv := make(map[string]any, len(msgENV))
|
||||
for k, v := range msgENV {
|
||||
validationEnv[k] = v
|
||||
}
|
||||
if errs := validate.ValidateMap(validationEnv,
|
||||
map[string]any{
|
||||
"RecipientMail": "required,email", // only recipient mail is required to send the message
|
||||
}); len(errs) > 0 {
|
||||
return // no mail, no message
|
||||
}
|
||||
}
|
||||
|
||||
emailTpl := email.ScienceMeshInviteTokenGenerated
|
||||
if e.InviteLink == "" {
|
||||
emailTpl = email.ScienceMeshInviteTokenGeneratedWithoutShareLink
|
||||
}
|
||||
|
||||
msg, err := email.RenderEmailTemplate(
|
||||
emailTpl,
|
||||
s.defaultLanguage, // fixMe: the recipient is unknown, should it be the defaultLocale?,
|
||||
s.defaultLanguage, // fixMe: the defaultLocale is not set by default, shouldn't it be?,
|
||||
s.emailTemplatePath,
|
||||
s.translationPath,
|
||||
msgENV,
|
||||
)
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("building the message has failed")
|
||||
return
|
||||
}
|
||||
|
||||
msg.Sender = owner.GetDisplayName()
|
||||
msg.Recipient = []string{e.RecipientMail}
|
||||
|
||||
s.send(ctx, []*channels.Message{msg})
|
||||
}
|
||||
Reference in New Issue
Block a user