fix: update user sessions after avatar or primary domain change (#3768)

This commit is contained in:
Livio Amstutz
2022-06-03 14:37:24 +02:00
committed by GitHub
parent 0baaaf8a05
commit da1f74fde0
6 changed files with 118 additions and 10 deletions

View File

@@ -171,6 +171,14 @@ func (v *UserSessionView) AppendEvent(event *models.Event) error {
case user.UserIDPLinkRemovedType, user.UserIDPLinkCascadeRemovedType:
v.ExternalLoginVerification = time.Time{}
v.SelectedIDPConfigID = ""
case user.HumanAvatarAddedType:
key, err := avatarKeyFromEvent(event)
if err != nil {
return err
}
v.AvatarKey = key
case user.HumanAvatarRemovedType:
v.AvatarKey = ""
}
return nil
}
@@ -180,3 +188,12 @@ func (v *UserSessionView) setSecondFactorVerification(verificationTime time.Time
v.SecondFactorVerificationType = int32(mfaType)
v.State = int32(domain.UserSessionStateActive)
}
func avatarKeyFromEvent(event *models.Event) (string, error) {
data := make(map[string]string)
if err := json.Unmarshal(event.Data, &data); err != nil {
logging.Log("EVEN-Sfew2").WithError(err).Error("could not unmarshal event data")
return "", caos_errs.ThrowInternal(err, "MODEL-SFw2q", "could not unmarshal event")
}
return data["storeKey"], nil
}

View File

@@ -73,6 +73,25 @@ func UserSessionsByAgentID(db *gorm.DB, table, agentID, instanceID string) ([]*m
return userSessions, err
}
func UserSessionsByOrgID(db *gorm.DB, table, orgID, instanceID string) ([]*model.UserSessionView, error) {
userSessions := make([]*model.UserSessionView, 0)
userAgentQuery := &usr_model.UserSessionSearchQuery{
Key: usr_model.UserSessionSearchKeyResourceOwner,
Method: domain.SearchMethodEquals,
Value: orgID,
}
instanceIDQuery := &usr_model.UserSessionSearchQuery{
Key: usr_model.UserSessionSearchKeyInstanceID,
Method: domain.SearchMethodEquals,
Value: instanceID,
}
query := repository.PrepareSearchQuery(table, model.UserSessionSearchRequest{
Queries: []*usr_model.UserSessionSearchQuery{userAgentQuery, instanceIDQuery},
})
_, err := query(db, &userSessions)
return userSessions, err
}
func ActiveUserSessions(db *gorm.DB, table string) (uint64, error) {
activeQuery := &usr_model.UserSessionSearchQuery{
Key: usr_model.UserSessionSearchKeyState,