From d1bc4a9bc5327610132cecb2d5703f782a1d1c78 Mon Sep 17 00:00:00 2001 From: Silvan Date: Wed, 15 Jun 2022 18:22:48 +0200 Subject: [PATCH] fix(notify): fail if required fields are empty (#3831) --- .../eventsourcing/handler/notification.go | 35 +++++++++++++++++++ .../eventsourcing/handler/notify_user.go | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/internal/notification/repository/eventsourcing/handler/notification.go b/internal/notification/repository/eventsourcing/handler/notification.go index d33b7d1b5c..99c3505dcd 100644 --- a/internal/notification/repository/eventsourcing/handler/notification.go +++ b/internal/notification/repository/eventsourcing/handler/notification.go @@ -191,6 +191,12 @@ func (n *Notification) handleInitUserCode(event *models.Event) (err error) { return err } + if user.Sequence < event.Sequence { + if err := n.verifyLatestUser(ctx, user); err != nil { + return err + } + } + translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.InitCodeMessageType) if err != nil { return err @@ -233,6 +239,11 @@ func (n *Notification) handlePasswordCode(event *models.Event) (err error) { if err != nil { return err } + if user.Sequence < event.Sequence { + if err := n.verifyLatestUser(ctx, user); err != nil { + return err + } + } translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.PasswordResetMessageType) if err != nil { @@ -276,6 +287,11 @@ func (n *Notification) handleEmailVerificationCode(event *models.Event) (err err if err != nil { return err } + if user.Sequence < event.Sequence { + if err = n.verifyLatestUser(ctx, user); err != nil { + return err + } + } translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.VerifyEmailMessageType) if err != nil { @@ -309,6 +325,12 @@ func (n *Notification) handlePhoneVerificationCode(event *models.Event) (err err if err != nil { return err } + if user.Sequence < event.Sequence { + if err := n.verifyLatestUser(ctx, user); err != nil { + return err + } + } + translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.VerifyPhoneMessageType) if err != nil { return err @@ -582,3 +604,16 @@ func (n *Notification) origin(ctx context.Context) (string, error) { } return http_utils.BuildHTTP(domains.Domains[0].Domain, n.externalPort, n.externalSecure), nil } + +func (n *Notification) verifyLatestUser(ctx context.Context, user *model.NotifyUser) error { + events, err := n.getUserEvents(ctx, user.ID, user.InstanceID, user.Sequence) + if err != nil { + return err + } + for _, event := range events { + if err = user.AppendEvent(event); err != nil { + return err + } + } + return nil +} diff --git a/internal/notification/repository/eventsourcing/handler/notify_user.go b/internal/notification/repository/eventsourcing/handler/notify_user.go index 5174507d0e..9ea5081156 100644 --- a/internal/notification/repository/eventsourcing/handler/notify_user.go +++ b/internal/notification/repository/eventsourcing/handler/notify_user.go @@ -120,7 +120,7 @@ func (u *NotifyUser) ProcessUser(event *es_models.Event) (err error) { user.HumanRegisteredType, user.HumanAddedType, user.MachineAddedEventType: - err := notifyUser.AppendEvent(event) + err = notifyUser.AppendEvent(event) if err != nil { return err }