package command import ( "context" "github.com/zitadel/zitadel/internal/api/authz" "github.com/zitadel/zitadel/internal/domain" "github.com/zitadel/zitadel/internal/eventstore" "github.com/zitadel/zitadel/internal/repository/instance" ) type InstanceSecondFactorWriteModel struct { SecondFactorWriteModel } func NewInstanceSecondFactorWriteModel(ctx context.Context, factorType domain.SecondFactorType) *InstanceSecondFactorWriteModel { return &InstanceSecondFactorWriteModel{ SecondFactorWriteModel{ WriteModel: eventstore.WriteModel{ AggregateID: authz.GetInstance(ctx).InstanceID(), ResourceOwner: authz.GetInstance(ctx).InstanceID(), }, MFAType: factorType, }, } } func (wm *InstanceSecondFactorWriteModel) AppendEvents(events ...eventstore.Event) { for _, event := range events { switch e := event.(type) { case *instance.LoginPolicySecondFactorAddedEvent: if wm.MFAType == e.MFAType { wm.WriteModel.AppendEvents(&e.SecondFactorAddedEvent) } case *instance.LoginPolicySecondFactorRemovedEvent: if wm.MFAType == e.MFAType { wm.WriteModel.AppendEvents(&e.SecondFactorRemovedEvent) } } } } func (wm *InstanceSecondFactorWriteModel) Reduce() error { return wm.SecondFactorWriteModel.Reduce() } func (wm *InstanceSecondFactorWriteModel) Query() *eventstore.SearchQueryBuilder { return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). ResourceOwner(wm.ResourceOwner). AddQuery(). AggregateTypes(instance.AggregateType). AggregateIDs(wm.WriteModel.AggregateID). EventTypes( instance.LoginPolicySecondFactorAddedEventType, instance.LoginPolicySecondFactorRemovedEventType). Builder() } type InstanceMultiFactorWriteModel struct { MultiFactorWriteModel } func NewInstanceMultiFactorWriteModel(ctx context.Context, factorType domain.MultiFactorType) *InstanceMultiFactorWriteModel { return &InstanceMultiFactorWriteModel{ MultiFactorWriteModel{ WriteModel: eventstore.WriteModel{ AggregateID: authz.GetInstance(ctx).InstanceID(), ResourceOwner: authz.GetInstance(ctx).InstanceID(), }, MFAType: factorType, }, } } func (wm *InstanceMultiFactorWriteModel) AppendEvents(events ...eventstore.Event) { for _, event := range events { switch e := event.(type) { case *instance.LoginPolicyMultiFactorAddedEvent: if wm.MFAType == e.MFAType { wm.WriteModel.AppendEvents(&e.MultiFactorAddedEvent) } case *instance.LoginPolicyMultiFactorRemovedEvent: if wm.MFAType == e.MFAType { wm.WriteModel.AppendEvents(&e.MultiFactorRemovedEvent) } } } } func (wm *InstanceMultiFactorWriteModel) Reduce() error { return wm.MultiFactorWriteModel.Reduce() } func (wm *InstanceMultiFactorWriteModel) Query() *eventstore.SearchQueryBuilder { return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). ResourceOwner(wm.ResourceOwner). AddQuery(). AggregateTypes(instance.AggregateType). AggregateIDs(wm.WriteModel.AggregateID). EventTypes( instance.LoginPolicyMultiFactorAddedEventType, instance.LoginPolicyMultiFactorRemovedEventType). Builder() }