2020-05-18 10:06:36 +00:00
|
|
|
package model
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
2022-04-26 23:01:45 +00:00
|
|
|
"github.com/zitadel/logging"
|
2020-05-18 10:06:36 +00:00
|
|
|
|
2022-04-26 23:01:45 +00:00
|
|
|
"github.com/zitadel/zitadel/internal/domain"
|
|
|
|
"github.com/zitadel/zitadel/internal/eventstore"
|
|
|
|
"github.com/zitadel/zitadel/internal/repository/user"
|
|
|
|
"github.com/zitadel/zitadel/internal/user/model"
|
|
|
|
es_model "github.com/zitadel/zitadel/internal/user/repository/eventsourcing/model"
|
2023-12-08 14:30:55 +00:00
|
|
|
"github.com/zitadel/zitadel/internal/zerrors"
|
2020-05-18 10:06:36 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
UserSessionKeyUserAgentID = "user_agent_id"
|
|
|
|
UserSessionKeyUserID = "user_id"
|
|
|
|
UserSessionKeyState = "state"
|
|
|
|
UserSessionKeyResourceOwner = "resource_owner"
|
2022-04-19 06:26:12 +00:00
|
|
|
UserSessionKeyInstanceID = "instance_id"
|
2022-11-30 16:01:17 +00:00
|
|
|
UserSessionKeyOwnerRemoved = "owner_removed"
|
2020-05-18 10:06:36 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type UserSessionView struct {
|
2020-11-04 10:26:10 +00:00
|
|
|
CreationDate time.Time `json:"-" gorm:"column:creation_date"`
|
|
|
|
ChangeDate time.Time `json:"-" gorm:"column:change_date"`
|
|
|
|
ResourceOwner string `json:"-" gorm:"column:resource_owner"`
|
|
|
|
State int32 `json:"-" gorm:"column:state"`
|
|
|
|
UserAgentID string `json:"userAgentID" gorm:"column:user_agent_id;primary_key"`
|
|
|
|
UserID string `json:"userID" gorm:"column:user_id;primary_key"`
|
|
|
|
UserName string `json:"-" gorm:"column:user_name"`
|
|
|
|
LoginName string `json:"-" gorm:"column:login_name"`
|
|
|
|
DisplayName string `json:"-" gorm:"column:user_display_name"`
|
feat: label policy (#1708)
* feat: label policy proto extension
* feat: label policy and activate event
* feat: label policy asset events
* feat: label policy asset commands
* feat: add storage key
* feat: storage key validation
* feat: label policy asset tests
* feat: label policy query side
* feat: avatar
* feat: avatar event
* feat: human avatar
* feat: avatar read side
* feat: font on iam label policy
* feat: label policy font
* feat: possiblity to create bucket on put file
* uplaoder
* login policy logo
* set bucket prefix
* feat: avatar upload
* feat: avatar upload
* feat: use assets on command side
* feat: fix human avatar removed event
* feat: remove human avatar
* feat: mock asset storage
* feat: remove human avatar
* fix(operator): add configuration of asset storage to zitadel operator
* feat(console): private labeling policy (#1697)
* private labeling component, routing, preview
* font, colors, upload, i18n
* show logo
* fix: uniqueness (#1710)
* fix: uniqueconstraint to lower
* feat: change org
* feat: org change test
* feat: change org
* fix: tests
* fix: handle domain claims correctly
* feat: update org
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
* fix: handle domain claimed event correctly for service users (#1711)
* fix: handle domain claimed event correctly on user view
* fix: ignore domain claimed events for email notifications
* fix: change org
* handle org changed in read models correctly
* fix: change org in user grant handler
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
* fix: correct value (#1695)
* docs(api): correct link (#1712)
* upload service
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
Co-authored-by: Florian Forster <florian@caos.ch>
* feat: fix tests,
* feat: remove assets from label policy
* fix npm, set environment
* lint ts
* remove stylelinting
* fix(operator): add mapping for console with changed unit tests
* fix(operator): add secrets as env variables to pod
* feat: remove human avatar
* fix(operator): add secrets as env variables to pod
* feat: map label policy
* feat: labelpolicy, admin, mgmt, adv settings (#1715)
* fetch label policy, mgmt, admin service
* feat: advanced beh, links, add, update
* lint ts
* feat: watermark
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: custom css
* css
* css
* css
* css
* css
* getobject
* feat: dynamic handler
* feat: varibale css
* content info
* css overwrite
* feat: variablen css
* feat: generate css file
* feat: dark mode
* feat: dark mode
* fix logo css
* feat: upload logos
* dark mode with cookie
* feat: handle images in login
* avatar css and begin font
* feat: avatar
* feat: user avatar
* caching of static assets in login
* add avatar.js to main.html
* feat: header dont show logo if no url
* feat: label policy colors
* feat: mock asset storage
* feat: mock asset storage
* feat: fix tests
* feat: user avatar
* feat: header logo
* avatar
* avatar
* make it compatible with go 1.15
* feat: remove unused logos
* fix handler
* fix: styling error handling
* fonts
* fix: download func
* switch to mux
* fix: change upload api to assets
* fix build
* fix: download avatar
* fix: download logos
* fix: my avatar
* font
* fix: remove error msg popup possibility
* fix: docs
* fix: svalidate colors
* rem msg popup from frontend
* fix: email with private labeling
* fix: tests
* fix: email templates
* fix: change migration version
* fix: fix duplicate imports
* fix(console): assets, service url, upload, policy current and preview (#1781)
* upload endpoint, layout
* fetch current, preview, fix upload
* cleanup private labeling
* fix linting
* begin generated asset handler
* generate asset api in dockerfile
* features for label policy
* features for label policy
* features
* flag for asset generator
* change asset generator flag
* fix label policy view in grpc
* fix: layout, activate policy (#1786)
* theme switcher up on top
* change layout
* activate policy
* feat(console): label policy back color, layout (#1788)
* theme switcher up on top
* change layout
* activate policy
* fix overwrite value fc
* reset policy, reset service
* autosave policy, preview desc, layout impv
* layout, i18n
* background colors, inject material styles
* load images
* clean, lint
* fix layout
* set custom hex
* fix content size conversion
* remove font format in generated css
* fix features for assets
* fix(console): label policy colors, image downloads, preview (#1804)
* load images
* colors, images binding
* lint
* refresh emitter
* lint
* propagate font colors
* upload error handling
* label policy feature check
* add blob in csp for console
* log
* fix: feature edits for label policy, refresh state on upload (#1807)
* show error on load image, stop spinner
* fix merge
* fix migration versions
* fix assets
* fix csp
* fix background color
* scss
* fix build
* lint scss
* fix statik for console
* fix features check for label policy
* cleanup
* lint
* public links
* fix notifications
* public links
* feat: merge main
* feat: fix translation files
* fix migration
* set api domain
* fix logo in email
* font face in email
* font face in email
* validate assets on upload
* cleanup
* add missing translations
* add missing translations
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
Co-authored-by: Stefan Benz <stefan@caos.ch>
Co-authored-by: Max Peintner <max@caos.ch>
Co-authored-by: Florian Forster <florian@caos.ch>
2021-06-04 12:53:51 +00:00
|
|
|
AvatarKey string `json:"-" gorm:"column:avatar_key"`
|
2020-11-04 10:26:10 +00:00
|
|
|
SelectedIDPConfigID string `json:"selectedIDPConfigID" gorm:"column:selected_idp_config_id"`
|
|
|
|
PasswordVerification time.Time `json:"-" gorm:"column:password_verification"`
|
2020-12-02 16:00:04 +00:00
|
|
|
PasswordlessVerification time.Time `json:"-" gorm:"column:passwordless_verification"`
|
2020-11-04 10:26:10 +00:00
|
|
|
ExternalLoginVerification time.Time `json:"-" gorm:"column:external_login_verification"`
|
|
|
|
SecondFactorVerification time.Time `json:"-" gorm:"column:second_factor_verification"`
|
|
|
|
SecondFactorVerificationType int32 `json:"-" gorm:"column:second_factor_verification_type"`
|
|
|
|
MultiFactorVerification time.Time `json:"-" gorm:"column:multi_factor_verification"`
|
|
|
|
MultiFactorVerificationType int32 `json:"-" gorm:"column:multi_factor_verification_type"`
|
|
|
|
Sequence uint64 `json:"-" gorm:"column:sequence"`
|
2022-04-19 06:26:12 +00:00
|
|
|
InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
|
2020-05-18 10:06:36 +00:00
|
|
|
}
|
|
|
|
|
2023-10-19 10:19:10 +00:00
|
|
|
func UserSessionFromEvent(event eventstore.Event) (*UserSessionView, error) {
|
2020-05-18 10:06:36 +00:00
|
|
|
v := new(UserSessionView)
|
2023-10-19 10:19:10 +00:00
|
|
|
if err := event.Unmarshal(v); err != nil {
|
2020-05-18 10:06:36 +00:00
|
|
|
logging.Log("EVEN-lso9e").WithError(err).Error("could not unmarshal event data")
|
2023-12-08 14:30:55 +00:00
|
|
|
return nil, zerrors.ThrowInternal(nil, "MODEL-sd325", "could not unmarshal data")
|
2020-05-18 10:06:36 +00:00
|
|
|
}
|
|
|
|
return v, nil
|
|
|
|
}
|
|
|
|
|
2022-05-30 11:27:52 +00:00
|
|
|
func UserSessionToModel(userSession *UserSessionView) *model.UserSessionView {
|
2020-05-18 10:06:36 +00:00
|
|
|
return &model.UserSessionView{
|
2020-11-04 10:26:10 +00:00
|
|
|
ChangeDate: userSession.ChangeDate,
|
|
|
|
CreationDate: userSession.CreationDate,
|
|
|
|
ResourceOwner: userSession.ResourceOwner,
|
2022-03-31 09:36:26 +00:00
|
|
|
State: domain.UserSessionState(userSession.State),
|
2020-11-04 10:26:10 +00:00
|
|
|
UserAgentID: userSession.UserAgentID,
|
|
|
|
UserID: userSession.UserID,
|
|
|
|
UserName: userSession.UserName,
|
|
|
|
LoginName: userSession.LoginName,
|
|
|
|
DisplayName: userSession.DisplayName,
|
feat: label policy (#1708)
* feat: label policy proto extension
* feat: label policy and activate event
* feat: label policy asset events
* feat: label policy asset commands
* feat: add storage key
* feat: storage key validation
* feat: label policy asset tests
* feat: label policy query side
* feat: avatar
* feat: avatar event
* feat: human avatar
* feat: avatar read side
* feat: font on iam label policy
* feat: label policy font
* feat: possiblity to create bucket on put file
* uplaoder
* login policy logo
* set bucket prefix
* feat: avatar upload
* feat: avatar upload
* feat: use assets on command side
* feat: fix human avatar removed event
* feat: remove human avatar
* feat: mock asset storage
* feat: remove human avatar
* fix(operator): add configuration of asset storage to zitadel operator
* feat(console): private labeling policy (#1697)
* private labeling component, routing, preview
* font, colors, upload, i18n
* show logo
* fix: uniqueness (#1710)
* fix: uniqueconstraint to lower
* feat: change org
* feat: org change test
* feat: change org
* fix: tests
* fix: handle domain claims correctly
* feat: update org
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
* fix: handle domain claimed event correctly for service users (#1711)
* fix: handle domain claimed event correctly on user view
* fix: ignore domain claimed events for email notifications
* fix: change org
* handle org changed in read models correctly
* fix: change org in user grant handler
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
* fix: correct value (#1695)
* docs(api): correct link (#1712)
* upload service
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
Co-authored-by: Florian Forster <florian@caos.ch>
* feat: fix tests,
* feat: remove assets from label policy
* fix npm, set environment
* lint ts
* remove stylelinting
* fix(operator): add mapping for console with changed unit tests
* fix(operator): add secrets as env variables to pod
* feat: remove human avatar
* fix(operator): add secrets as env variables to pod
* feat: map label policy
* feat: labelpolicy, admin, mgmt, adv settings (#1715)
* fetch label policy, mgmt, admin service
* feat: advanced beh, links, add, update
* lint ts
* feat: watermark
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: remove human avatar
* feat: custom css
* css
* css
* css
* css
* css
* getobject
* feat: dynamic handler
* feat: varibale css
* content info
* css overwrite
* feat: variablen css
* feat: generate css file
* feat: dark mode
* feat: dark mode
* fix logo css
* feat: upload logos
* dark mode with cookie
* feat: handle images in login
* avatar css and begin font
* feat: avatar
* feat: user avatar
* caching of static assets in login
* add avatar.js to main.html
* feat: header dont show logo if no url
* feat: label policy colors
* feat: mock asset storage
* feat: mock asset storage
* feat: fix tests
* feat: user avatar
* feat: header logo
* avatar
* avatar
* make it compatible with go 1.15
* feat: remove unused logos
* fix handler
* fix: styling error handling
* fonts
* fix: download func
* switch to mux
* fix: change upload api to assets
* fix build
* fix: download avatar
* fix: download logos
* fix: my avatar
* font
* fix: remove error msg popup possibility
* fix: docs
* fix: svalidate colors
* rem msg popup from frontend
* fix: email with private labeling
* fix: tests
* fix: email templates
* fix: change migration version
* fix: fix duplicate imports
* fix(console): assets, service url, upload, policy current and preview (#1781)
* upload endpoint, layout
* fetch current, preview, fix upload
* cleanup private labeling
* fix linting
* begin generated asset handler
* generate asset api in dockerfile
* features for label policy
* features for label policy
* features
* flag for asset generator
* change asset generator flag
* fix label policy view in grpc
* fix: layout, activate policy (#1786)
* theme switcher up on top
* change layout
* activate policy
* feat(console): label policy back color, layout (#1788)
* theme switcher up on top
* change layout
* activate policy
* fix overwrite value fc
* reset policy, reset service
* autosave policy, preview desc, layout impv
* layout, i18n
* background colors, inject material styles
* load images
* clean, lint
* fix layout
* set custom hex
* fix content size conversion
* remove font format in generated css
* fix features for assets
* fix(console): label policy colors, image downloads, preview (#1804)
* load images
* colors, images binding
* lint
* refresh emitter
* lint
* propagate font colors
* upload error handling
* label policy feature check
* add blob in csp for console
* log
* fix: feature edits for label policy, refresh state on upload (#1807)
* show error on load image, stop spinner
* fix merge
* fix migration versions
* fix assets
* fix csp
* fix background color
* scss
* fix build
* lint scss
* fix statik for console
* fix features check for label policy
* cleanup
* lint
* public links
* fix notifications
* public links
* feat: merge main
* feat: fix translation files
* fix migration
* set api domain
* fix logo in email
* font face in email
* font face in email
* validate assets on upload
* cleanup
* add missing translations
* add missing translations
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
Co-authored-by: Stefan Benz <stefan@caos.ch>
Co-authored-by: Max Peintner <max@caos.ch>
Co-authored-by: Florian Forster <florian@caos.ch>
2021-06-04 12:53:51 +00:00
|
|
|
AvatarKey: userSession.AvatarKey,
|
2020-11-04 10:26:10 +00:00
|
|
|
SelectedIDPConfigID: userSession.SelectedIDPConfigID,
|
|
|
|
PasswordVerification: userSession.PasswordVerification,
|
2020-12-02 16:00:04 +00:00
|
|
|
PasswordlessVerification: userSession.PasswordlessVerification,
|
2020-11-04 10:26:10 +00:00
|
|
|
ExternalLoginVerification: userSession.ExternalLoginVerification,
|
|
|
|
SecondFactorVerification: userSession.SecondFactorVerification,
|
2022-03-31 09:36:26 +00:00
|
|
|
SecondFactorVerificationType: domain.MFAType(userSession.SecondFactorVerificationType),
|
2020-11-04 10:26:10 +00:00
|
|
|
MultiFactorVerification: userSession.MultiFactorVerification,
|
2022-03-31 09:36:26 +00:00
|
|
|
MultiFactorVerificationType: domain.MFAType(userSession.MultiFactorVerificationType),
|
2020-11-04 10:26:10 +00:00
|
|
|
Sequence: userSession.Sequence,
|
2020-05-18 10:06:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-05-30 11:27:52 +00:00
|
|
|
func UserSessionsToModel(userSessions []*UserSessionView) []*model.UserSessionView {
|
2020-05-18 10:06:36 +00:00
|
|
|
result := make([]*model.UserSessionView, len(userSessions))
|
|
|
|
for i, s := range userSessions {
|
2022-05-30 11:27:52 +00:00
|
|
|
result[i] = UserSessionToModel(s)
|
2020-05-18 10:06:36 +00:00
|
|
|
}
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
|
2023-10-19 10:19:10 +00:00
|
|
|
func (v *UserSessionView) AppendEvent(event eventstore.Event) error {
|
|
|
|
v.Sequence = event.Sequence()
|
|
|
|
v.ChangeDate = event.CreatedAt()
|
|
|
|
switch event.Type() {
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.UserV1PasswordCheckSucceededType,
|
|
|
|
user.HumanPasswordCheckSucceededType:
|
2023-10-19 10:19:10 +00:00
|
|
|
v.PasswordVerification = event.CreatedAt()
|
2022-03-31 09:36:26 +00:00
|
|
|
v.State = int32(domain.UserSessionStateActive)
|
|
|
|
case user.UserIDPLoginCheckSucceededType:
|
2020-10-02 06:02:09 +00:00
|
|
|
data := new(es_model.AuthRequest)
|
2020-12-07 11:09:10 +00:00
|
|
|
err := data.SetData(event)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2023-10-19 10:19:10 +00:00
|
|
|
v.ExternalLoginVerification = event.CreatedAt()
|
2020-10-02 06:02:09 +00:00
|
|
|
v.SelectedIDPConfigID = data.SelectedIDPConfigID
|
2022-03-31 09:36:26 +00:00
|
|
|
v.State = int32(domain.UserSessionStateActive)
|
|
|
|
case user.HumanPasswordlessTokenCheckSucceededType:
|
2023-10-19 10:19:10 +00:00
|
|
|
v.PasswordlessVerification = event.CreatedAt()
|
|
|
|
v.MultiFactorVerification = event.CreatedAt()
|
2022-03-31 09:36:26 +00:00
|
|
|
v.MultiFactorVerificationType = int32(domain.MFATypeU2FUserVerification)
|
|
|
|
v.State = int32(domain.UserSessionStateActive)
|
|
|
|
case user.HumanPasswordlessTokenCheckFailedType,
|
|
|
|
user.HumanPasswordlessTokenRemovedType:
|
2020-12-02 16:00:04 +00:00
|
|
|
v.PasswordlessVerification = time.Time{}
|
|
|
|
v.MultiFactorVerification = time.Time{}
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.UserV1PasswordCheckFailedType,
|
|
|
|
user.HumanPasswordCheckFailedType:
|
2020-05-18 10:06:36 +00:00
|
|
|
v.PasswordVerification = time.Time{}
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.UserV1PasswordChangedType,
|
|
|
|
user.HumanPasswordChangedType:
|
2020-12-07 11:09:10 +00:00
|
|
|
data := new(es_model.PasswordChange)
|
|
|
|
err := data.SetData(event)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if v.UserAgentID != data.UserAgentID {
|
|
|
|
v.PasswordVerification = time.Time{}
|
|
|
|
}
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.HumanMFAOTPVerifiedType:
|
2020-12-07 11:09:10 +00:00
|
|
|
data := new(es_model.OTPVerified)
|
|
|
|
err := data.SetData(event)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if v.UserAgentID == data.UserAgentID {
|
2023-10-19 10:19:10 +00:00
|
|
|
v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeTOTP)
|
2020-12-07 11:09:10 +00:00
|
|
|
}
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.UserV1MFAOTPCheckSucceededType,
|
|
|
|
user.HumanMFAOTPCheckSucceededType:
|
2023-10-19 10:19:10 +00:00
|
|
|
v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeTOTP)
|
2023-08-15 12:47:05 +00:00
|
|
|
case user.HumanOTPSMSCheckSucceededType:
|
|
|
|
data := new(es_model.OTPVerified)
|
|
|
|
err := data.SetData(event)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if v.UserAgentID == data.UserAgentID {
|
2023-10-19 10:19:10 +00:00
|
|
|
v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeOTPSMS)
|
2023-08-15 12:47:05 +00:00
|
|
|
}
|
|
|
|
case user.HumanOTPEmailCheckSucceededType:
|
|
|
|
data := new(es_model.OTPVerified)
|
|
|
|
err := data.SetData(event)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if v.UserAgentID == data.UserAgentID {
|
2023-10-19 10:19:10 +00:00
|
|
|
v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeOTPEmail)
|
2023-08-15 12:47:05 +00:00
|
|
|
}
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.UserV1MFAOTPCheckFailedType,
|
|
|
|
user.UserV1MFAOTPRemovedType,
|
|
|
|
user.HumanMFAOTPCheckFailedType,
|
|
|
|
user.HumanMFAOTPRemovedType,
|
|
|
|
user.HumanU2FTokenCheckFailedType,
|
2023-08-15 12:47:05 +00:00
|
|
|
user.HumanU2FTokenRemovedType,
|
|
|
|
user.HumanOTPSMSCheckFailedType,
|
|
|
|
user.HumanOTPEmailCheckFailedType:
|
2020-11-04 10:26:10 +00:00
|
|
|
v.SecondFactorVerification = time.Time{}
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.HumanU2FTokenVerifiedType:
|
2020-12-07 11:09:10 +00:00
|
|
|
data := new(es_model.WebAuthNVerify)
|
|
|
|
err := data.SetData(event)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if v.UserAgentID == data.UserAgentID {
|
2023-10-19 10:19:10 +00:00
|
|
|
v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeU2F)
|
2020-12-07 11:09:10 +00:00
|
|
|
}
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.HumanU2FTokenCheckSucceededType:
|
2023-10-19 10:19:10 +00:00
|
|
|
v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeU2F)
|
2022-03-31 09:36:26 +00:00
|
|
|
case user.UserV1SignedOutType,
|
|
|
|
user.HumanSignedOutType,
|
|
|
|
user.UserLockedType,
|
|
|
|
user.UserDeactivatedType:
|
2020-12-17 15:22:27 +00:00
|
|
|
v.PasswordlessVerification = time.Time{}
|
2020-05-18 10:06:36 +00:00
|
|
|
v.PasswordVerification = time.Time{}
|
2020-11-04 10:26:10 +00:00
|
|
|
v.SecondFactorVerification = time.Time{}
|
2022-03-31 09:36:26 +00:00
|
|
|
v.SecondFactorVerificationType = int32(domain.MFALevelNotSetUp)
|
2020-12-17 15:22:27 +00:00
|
|
|
v.MultiFactorVerification = time.Time{}
|
2022-03-31 09:36:26 +00:00
|
|
|
v.MultiFactorVerificationType = int32(domain.MFALevelNotSetUp)
|
2020-10-15 07:37:12 +00:00
|
|
|
v.ExternalLoginVerification = time.Time{}
|
2022-03-31 09:36:26 +00:00
|
|
|
v.State = int32(domain.UserSessionStateTerminated)
|
|
|
|
case user.UserIDPLinkRemovedType, user.UserIDPLinkCascadeRemovedType:
|
2020-11-20 08:00:49 +00:00
|
|
|
v.ExternalLoginVerification = time.Time{}
|
|
|
|
v.SelectedIDPConfigID = ""
|
2022-06-03 12:37:24 +00:00
|
|
|
case user.HumanAvatarAddedType:
|
|
|
|
key, err := avatarKeyFromEvent(event)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
v.AvatarKey = key
|
|
|
|
case user.HumanAvatarRemovedType:
|
|
|
|
v.AvatarKey = ""
|
2020-05-18 10:06:36 +00:00
|
|
|
}
|
2020-12-07 11:09:10 +00:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2022-03-31 09:36:26 +00:00
|
|
|
func (v *UserSessionView) setSecondFactorVerification(verificationTime time.Time, mfaType domain.MFAType) {
|
2020-12-07 11:09:10 +00:00
|
|
|
v.SecondFactorVerification = verificationTime
|
|
|
|
v.SecondFactorVerificationType = int32(mfaType)
|
2022-03-31 09:36:26 +00:00
|
|
|
v.State = int32(domain.UserSessionStateActive)
|
2020-05-18 10:06:36 +00:00
|
|
|
}
|
2022-06-03 12:37:24 +00:00
|
|
|
|
2023-10-19 10:19:10 +00:00
|
|
|
func avatarKeyFromEvent(event eventstore.Event) (string, error) {
|
2022-06-03 12:37:24 +00:00
|
|
|
data := make(map[string]string)
|
2023-10-19 10:19:10 +00:00
|
|
|
if err := event.Unmarshal(&data); err != nil {
|
2022-06-03 12:37:24 +00:00
|
|
|
logging.Log("EVEN-Sfew2").WithError(err).Error("could not unmarshal event data")
|
2023-12-08 14:30:55 +00:00
|
|
|
return "", zerrors.ThrowInternal(err, "MODEL-SFw2q", "could not unmarshal event")
|
2022-06-03 12:37:24 +00:00
|
|
|
}
|
|
|
|
return data["storeKey"], nil
|
|
|
|
}
|
2023-07-27 12:10:19 +00:00
|
|
|
|
2023-10-19 10:19:10 +00:00
|
|
|
func (v *UserSessionView) EventTypes() []eventstore.EventType {
|
|
|
|
return []eventstore.EventType{
|
|
|
|
user.UserV1PasswordCheckSucceededType,
|
|
|
|
user.HumanPasswordCheckSucceededType,
|
|
|
|
user.UserIDPLoginCheckSucceededType,
|
|
|
|
user.HumanPasswordlessTokenCheckSucceededType,
|
|
|
|
user.HumanPasswordlessTokenCheckFailedType,
|
|
|
|
user.HumanPasswordlessTokenRemovedType,
|
|
|
|
user.UserV1PasswordCheckFailedType,
|
|
|
|
user.HumanPasswordCheckFailedType,
|
|
|
|
user.UserV1PasswordChangedType,
|
|
|
|
user.HumanPasswordChangedType,
|
|
|
|
user.HumanMFAOTPVerifiedType,
|
|
|
|
user.UserV1MFAOTPCheckSucceededType,
|
|
|
|
user.HumanMFAOTPCheckSucceededType,
|
|
|
|
user.UserV1MFAOTPCheckFailedType,
|
|
|
|
user.UserV1MFAOTPRemovedType,
|
|
|
|
user.HumanMFAOTPCheckFailedType,
|
|
|
|
user.HumanMFAOTPRemovedType,
|
|
|
|
user.HumanOTPSMSCheckSucceededType,
|
|
|
|
user.HumanOTPSMSCheckFailedType,
|
|
|
|
user.HumanOTPEmailCheckSucceededType,
|
|
|
|
user.HumanOTPEmailCheckFailedType,
|
|
|
|
user.HumanU2FTokenCheckFailedType,
|
|
|
|
user.HumanU2FTokenRemovedType,
|
|
|
|
user.HumanU2FTokenVerifiedType,
|
|
|
|
user.HumanU2FTokenCheckSucceededType,
|
|
|
|
user.UserV1SignedOutType,
|
|
|
|
user.HumanSignedOutType,
|
|
|
|
user.UserLockedType,
|
|
|
|
user.UserDeactivatedType,
|
|
|
|
user.UserIDPLinkRemovedType,
|
|
|
|
user.UserIDPLinkCascadeRemovedType,
|
|
|
|
user.HumanAvatarAddedType,
|
|
|
|
user.HumanAvatarRemovedType,
|
2023-07-27 12:10:19 +00:00
|
|
|
}
|
|
|
|
}
|