diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request.go b/internal/auth/repository/eventsourcing/eventstore/auth_request.go index 0ac5e6c4c..545e4222f 100644 --- a/internal/auth/repository/eventsourcing/eventstore/auth_request.go +++ b/internal/auth/repository/eventsourcing/eventstore/auth_request.go @@ -215,7 +215,7 @@ func (repo *AuthRequestRepo) CheckExternalUserLogin(ctx context.Context, authReq if err != nil { return err } - err = repo.checkExternalUserLogin(request, externalUser.IDPConfigID, externalUser.ExternalUserID) + err = repo.checkExternalUserLogin(ctx, request, externalUser.IDPConfigID, externalUser.ExternalUserID) if errors.IsNotFound(err) { if err := repo.setLinkingUser(ctx, request, externalUser); err != nil { return err @@ -578,7 +578,7 @@ func (repo *AuthRequestRepo) checkSelectedExternalIDP(request *domain.AuthReques return errors.ThrowNotFound(nil, "LOGIN-Nsm8r", "Errors.User.ExternalIDP.NotAllowed") } -func (repo *AuthRequestRepo) checkExternalUserLogin(request *domain.AuthRequest, idpConfigID, externalUserID string) (err error) { +func (repo *AuthRequestRepo) checkExternalUserLogin(ctx context.Context, request *domain.AuthRequest, idpConfigID, externalUserID string) (err error) { externalIDP := new(user_view_model.ExternalIDPView) if request.RequestedOrgID != "" { externalIDP, err = repo.View.ExternalIDPByExternalUserIDAndIDPConfigIDAndResourceOwner(externalUserID, idpConfigID, request.RequestedOrgID) @@ -588,7 +588,11 @@ func (repo *AuthRequestRepo) checkExternalUserLogin(request *domain.AuthRequest, if err != nil { return err } - request.SetUserInfo(externalIDP.UserID, "", "", "", "", externalIDP.ResourceOwner) + user, err := activeUserByID(ctx, repo.UserViewProvider, repo.UserEventProvider, repo.OrgViewProvider, repo.LockoutPolicyViewProvider, externalIDP.UserID) + if err != nil { + return err + } + request.SetUserInfo(user.ID, user.UserName, user.PreferredLoginName, user.DisplayName, user.AvatarKey, user.ResourceOwner) return nil } diff --git a/internal/command/user_human_externalidp_model.go b/internal/command/user_human_externalidp_model.go index 2cd7845d0..ac1083218 100644 --- a/internal/command/user_human_externalidp_model.go +++ b/internal/command/user_human_externalidp_model.go @@ -27,6 +27,30 @@ func NewHumanExternalIDPWriteModel(userID, idpConfigID, externalUserID, resource } } +func (wm *HumanExternalIDPWriteModel) AppendEvents(events ...eventstore.EventReader) { + for _, event := range events { + switch e := event.(type) { + case *user.HumanExternalIDPAddedEvent: + if e.IDPConfigID != wm.IDPConfigID && e.ExternalUserID != wm.ExternalUserID { + continue + } + wm.WriteModel.AppendEvents(e) + case *user.HumanExternalIDPRemovedEvent: + if e.IDPConfigID != wm.IDPConfigID && e.ExternalUserID != wm.ExternalUserID { + continue + } + wm.WriteModel.AppendEvents(e) + case *user.HumanExternalIDPCascadeRemovedEvent: + if e.IDPConfigID != wm.IDPConfigID && e.ExternalUserID != wm.ExternalUserID { + continue + } + wm.WriteModel.AppendEvents(e) + case *user.UserRemovedEvent: + wm.WriteModel.AppendEvents(e) + } + } +} + func (wm *HumanExternalIDPWriteModel) Reduce() error { for _, event := range wm.Events { switch e := event.(type) { diff --git a/internal/static/i18n/de.yaml b/internal/static/i18n/de.yaml index 2f6e6645d..fe17a53c9 100644 --- a/internal/static/i18n/de.yaml +++ b/internal/static/i18n/de.yaml @@ -92,6 +92,7 @@ Errors: NotAllowed: Externer IDP ist auf dieser Organisation nicht erlaubt. MinimumExternalIDPNeeded: Mindestens ein IDP muss hinzugefügt werden. AlreadyExists: External IDP ist bereits vergeben + NotFound: Externe IDP nicht gefunden MFA: OTP: AlreadyReady: Multifaktor OTP (OneTimePassword) ist bereits eingerichtet diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index 738d2e38a..d41a5683f 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -92,6 +92,7 @@ Errors: NotAllowed: External IDP not allowed on this organisation MinimumExternalIDPNeeded: At least one IDP must be added AlreadyExists: External IDP already taken + NotFound: External IDP not found MFA: OTP: AlreadyReady: Multifactor OTP (OneTimePassword) is already set up