diff --git a/Makefile b/Makefile
index 81b4e223c..8e192a028 100644
--- a/Makefile
+++ b/Makefile
@@ -103,7 +103,7 @@ core_unit_test:
core_integration_setup:
go build -o zitadel main.go
./zitadel init --config internal/integration/config/zitadel.yaml --config internal/integration/config/${INTEGRATION_DB_FLAVOR}.yaml
- ./zitadel setup --masterkeyFromEnv --config internal/integration/config/zitadel.yaml --config internal/integration/config/${INTEGRATION_DB_FLAVOR}.yaml --steps internal/integration/config/zitadel.yaml --steps internal/integration/config/${INTEGRATION_DB_FLAVOR}.yaml
+ ./zitadel setup --masterkeyFromEnv --init-projections --config internal/integration/config/zitadel.yaml --config internal/integration/config/${INTEGRATION_DB_FLAVOR}.yaml --steps internal/integration/config/zitadel.yaml --steps internal/integration/config/${INTEGRATION_DB_FLAVOR}.yaml
$(RM) zitadel
.PHONY: core_integration_test
diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml
index 7caaee67c..432566205 100644
--- a/cmd/defaults.yaml
+++ b/cmd/defaults.yaml
@@ -1327,3 +1327,12 @@ InternalAuthZ:
- "user.global.read"
- "user.grant.read"
- "user.membership.read"
+
+# If a new projection is introduced it will be prefilled during the setup process (if enabled)
+# This can prevent serving outdated data after a version upgrade, but might require a longer setup / upgrade process:
+# https://zitadel.com/docs/self-hosting/manage/updating_scaling
+InitProjections:
+ Enabled: false # ZITADEL_INITPROJECTIONS_ENABLED
+ RetryFailedAfter: 100ms # ZITADEL_INITPROJECTIONS_RETRYFAILEDAFTER
+ MaxFailureCount: 2 # ZITADEL_INITPROJECTIONS_MAXFAILURECOUNT
+ BulkLimit: 1000 # ZITADEL_INITPROJECTIONS_BULKLIMIT
\ No newline at end of file
diff --git a/cmd/start/encryption_keys.go b/cmd/encryption/encryption_keys.go
similarity index 77%
rename from cmd/start/encryption_keys.go
rename to cmd/encryption/encryption_keys.go
index 42727b095..b4772e795 100644
--- a/cmd/start/encryption_keys.go
+++ b/cmd/encryption/encryption_keys.go
@@ -1,4 +1,4 @@
-package start
+package encryption
import (
"context"
@@ -22,7 +22,20 @@ var (
}
)
-type encryptionKeys struct {
+type EncryptionKeyConfig struct {
+ DomainVerification *crypto.KeyConfig
+ IDPConfig *crypto.KeyConfig
+ OIDC *crypto.KeyConfig
+ SAML *crypto.KeyConfig
+ OTP *crypto.KeyConfig
+ SMS *crypto.KeyConfig
+ SMTP *crypto.KeyConfig
+ User *crypto.KeyConfig
+ CSRFCookieKeyID string
+ UserAgentCookieKeyID string
+}
+
+type EncryptionKeys struct {
DomainVerification crypto.EncryptionAlgorithm
IDPConfig crypto.EncryptionAlgorithm
OIDC crypto.EncryptionAlgorithm
@@ -36,11 +49,11 @@ type encryptionKeys struct {
OIDCKey []byte
}
-func ensureEncryptionKeys(ctx context.Context, keyConfig *encryptionKeyConfig, keyStorage crypto.KeyStorage) (keys *encryptionKeys, err error) {
- if err := verifyDefaultKeys(ctx, keyStorage); err != nil {
+func EnsureEncryptionKeys(ctx context.Context, keyConfig *EncryptionKeyConfig, keyStorage crypto.KeyStorage) (keys *EncryptionKeys, err error) {
+ if err := VerifyDefaultKeys(ctx, keyStorage); err != nil {
return nil, err
}
- keys = new(encryptionKeys)
+ keys = new(EncryptionKeys)
keys.DomainVerification, err = crypto.NewAESCrypto(keyConfig.DomainVerification, keyStorage)
if err != nil {
return nil, err
@@ -91,7 +104,7 @@ func ensureEncryptionKeys(ctx context.Context, keyConfig *encryptionKeyConfig, k
return keys, nil
}
-func verifyDefaultKeys(ctx context.Context, keyStorage crypto.KeyStorage) (err error) {
+func VerifyDefaultKeys(ctx context.Context, keyStorage crypto.KeyStorage) (err error) {
keys := make([]*crypto.Key, 0, len(defaultKeyIDs))
for _, keyID := range defaultKeyIDs {
_, err := crypto.LoadKey(keyID, keyStorage)
diff --git a/cmd/setup/01.go b/cmd/setup/01.go
index a69c95e96..df682c9ea 100644
--- a/cmd/setup/01.go
+++ b/cmd/setup/01.go
@@ -4,6 +4,8 @@ import (
"context"
"database/sql"
_ "embed"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -19,7 +21,7 @@ type ProjectionTable struct {
dbClient *sql.DB
}
-func (mig *ProjectionTable) Execute(ctx context.Context) error {
+func (mig *ProjectionTable) Execute(ctx context.Context, _ eventstore.Event) error {
stmt := createAdminViews + createAuthViews + createProjections
_, err := mig.dbClient.ExecContext(ctx, stmt)
return err
diff --git a/cmd/setup/02.go b/cmd/setup/02.go
index 42c5968bc..4d7e85171 100644
--- a/cmd/setup/02.go
+++ b/cmd/setup/02.go
@@ -3,6 +3,8 @@ package setup
import (
"context"
"database/sql"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -26,7 +28,7 @@ type AssetTable struct {
dbClient *sql.DB
}
-func (mig *AssetTable) Execute(ctx context.Context) error {
+func (mig *AssetTable) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, createAssets)
return err
}
diff --git a/cmd/setup/03.go b/cmd/setup/03.go
index 89978497e..af2ab9c49 100644
--- a/cmd/setup/03.go
+++ b/cmd/setup/03.go
@@ -41,30 +41,19 @@ type FirstInstance struct {
domain string
}
-func (mig *FirstInstance) Execute(ctx context.Context) error {
- keyStorage, err := crypto_db.NewKeyStorage(mig.db, mig.masterKey)
+func (mig *FirstInstance) Execute(ctx context.Context, _ eventstore.Event) error {
+ keyStorage, err := mig.verifyEncryptionKeys(ctx)
if err != nil {
- return fmt.Errorf("cannot start key storage: %w", err)
- }
- if err = verifyKey(ctx, mig.userEncryptionKey, keyStorage); err != nil {
return err
}
userAlg, err := crypto.NewAESCrypto(mig.userEncryptionKey, keyStorage)
if err != nil {
return err
}
-
- if err = verifyKey(ctx, mig.smtpEncryptionKey, keyStorage); err != nil {
- return err
- }
smtpEncryption, err := crypto.NewAESCrypto(mig.smtpEncryptionKey, keyStorage)
if err != nil {
return err
}
-
- if err = verifyKey(ctx, mig.oidcEncryptionKey, keyStorage); err != nil {
- return err
- }
oidcEncryption, err := crypto.NewAESCrypto(mig.oidcEncryptionKey, keyStorage)
if err != nil {
return err
@@ -132,7 +121,27 @@ func (mig *FirstInstance) Execute(ctx context.Context) error {
(mig.instanceSetup.Org.Machine.MachineKey != nil && key == nil)) {
return err
}
+ return mig.outputMachineAuthentication(key, token)
+}
+func (mig *FirstInstance) verifyEncryptionKeys(ctx context.Context) (*crypto_db.Database, error) {
+ keyStorage, err := crypto_db.NewKeyStorage(mig.db, mig.masterKey)
+ if err != nil {
+ return nil, fmt.Errorf("cannot start key storage: %w", err)
+ }
+ if err = verifyKey(ctx, mig.userEncryptionKey, keyStorage); err != nil {
+ return nil, err
+ }
+ if err = verifyKey(ctx, mig.smtpEncryptionKey, keyStorage); err != nil {
+ return nil, err
+ }
+ if err = verifyKey(ctx, mig.oidcEncryptionKey, keyStorage); err != nil {
+ return nil, err
+ }
+ return keyStorage, nil
+}
+
+func (mig *FirstInstance) outputMachineAuthentication(key *command.MachineKey, token string) error {
if key != nil {
keyDetails, err := key.Detail()
if err != nil {
diff --git a/cmd/setup/05.go b/cmd/setup/05.go
index 7813ce8bb..dc9cbdef5 100644
--- a/cmd/setup/05.go
+++ b/cmd/setup/05.go
@@ -4,6 +4,8 @@ import (
"context"
"database/sql"
_ "embed"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -15,7 +17,7 @@ type LastFailed struct {
dbClient *sql.DB
}
-func (mig *LastFailed) Execute(ctx context.Context) error {
+func (mig *LastFailed) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, lastFailedStmts)
return err
}
diff --git a/cmd/setup/06.go b/cmd/setup/06.go
index 5a3374543..3927c6f35 100644
--- a/cmd/setup/06.go
+++ b/cmd/setup/06.go
@@ -4,6 +4,8 @@ import (
"context"
"database/sql"
_ "embed"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -17,7 +19,7 @@ type OwnerRemoveColumns struct {
dbClient *sql.DB
}
-func (mig *OwnerRemoveColumns) Execute(ctx context.Context) error {
+func (mig *OwnerRemoveColumns) Execute(ctx context.Context, _ eventstore.Event) error {
stmt := createAdminViews06 + createAuthViews06
_, err := mig.dbClient.ExecContext(ctx, stmt)
return err
diff --git a/cmd/setup/07.go b/cmd/setup/07.go
index f168f6d16..73b9d3480 100644
--- a/cmd/setup/07.go
+++ b/cmd/setup/07.go
@@ -5,6 +5,8 @@ import (
"database/sql"
"embed"
"strings"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -24,7 +26,7 @@ type LogstoreTables struct {
dbType string
}
-func (mig *LogstoreTables) Execute(ctx context.Context) error {
+func (mig *LogstoreTables) Execute(ctx context.Context, _ eventstore.Event) error {
accessStmt, err := readStmt(createAccessLogsTable07, "07", mig.dbType, "access.sql")
if err != nil {
return err
diff --git a/cmd/setup/08.go b/cmd/setup/08.go
index ff7dcea0f..bec6a65eb 100644
--- a/cmd/setup/08.go
+++ b/cmd/setup/08.go
@@ -5,6 +5,7 @@ import (
"embed"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -17,7 +18,7 @@ type AuthTokenIndexes struct {
dbClient *database.DB
}
-func (mig *AuthTokenIndexes) Execute(ctx context.Context) error {
+func (mig *AuthTokenIndexes) Execute(ctx context.Context, _ eventstore.Event) error {
stmt, err := readStmt(tokenIndexes08, "08", mig.dbClient.Type(), "08.sql")
if err != nil {
return err
diff --git a/cmd/setup/10.go b/cmd/setup/10.go
index 9f3d89cbd..93c017305 100644
--- a/cmd/setup/10.go
+++ b/cmd/setup/10.go
@@ -10,6 +10,7 @@ import (
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -31,7 +32,7 @@ type CorrectCreationDate struct {
FailAfter time.Duration
}
-func (mig *CorrectCreationDate) Execute(ctx context.Context) (err error) {
+func (mig *CorrectCreationDate) Execute(ctx context.Context, _ eventstore.Event) (err error) {
ctx, cancel := context.WithTimeout(ctx, mig.FailAfter)
defer cancel()
diff --git a/cmd/setup/12.go b/cmd/setup/12.go
index ce0e23aa0..4613d65c9 100644
--- a/cmd/setup/12.go
+++ b/cmd/setup/12.go
@@ -5,6 +5,7 @@ import (
_ "embed"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -16,7 +17,7 @@ type AddOTPColumns struct {
dbClient *database.DB
}
-func (mig *AddOTPColumns) Execute(ctx context.Context) error {
+func (mig *AddOTPColumns) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, addOTPColumns)
return err
}
diff --git a/cmd/setup/13.go b/cmd/setup/13.go
index 3b5df925b..f2ca0a390 100644
--- a/cmd/setup/13.go
+++ b/cmd/setup/13.go
@@ -5,6 +5,7 @@ import (
_ "embed"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -16,7 +17,7 @@ type FixQuotaConstraints struct {
dbClient *database.DB
}
-func (mig *FixQuotaConstraints) Execute(ctx context.Context) error {
+func (mig *FixQuotaConstraints) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, fixQuotaConstraints)
return err
}
diff --git a/cmd/setup/14.go b/cmd/setup/14.go
index 2647d83ee..786705443 100644
--- a/cmd/setup/14.go
+++ b/cmd/setup/14.go
@@ -11,6 +11,7 @@ import (
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -23,7 +24,7 @@ type NewEventsTable struct {
dbClient *database.DB
}
-func (mig *NewEventsTable) Execute(ctx context.Context) error {
+func (mig *NewEventsTable) Execute(ctx context.Context, _ eventstore.Event) error {
migrations, err := newEventsTable.ReadDir("14/" + mig.dbClient.Type())
if err != nil {
return err
diff --git a/cmd/setup/15.go b/cmd/setup/15.go
index 174821e0b..7267afbd1 100644
--- a/cmd/setup/15.go
+++ b/cmd/setup/15.go
@@ -7,6 +7,7 @@ import (
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -19,7 +20,7 @@ type CurrentProjectionState struct {
dbClient *database.DB
}
-func (mig *CurrentProjectionState) Execute(ctx context.Context) error {
+func (mig *CurrentProjectionState) Execute(ctx context.Context, _ eventstore.Event) error {
migrations, err := currentProjectionState.ReadDir("15/" + mig.dbClient.Type())
if err != nil {
return err
diff --git a/cmd/setup/16.go b/cmd/setup/16.go
index 6204dcd98..d6ad17091 100644
--- a/cmd/setup/16.go
+++ b/cmd/setup/16.go
@@ -7,6 +7,7 @@ import (
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -18,7 +19,7 @@ type UniqueConstraintToLower struct {
dbClient *database.DB
}
-func (mig *UniqueConstraintToLower) Execute(ctx context.Context) error {
+func (mig *UniqueConstraintToLower) Execute(ctx context.Context, _ eventstore.Event) error {
res, err := mig.dbClient.ExecContext(ctx, uniqueConstraintLower)
if err != nil {
return err
diff --git a/cmd/setup/17.go b/cmd/setup/17.go
index 9612f3d27..956ffe0e0 100644
--- a/cmd/setup/17.go
+++ b/cmd/setup/17.go
@@ -5,6 +5,7 @@ import (
_ "embed"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -16,7 +17,7 @@ type AddOffsetToCurrentStates struct {
dbClient *database.DB
}
-func (mig *AddOffsetToCurrentStates) Execute(ctx context.Context) error {
+func (mig *AddOffsetToCurrentStates) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, addOffsetField)
return err
}
diff --git a/cmd/setup/18.go b/cmd/setup/18.go
index 99837d81e..9fe3d10a8 100644
--- a/cmd/setup/18.go
+++ b/cmd/setup/18.go
@@ -5,6 +5,7 @@ import (
_ "embed"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -16,7 +17,7 @@ type AddLowerFieldsToLoginNames struct {
dbClient *database.DB
}
-func (mig *AddLowerFieldsToLoginNames) Execute(ctx context.Context) error {
+func (mig *AddLowerFieldsToLoginNames) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, addLowerFieldsToLoginNames)
return err
}
diff --git a/cmd/setup/19.go b/cmd/setup/19.go
index 7919ef9ad..a1bad128b 100644
--- a/cmd/setup/19.go
+++ b/cmd/setup/19.go
@@ -5,6 +5,7 @@ import (
_ "embed"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -16,7 +17,7 @@ type AddCurrentSequencesIndex struct {
dbClient *database.DB
}
-func (mig *AddCurrentSequencesIndex) Execute(ctx context.Context) error {
+func (mig *AddCurrentSequencesIndex) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, addCurrentSequencesIndex)
return err
}
diff --git a/cmd/setup/20.go b/cmd/setup/20.go
index f012140db..096f6bb3a 100644
--- a/cmd/setup/20.go
+++ b/cmd/setup/20.go
@@ -5,6 +5,7 @@ import (
_ "embed"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -16,7 +17,7 @@ type AddByUserIndexToSession struct {
dbClient *database.DB
}
-func (mig *AddByUserIndexToSession) Execute(ctx context.Context) error {
+func (mig *AddByUserIndexToSession) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, addByUserIndexToSession)
return err
}
diff --git a/cmd/setup/21.go b/cmd/setup/21.go
index 3731cad61..13b4b2bf8 100644
--- a/cmd/setup/21.go
+++ b/cmd/setup/21.go
@@ -5,6 +5,7 @@ import (
_ "embed"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -16,7 +17,7 @@ type AddBlockFieldToLimits struct {
dbClient *database.DB
}
-func (mig *AddBlockFieldToLimits) Execute(ctx context.Context) error {
+func (mig *AddBlockFieldToLimits) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, addBlockFieldToLimits)
return err
}
diff --git a/cmd/setup/22.go b/cmd/setup/22.go
new file mode 100644
index 000000000..ee5f52f7f
--- /dev/null
+++ b/cmd/setup/22.go
@@ -0,0 +1,27 @@
+package setup
+
+import (
+ "context"
+ _ "embed"
+
+ "github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+var (
+ //go:embed 22.sql
+ activeInstanceEvents string
+)
+
+type ActiveInstanceEvents struct {
+ dbClient *database.DB
+}
+
+func (mig *ActiveInstanceEvents) Execute(ctx context.Context, _ eventstore.Event) error {
+ _, err := mig.dbClient.ExecContext(ctx, activeInstanceEvents)
+ return err
+}
+
+func (mig *ActiveInstanceEvents) String() string {
+ return "22_active_instance_events_index"
+}
diff --git a/cmd/setup/22.sql b/cmd/setup/22.sql
new file mode 100644
index 000000000..e153fd2fd
--- /dev/null
+++ b/cmd/setup/22.sql
@@ -0,0 +1 @@
+CREATE INDEX CONCURRENTLY IF NOT EXISTS active_instances_events ON eventstore.events2 (aggregate_type, event_type) WHERE aggregate_type = 'instance' AND event_type IN ('instance.added', 'instance.removed');
\ No newline at end of file
diff --git a/cmd/setup/cleanup.go b/cmd/setup/cleanup.go
index 267941a30..e9bc832d2 100644
--- a/cmd/setup/cleanup.go
+++ b/cmd/setup/cleanup.go
@@ -40,7 +40,6 @@ func Cleanup(config *Config) {
config.Eventstore.Pusher = new_es.NewEventstore(esPusherDBClient)
config.Eventstore.Querier = old_es.NewCRDB(queryDBClient)
es := eventstore.NewEventstore(config.Eventstore)
- migration.RegisterMappers(es)
step, err := migration.LastStuckStep(ctx, es)
logging.OnError(err).Fatal("unable to query latest migration")
diff --git a/cmd/setup/config.go b/cmd/setup/config.go
index 382c04b39..6e0bd080b 100644
--- a/cmd/setup/config.go
+++ b/cmd/setup/config.go
@@ -9,16 +9,22 @@ import (
"github.com/spf13/viper"
"github.com/zitadel/logging"
+ "github.com/zitadel/zitadel/cmd/encryption"
+ "github.com/zitadel/zitadel/cmd/systemapi"
+ "github.com/zitadel/zitadel/internal/actions"
"github.com/zitadel/zitadel/internal/api/authz"
+ "github.com/zitadel/zitadel/internal/api/oidc"
+ "github.com/zitadel/zitadel/internal/api/ui/login"
"github.com/zitadel/zitadel/internal/command"
"github.com/zitadel/zitadel/internal/config/hook"
"github.com/zitadel/zitadel/internal/config/systemdefaults"
- "github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/id"
+ "github.com/zitadel/zitadel/internal/notification/handlers"
"github.com/zitadel/zitadel/internal/query/projection"
+ static_config "github.com/zitadel/zitadel/internal/static/config"
)
type Config struct {
@@ -29,11 +35,26 @@ type Config struct {
ExternalPort uint16
ExternalSecure bool
Log *logging.Config
- EncryptionKeys *encryptionKeyConfig
+ EncryptionKeys *encryption.EncryptionKeyConfig
DefaultInstance command.InstanceSetup
Machine *id.Config
Projections projection.Config
Eventstore *eventstore.Config
+
+ InitProjections InitProjections
+ AssetStorage static_config.AssetStorageConfig
+ OIDC oidc.Config
+ Login login.Config
+ WebAuthNName string
+ Telemetry *handlers.TelemetryPusherConfig
+ SystemAPIUsers systemapi.Users
+}
+
+type InitProjections struct {
+ Enabled bool
+ RetryFailedAfter time.Duration
+ MaxFailureCount uint8
+ BulkLimit uint64
}
func MustNewConfig(v *viper.Viper) *Config {
@@ -48,6 +69,7 @@ func MustNewConfig(v *viper.Viper) *Config {
database.DecodeHook,
hook.EnumHookFunc(domain.FeatureString),
hook.EnumHookFunc(authz.MemberTypeString),
+ actions.HTTPConfigDecodeHook,
)),
)
logging.OnError(err).Fatal("unable to read default config")
@@ -79,12 +101,7 @@ type Steps struct {
s19AddCurrentStatesIndex *AddCurrentSequencesIndex
s20AddByUserSessionIndex *AddByUserIndexToSession
s21AddBlockFieldToLimits *AddBlockFieldToLimits
-}
-
-type encryptionKeyConfig struct {
- User *crypto.KeyConfig
- SMTP *crypto.KeyConfig
- OIDC *crypto.KeyConfig
+ s22ActiveInstancesIndex *ActiveInstanceEvents
}
func MustNewSteps(v *viper.Viper) *Steps {
@@ -110,6 +127,7 @@ func MustNewSteps(v *viper.Viper) *Steps {
mapstructure.StringToTimeHookFunc(time.RFC3339),
mapstructure.StringToSliceHookFunc(","),
hook.EnumHookFunc(domain.FeatureString),
+ systemapi.UsersDecodeHook,
)),
)
logging.OnError(err).Fatal("unable to read steps")
diff --git a/cmd/setup/config_change.go b/cmd/setup/config_change.go
index 3a1c0b604..a7d7c5a46 100644
--- a/cmd/setup/config_change.go
+++ b/cmd/setup/config_change.go
@@ -30,7 +30,7 @@ func (mig *externalConfigChange) Check(lastRun map[string]interface{}) bool {
mig.currentExternalDomain != mig.ExternalDomain
}
-func (mig *externalConfigChange) Execute(ctx context.Context) error {
+func (mig *externalConfigChange) Execute(ctx context.Context, _ eventstore.Event) error {
cmd, err := command.StartCommands(
mig.es,
mig.defaults,
diff --git a/cmd/setup/projections.go b/cmd/setup/projections.go
index d8ffebb4a..5bf3cb13f 100644
--- a/cmd/setup/projections.go
+++ b/cmd/setup/projections.go
@@ -18,7 +18,7 @@ func (mig *projectionTables) Check(lastRun map[string]interface{}) bool {
return currentVersion != mig.Version
}
-func (mig *projectionTables) Execute(ctx context.Context) error {
+func (mig *projectionTables) Execute(ctx context.Context, _ eventstore.Event) error {
return projection.Init(ctx)
}
diff --git a/cmd/setup/setup.go b/cmd/setup/setup.go
index 3926e915c..b158441ed 100644
--- a/cmd/setup/setup.go
+++ b/cmd/setup/setup.go
@@ -4,22 +4,37 @@ import (
"context"
"embed"
_ "embed"
+ "net/http"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/cmd/build"
+ "github.com/zitadel/zitadel/cmd/encryption"
"github.com/zitadel/zitadel/cmd/key"
"github.com/zitadel/zitadel/cmd/tls"
+ admin_handler "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/handler"
+ admin_view "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/view"
+ internal_authz "github.com/zitadel/zitadel/internal/api/authz"
+ auth_handler "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/handler"
+ auth_view "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
+ "github.com/zitadel/zitadel/internal/authz"
+ authz_es "github.com/zitadel/zitadel/internal/authz/repository/eventsourcing/eventstore"
+ "github.com/zitadel/zitadel/internal/command"
+ cryptoDB "github.com/zitadel/zitadel/internal/crypto/database"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/database/dialect"
+ "github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
old_es "github.com/zitadel/zitadel/internal/eventstore/repository/sql"
new_es "github.com/zitadel/zitadel/internal/eventstore/v3"
"github.com/zitadel/zitadel/internal/i18n"
"github.com/zitadel/zitadel/internal/migration"
+ notify_handler "github.com/zitadel/zitadel/internal/notification"
+ "github.com/zitadel/zitadel/internal/query"
"github.com/zitadel/zitadel/internal/query/projection"
+ "github.com/zitadel/zitadel/internal/webauthn"
)
var (
@@ -39,6 +54,9 @@ Requirements:
err := tls.ModeFromFlag(cmd)
logging.OnError(err).Fatal("invalid tlsMode")
+ err = BindInitProjections(cmd)
+ logging.OnError(err).Fatal("unable to bind \"init-projections\" flag")
+
config := MustNewConfig(viper.GetViper())
steps := MustNewSteps(viper.New())
@@ -58,10 +76,15 @@ Requirements:
func Flags(cmd *cobra.Command) {
cmd.PersistentFlags().StringArrayVar(&stepFiles, "steps", nil, "paths to step files to overwrite default steps")
+ cmd.Flags().Bool("init-projections", viper.GetBool("InitProjections"), "beta feature: initializes projections after they are created, allows smooth start as projections are up to date")
key.AddMasterKeyFlag(cmd)
tls.AddTLSModeFlag(cmd)
}
+func BindInitProjections(cmd *cobra.Command) error {
+ return viper.BindPFlag("InitProjections.Enabled", cmd.Flags().Lookup("init-projections"))
+}
+
func Setup(config *Config, steps *Steps, masterKey string) {
ctx := context.Background()
logging.Info("setup started")
@@ -79,7 +102,6 @@ func Setup(config *Config, steps *Steps, masterKey string) {
config.Eventstore.Pusher = new_es.NewEventstore(esPusherDBClient)
eventstoreClient := eventstore.NewEventstore(config.Eventstore)
logging.OnError(err).Fatal("unable to start eventstore")
- migration.RegisterMappers(eventstoreClient)
steps.s1ProjectionTable = &ProjectionTable{dbClient: queryDBClient.DB}
steps.s2AssetsTable = &AssetTable{dbClient: queryDBClient.DB}
@@ -112,6 +134,7 @@ func Setup(config *Config, steps *Steps, masterKey string) {
steps.s19AddCurrentStatesIndex = &AddCurrentSequencesIndex{dbClient: queryDBClient}
steps.s20AddByUserSessionIndex = &AddByUserIndexToSession{dbClient: queryDBClient}
steps.s21AddBlockFieldToLimits = &AddBlockFieldToLimits{dbClient: queryDBClient}
+ steps.s22ActiveInstancesIndex = &ActiveInstanceEvents{dbClient: queryDBClient}
err = projection.Create(ctx, projectionDBClient, eventstoreClient, config.Projections, nil, nil, nil)
logging.OnError(err).Fatal("unable to start projections")
@@ -160,6 +183,8 @@ func Setup(config *Config, steps *Steps, masterKey string) {
logging.WithFields("name", steps.s19AddCurrentStatesIndex.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s20AddByUserSessionIndex)
logging.WithFields("name", steps.s20AddByUserSessionIndex.String()).OnError(err).Fatal("migration failed")
+ err = migration.Migrate(ctx, eventstoreClient, steps.s22ActiveInstancesIndex)
+ logging.WithFields("name", steps.s22ActiveInstancesIndex.String()).OnError(err).Fatal("migration failed")
for _, repeatableStep := range repeatableSteps {
err = migration.Migrate(ctx, eventstoreClient, repeatableStep)
@@ -171,9 +196,176 @@ func Setup(config *Config, steps *Steps, masterKey string) {
logging.WithFields("name", steps.s18AddLowerFieldsToLoginNames.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s21AddBlockFieldToLimits)
logging.WithFields("name", steps.s21AddBlockFieldToLimits.String()).OnError(err).Fatal("migration failed")
+
+ // projection initialization must be done last, since the steps above might add required columns to the projections
+ if config.InitProjections.Enabled {
+ initProjections(
+ ctx,
+ eventstoreClient,
+ queryDBClient,
+ projectionDBClient,
+ masterKey,
+ config,
+ )
+ }
}
func readStmt(fs embed.FS, folder, typ, filename string) (string, error) {
stmt, err := fs.ReadFile(folder + "/" + typ + "/" + filename)
return string(stmt), err
}
+
+func initProjections(
+ ctx context.Context,
+ eventstoreClient *eventstore.Eventstore,
+ queryDBClient,
+ projectionDBClient *database.DB,
+ masterKey string,
+ config *Config,
+) {
+ logging.Info("init-projections is currently in beta")
+
+ keyStorage, err := cryptoDB.NewKeyStorage(queryDBClient, masterKey)
+ logging.OnError(err).Fatal("unable to start key storage")
+
+ keys, err := encryption.EnsureEncryptionKeys(ctx, config.EncryptionKeys, keyStorage)
+ logging.OnError(err).Fatal("unable to ensure encryption keys")
+
+ err = projection.Create(
+ ctx,
+ queryDBClient,
+ eventstoreClient,
+ projection.Config{
+ RetryFailedAfter: config.InitProjections.RetryFailedAfter,
+ MaxFailureCount: config.InitProjections.MaxFailureCount,
+ BulkLimit: config.InitProjections.BulkLimit,
+ },
+ keys.OIDC,
+ keys.SAML,
+ config.SystemAPIUsers,
+ )
+ logging.OnError(err).Fatal("unable to start projections")
+ for _, p := range projection.Projections() {
+ err := migration.Migrate(ctx, eventstoreClient, p)
+ logging.WithFields("name", p.String()).OnError(err).Fatal("migration failed")
+ }
+
+ staticStorage, err := config.AssetStorage.NewStorage(queryDBClient.DB)
+ logging.OnError(err).Fatal("unable to start asset storage")
+
+ adminView, err := admin_view.StartView(queryDBClient)
+ logging.OnError(err).Fatal("unable to start admin view")
+ admin_handler.Register(ctx,
+ admin_handler.Config{
+ Client: queryDBClient,
+ Eventstore: eventstoreClient,
+ BulkLimit: config.InitProjections.BulkLimit,
+ FailureCountUntilSkip: uint64(config.InitProjections.MaxFailureCount),
+ },
+ adminView,
+ staticStorage,
+ )
+ for _, p := range admin_handler.Projections() {
+ err := migration.Migrate(ctx, eventstoreClient, p)
+ logging.WithFields("name", p.String()).OnError(err).Fatal("migration failed")
+ }
+
+ sessionTokenVerifier := internal_authz.SessionTokenVerifier(keys.OIDC)
+ queries, err := query.StartQueries(
+ ctx,
+ eventstoreClient,
+ queryDBClient,
+ projectionDBClient,
+ config.Projections,
+ config.SystemDefaults,
+ keys.IDPConfig,
+ keys.OTP,
+ keys.OIDC,
+ keys.SAML,
+ config.InternalAuthZ.RolePermissionMappings,
+ sessionTokenVerifier,
+ func(q *query.Queries) domain.PermissionCheck {
+ return func(ctx context.Context, permission, orgID, resourceID string) (err error) {
+ return internal_authz.CheckPermission(ctx, &authz_es.UserMembershipRepo{Queries: q}, config.InternalAuthZ.RolePermissionMappings, permission, orgID, resourceID)
+ }
+ },
+ 0, // not needed for projections
+ nil, // not needed for projections
+ false,
+ )
+ logging.OnError(err).Fatal("unable to start queries")
+
+ authView, err := auth_view.StartView(queryDBClient, keys.OIDC, queries, eventstoreClient)
+ logging.OnError(err).Fatal("unable to start admin view")
+ auth_handler.Register(ctx,
+ auth_handler.Config{
+ Client: queryDBClient,
+ Eventstore: eventstoreClient,
+ BulkLimit: config.InitProjections.BulkLimit,
+ FailureCountUntilSkip: uint64(config.InitProjections.MaxFailureCount),
+ },
+ authView,
+ queries,
+ )
+ for _, p := range auth_handler.Projections() {
+ err := migration.Migrate(ctx, eventstoreClient, p)
+ logging.WithFields("name", p.String()).OnError(err).Fatal("migration failed")
+ }
+
+ authZRepo, err := authz.Start(queries, eventstoreClient, queryDBClient, keys.OIDC, config.ExternalSecure)
+ logging.OnError(err).Fatal("unable to start authz repo")
+ permissionCheck := func(ctx context.Context, permission, orgID, resourceID string) (err error) {
+ return internal_authz.CheckPermission(ctx, authZRepo, config.InternalAuthZ.RolePermissionMappings, permission, orgID, resourceID)
+ }
+ commands, err := command.StartCommands(
+ eventstoreClient,
+ config.SystemDefaults,
+ config.InternalAuthZ.RolePermissionMappings,
+ staticStorage,
+ &webauthn.Config{
+ DisplayName: config.WebAuthNName,
+ ExternalSecure: config.ExternalSecure,
+ },
+ config.ExternalDomain,
+ config.ExternalSecure,
+ config.ExternalPort,
+ keys.IDPConfig,
+ keys.OTP,
+ keys.SMTP,
+ keys.SMS,
+ keys.User,
+ keys.DomainVerification,
+ keys.OIDC,
+ keys.SAML,
+ &http.Client{},
+ permissionCheck,
+ sessionTokenVerifier,
+ config.OIDC.DefaultAccessTokenLifetime,
+ config.OIDC.DefaultRefreshTokenExpiration,
+ config.OIDC.DefaultRefreshTokenIdleExpiration,
+ config.DefaultInstance.SecretGenerators,
+ )
+ logging.OnError(err).Fatal("unable to start commands")
+ notify_handler.Register(
+ ctx,
+ config.Projections.Customizations["notifications"],
+ config.Projections.Customizations["notificationsquotas"],
+ config.Projections.Customizations["telemetry"],
+ *config.Telemetry,
+ config.ExternalDomain,
+ config.ExternalPort,
+ config.ExternalSecure,
+ commands,
+ queries,
+ eventstoreClient,
+ config.Login.DefaultOTPEmailURLV2,
+ config.SystemDefaults.Notifications.FileSystemPath,
+ keys.User,
+ keys.SMTP,
+ keys.SMS,
+ )
+ for _, p := range notify_handler.Projections() {
+ err := migration.Migrate(ctx, eventstoreClient, p)
+ logging.WithFields("name", p.String()).OnError(err).Fatal("migration failed")
+ }
+}
diff --git a/cmd/start/config.go b/cmd/start/config.go
index a682e09ef..709ecaf91 100644
--- a/cmd/start/config.go
+++ b/cmd/start/config.go
@@ -1,14 +1,14 @@
package start
import (
- "encoding/json"
- "reflect"
"time"
"github.com/mitchellh/mapstructure"
"github.com/spf13/viper"
"github.com/zitadel/logging"
+ "github.com/zitadel/zitadel/cmd/encryption"
+ "github.com/zitadel/zitadel/cmd/systemapi"
"github.com/zitadel/zitadel/internal/actions"
admin_es "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing"
internal_authz "github.com/zitadel/zitadel/internal/api/authz"
@@ -22,7 +22,6 @@ import (
"github.com/zitadel/zitadel/internal/config/hook"
"github.com/zitadel/zitadel/internal/config/network"
"github.com/zitadel/zitadel/internal/config/systemdefaults"
- "github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
@@ -59,10 +58,10 @@ type Config struct {
AssetStorage static_config.AssetStorageConfig
InternalAuthZ internal_authz.Config
SystemDefaults systemdefaults.SystemDefaults
- EncryptionKeys *encryptionKeyConfig
+ EncryptionKeys *encryption.EncryptionKeyConfig
DefaultInstance command.InstanceSetup
AuditLogRetention time.Duration
- SystemAPIUsers SystemAPIUsers
+ SystemAPIUsers systemapi.Users
CustomerPortal string
Machine *id.Config
Actions *actions.Config
@@ -92,7 +91,7 @@ func MustNewConfig(v *viper.Viper) *Config {
mapstructure.StringToSliceHookFunc(","),
database.DecodeHook,
actions.HTTPConfigDecodeHook,
- systemAPIUsersDecodeHook,
+ systemapi.UsersDecodeHook,
hook.EnumHookFunc(domain.FeatureString),
hook.EnumHookFunc(internal_authz.MemberTypeString),
)),
@@ -113,35 +112,3 @@ func MustNewConfig(v *viper.Viper) *Config {
return config
}
-
-type encryptionKeyConfig struct {
- DomainVerification *crypto.KeyConfig
- IDPConfig *crypto.KeyConfig
- OIDC *crypto.KeyConfig
- SAML *crypto.KeyConfig
- OTP *crypto.KeyConfig
- SMS *crypto.KeyConfig
- SMTP *crypto.KeyConfig
- User *crypto.KeyConfig
- CSRFCookieKeyID string
- UserAgentCookieKeyID string
-}
-
-type SystemAPIUsers map[string]*internal_authz.SystemAPIUser
-
-func systemAPIUsersDecodeHook(from, to reflect.Value) (any, error) {
- if to.Type() != reflect.TypeOf(SystemAPIUsers{}) {
- return from.Interface(), nil
- }
-
- data, ok := from.Interface().(string)
- if !ok {
- return from.Interface(), nil
- }
- users := make(SystemAPIUsers)
- err := json.Unmarshal([]byte(data), &users)
- if err != nil {
- return nil, err
- }
- return users, nil
-}
diff --git a/cmd/start/start.go b/cmd/start/start.go
index 96b1756f5..f7dcdc7c2 100644
--- a/cmd/start/start.go
+++ b/cmd/start/start.go
@@ -25,6 +25,7 @@ import (
"golang.org/x/net/http2/h2c"
"github.com/zitadel/zitadel/cmd/build"
+ "github.com/zitadel/zitadel/cmd/encryption"
"github.com/zitadel/zitadel/cmd/key"
cmd_tls "github.com/zitadel/zitadel/cmd/tls"
"github.com/zitadel/zitadel/feature"
@@ -108,7 +109,7 @@ type Server struct {
Config *Config
DB *database.DB
KeyStorage crypto.KeyStorage
- Keys *encryptionKeys
+ Keys *encryption.EncryptionKeys
Eventstore *eventstore.Eventstore
Queries *query.Queries
AuthzRepo authz_repo.Repository
@@ -141,7 +142,7 @@ func startZitadel(ctx context.Context, config *Config, masterKey string, server
if err != nil {
return fmt.Errorf("cannot start key storage: %w", err)
}
- keys, err := ensureEncryptionKeys(ctx, config.EncryptionKeys, keyStorage)
+ keys, err := encryption.EnsureEncryptionKeys(ctx, config.EncryptionKeys, keyStorage)
if err != nil {
return err
}
@@ -172,6 +173,7 @@ func startZitadel(ctx context.Context, config *Config, masterKey string, server
},
config.AuditLogRetention,
config.SystemAPIUsers,
+ true,
)
if err != nil {
return fmt.Errorf("cannot start queries: %w", err)
@@ -236,7 +238,7 @@ func startZitadel(ctx context.Context, config *Config, masterKey string, server
actionsLogstoreSvc := logstore.New(queries, actionsExecutionDBEmitter, actionsExecutionStdoutEmitter)
actions.SetLogstoreService(actionsLogstoreSvc)
- notification.Start(
+ notification.Register(
ctx,
config.Projections.Customizations["notifications"],
config.Projections.Customizations["notificationsquotas"],
@@ -254,6 +256,7 @@ func startZitadel(ctx context.Context, config *Config, masterKey string, server
keys.SMTP,
keys.SMS,
)
+ notification.Start(ctx)
router := mux.NewRouter()
tlsConfig, err := config.TLS.Config()
@@ -313,7 +316,7 @@ func startAPIs(
config *Config,
store static.Storage,
authZRepo authz_repo.Repository,
- keys *encryptionKeys,
+ keys *encryption.EncryptionKeys,
permissionCheck domain.PermissionCheck,
) error {
repo := struct {
diff --git a/cmd/start/start_from_init.go b/cmd/start/start_from_init.go
index d07ff89cf..78c0be719 100644
--- a/cmd/start/start_from_init.go
+++ b/cmd/start/start_from_init.go
@@ -31,6 +31,9 @@ Requirements:
initialise.InitAll(cmd.Context(), initialise.MustNewConfig(viper.GetViper()))
+ err = setup.BindInitProjections(cmd)
+ logging.OnError(err).Fatal("unable to bind \"init-projections\" flag")
+
setupConfig := setup.MustNewConfig(viper.GetViper())
setupSteps := setup.MustNewSteps(viper.New())
setup.Setup(setupConfig, setupSteps, masterKey)
diff --git a/cmd/start/start_from_setup.go b/cmd/start/start_from_setup.go
index ea1bd42a0..ec26f4741 100644
--- a/cmd/start/start_from_setup.go
+++ b/cmd/start/start_from_setup.go
@@ -29,6 +29,9 @@ Requirements:
masterKey, err := key.MasterKey(cmd)
logging.OnError(err).Panic("No master key provided")
+ err = setup.BindInitProjections(cmd)
+ logging.OnError(err).Fatal("unable to bind \"init-projections\" flag")
+
setupConfig := setup.MustNewConfig(viper.GetViper())
setupSteps := setup.MustNewSteps(viper.New())
setup.Setup(setupConfig, setupSteps, masterKey)
diff --git a/cmd/systemapi/user.go b/cmd/systemapi/user.go
new file mode 100644
index 000000000..9393ceceb
--- /dev/null
+++ b/cmd/systemapi/user.go
@@ -0,0 +1,27 @@
+package systemapi
+
+import (
+ "encoding/json"
+ "reflect"
+
+ "github.com/zitadel/zitadel/internal/api/authz"
+)
+
+type Users map[string]*authz.SystemAPIUser
+
+func UsersDecodeHook(from, to reflect.Value) (any, error) {
+ if to.Type() != reflect.TypeOf(Users{}) {
+ return from.Interface(), nil
+ }
+
+ data, ok := from.Interface().(string)
+ if !ok {
+ return from.Interface(), nil
+ }
+ users := make(Users)
+ err := json.Unmarshal([]byte(data), &users)
+ if err != nil {
+ return nil, err
+ }
+ return users, nil
+}
diff --git a/docs/docs/self-hosting/manage/reverseproxy/docker-compose.yaml b/docs/docs/self-hosting/manage/reverseproxy/docker-compose.yaml
index 885713731..d391328a5 100644
--- a/docs/docs/self-hosting/manage/reverseproxy/docker-compose.yaml
+++ b/docs/docs/self-hosting/manage/reverseproxy/docker-compose.yaml
@@ -5,7 +5,7 @@ services:
zitadel-disabled-tls:
extends:
service: zitadel-init
- command: 'start-from-setup --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml'
+ command: 'start-from-setup --init-projections --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml'
environment:
- ZITADEL_EXTERNALPORT=80
- ZITADEL_EXTERNALSECURE=false
@@ -19,7 +19,7 @@ services:
zitadel-external-tls:
extends:
service: zitadel-init
- command: 'start-from-setup --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml'
+ command: 'start-from-setup --init-projections --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml'
environment:
- ZITADEL_EXTERNALPORT=443
- ZITADEL_EXTERNALSECURE=true
@@ -33,7 +33,7 @@ services:
zitadel-enabled-tls:
extends:
service: zitadel-init
- command: 'start-from-setup --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml'
+ command: 'start-from-setup --init-projections --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml'
environment:
- ZITADEL_EXTERNALPORT=443
- ZITADEL_EXTERNALSECURE=true
diff --git a/docs/docs/self-hosting/manage/updating_scaling.md b/docs/docs/self-hosting/manage/updating_scaling.md
index 7addca0b0..a716c63a0 100644
--- a/docs/docs/self-hosting/manage/updating_scaling.md
+++ b/docs/docs/self-hosting/manage/updating_scaling.md
@@ -65,7 +65,7 @@ The init phase is idempotent if executed with the same binary version.
### The Setup Phase
-During `zitadel setup`, ZITADEL creates projection tables and migrates existing data.
+During `zitadel setup`, ZITADEL creates projection tables and migrates existing data, if `--init-projections` is set.
Depending on the ZITADEL version and the runtime resources,
this step can take several minutes.
When deploying a new ZITADEL version,
@@ -85,5 +85,4 @@ Beware, in the background, out-of-date projections
[recompute their state by replaying all missed events](/docs/concepts/eventstore/implementation#projections).
If a new ZITADEL version is deployed, this can take quite a long time,
depending on the amount of events to catch up.
-You probably should consider manually migrating these projections first.
-Refer to the [release notes for v2.14.0](https://github.com/zitadel/zitadel/releases/tag/v2.14.0) as an example.
+You probably should consider providing `--init-projections`-flag to the [Setup Phase](#the-setup-phase) to shift the synchronization time to previous steps and delay the startup phase until events are caught up.
\ No newline at end of file
diff --git a/docs/docs/support/advisory/a10008.md b/docs/docs/support/advisory/a10008.md
new file mode 100644
index 000000000..3bf36b772
--- /dev/null
+++ b/docs/docs/support/advisory/a10008.md
@@ -0,0 +1,40 @@
+---
+title: Technical Advisory 10008
+---
+
+## Date and Version
+
+Version: 2.44.0
+
+Date: 2024-01-25
+
+## Description
+
+Version 2.44.0 introduces a new flag `--init-projections` to `zitadel setup` commands (`setup`, `start-from-setup`, `start-from-init`)
+
+This flag enables prefilling of newly added or changed projections (database tables) during setup phase instead of start phase which are used to query data, for example users.
+
+This new feature adds the following fields to the `setup` configuration, previously only used in `start`-command:
+
+- `AssetStore`: Storage for assets like user avatar, organization logo, icon, font, etc.
+- `OIDC`
+- `Login`
+- `WebAuthNName`
+- `Telemetry`
+- `SystemAPIUsers`
+
+If you use different configurations on `setup` and `start` and have overwritten previously mentioned configurations please make sure to also add them to the configuration provided to ZITADEL `setup` command.
+
+## Statement
+
+Filling of projections can get time consuming as your system grows and this can cause downtime of self hosted installations of ZITADEL because queries first need to ensure data consistency.
+
+Before this release, this step was executed after the start of ZITADEL and therefore lead to inconsistent retrieval of data until the projections were up-to-date.
+
+## Mitigation
+
+Enable the `--init-projections`-flag in setup phase and make sure the previous deployment of ZITADEL remains active until the new revision started properly.
+
+## Impact
+
+Decreases downtime of starting new revisions with new or changed projections dramatically.
diff --git a/docs/docs/support/technical_advisory.mdx b/docs/docs/support/technical_advisory.mdx
index 94e8b3905..e90508c98 100644
--- a/docs/docs/support/technical_advisory.mdx
+++ b/docs/docs/support/technical_advisory.mdx
@@ -132,7 +132,7 @@ We understand that these advisories may include breaking changes, and we aim to
|
- A-10006
+ A-10007
|
Additional grant to cockroach database user |
Breaking Behaviour Change |
@@ -142,6 +142,18 @@ We understand that these advisories may include breaking changes, and we aim to
Upcoming |
Upcoming |
+
+ |
+ A-10008
+ |
+ New flag to prefill projections during setup instead of after start |
+ Feature description |
+
+ new flag `--init-projections` introduced to `zitadel setup` commands (`setup`, `start-from-setup`, `start-from-init`)
+ |
+ 2.44.0 |
+ 2024-01-25 |
+
## Subscribe to our Mailing List
@@ -162,7 +174,7 @@ Therefore, it is important to be aware of breaking behavior changes and their po
### Expected downtime during upgrade
-Expected downtime during upgrade means that ZITADEL might become unavailable during and upgrade.
+Expected downtime during upgrade means that ZITADEL might become unavailable during an upgrade.
ZITADEL is built for [zero downtime upgrades](/docs/concepts/architecture/solution#zero-downtime-updates) at upgrades can be executed without downtime by just updating to a more recent version.
When deploying certain changes a zero downtime upgrade might not be possible, for example to guarantee data integrity.
In such cases we will issue a technical advisory to make you aware of this unexpected behavior.
diff --git a/internal/admin/repository/eventsourcing/handler/handler.go b/internal/admin/repository/eventsourcing/handler/handler.go
index a1ca9cb43..e4791b70d 100644
--- a/internal/admin/repository/eventsourcing/handler/handler.go
+++ b/internal/admin/repository/eventsourcing/handler/handler.go
@@ -7,6 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
handler2 "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/static"
)
@@ -26,16 +27,28 @@ type ConfigOverwrites struct {
MinimumCycleDuration time.Duration
}
+var projections []*handler.Handler
+
func Register(ctx context.Context, config Config, view *view.View, static static.Storage) {
if static == nil {
return
}
- newStyling(ctx,
+ projections = append(projections, newStyling(ctx,
config.overwrite("Styling"),
static,
view,
- ).Start(ctx)
+ ))
+}
+
+func Start(ctx context.Context) {
+ for _, projection := range projections {
+ projection.Start(ctx)
+ }
+}
+
+func Projections() []*handler2.Handler {
+ return projections
}
func (config Config) overwrite(viewModel string) handler2.Config {
diff --git a/internal/admin/repository/eventsourcing/repository.go b/internal/admin/repository/eventsourcing/repository.go
index fadab8864..f9ba285a8 100644
--- a/internal/admin/repository/eventsourcing/repository.go
+++ b/internal/admin/repository/eventsourcing/repository.go
@@ -20,6 +20,7 @@ func Start(ctx context.Context, conf Config, static static.Storage, dbClient *da
}
admin_handler.Register(ctx, conf.Spooler, view, static)
+ admin_handler.Start(ctx)
return nil
}
diff --git a/internal/api/http/middleware/access_interceptor.go b/internal/api/http/middleware/access_interceptor.go
index 21a07003f..f1dd0182f 100644
--- a/internal/api/http/middleware/access_interceptor.go
+++ b/internal/api/http/middleware/access_interceptor.go
@@ -93,10 +93,11 @@ func (a *AccessInterceptor) Limit(w http.ResponseWriter, r *http.Request, public
remaining := a.logstoreSvc.Limit(ctx, instance.InstanceID())
if remaining != nil {
if remaining != nil && *remaining > 0 {
- a.SetExhaustedCookie(w, r)
- return true
+ deleteCookie = true
+ return false
}
- deleteCookie = true
+ a.SetExhaustedCookie(w, r)
+ return true
}
return false
}
diff --git a/internal/auth/repository/eventsourcing/handler/handler.go b/internal/auth/repository/eventsourcing/handler/handler.go
index e9a468785..03e367829 100644
--- a/internal/auth/repository/eventsourcing/handler/handler.go
+++ b/internal/auth/repository/eventsourcing/handler/handler.go
@@ -7,6 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
handler2 "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
query2 "github.com/zitadel/zitadel/internal/query"
)
@@ -26,28 +27,40 @@ type ConfigOverwrites struct {
MinimumCycleDuration time.Duration
}
+var projections []*handler.Handler
+
func Register(ctx context.Context, configs Config, view *view.View, queries *query2.Queries) {
- newUser(ctx,
+ projections = append(projections, newUser(ctx,
configs.overwrite("User"),
view,
queries,
- ).Start(ctx)
+ ))
- newUserSession(ctx,
+ projections = append(projections, newUserSession(ctx,
configs.overwrite("UserSession"),
view,
queries,
- ).Start(ctx)
+ ))
- newToken(ctx,
+ projections = append(projections, newToken(ctx,
configs.overwrite("Token"),
view,
- ).Start(ctx)
+ ))
- newRefreshToken(ctx,
+ projections = append(projections, newRefreshToken(ctx,
configs.overwrite("RefreshToken"),
view,
- ).Start(ctx)
+ ))
+}
+
+func Start(ctx context.Context) {
+ for _, projection := range projections {
+ projection.Start(ctx)
+ }
+}
+
+func Projections() []*handler2.Handler {
+ return projections
}
func (config Config) overwrite(viewModel string) handler2.Config {
diff --git a/internal/auth/repository/eventsourcing/repository.go b/internal/auth/repository/eventsourcing/repository.go
index ff9f60bdd..84be71631 100644
--- a/internal/auth/repository/eventsourcing/repository.go
+++ b/internal/auth/repository/eventsourcing/repository.go
@@ -38,6 +38,7 @@ func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, c
}
auth_handler.Register(ctx, conf.Spooler, view, queries)
+ auth_handler.Start(ctx)
authReq := cache.Start(dbClient)
diff --git a/internal/command/command.go b/internal/command/command.go
index d43bd550d..ffc57bd16 100644
--- a/internal/command/command.go
+++ b/internal/command/command.go
@@ -22,23 +22,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/id"
- "github.com/zitadel/zitadel/internal/repository/action"
- "github.com/zitadel/zitadel/internal/repository/authrequest"
- "github.com/zitadel/zitadel/internal/repository/deviceauth"
- "github.com/zitadel/zitadel/internal/repository/feature"
- "github.com/zitadel/zitadel/internal/repository/idpintent"
- instance_repo "github.com/zitadel/zitadel/internal/repository/instance"
- "github.com/zitadel/zitadel/internal/repository/keypair"
- "github.com/zitadel/zitadel/internal/repository/limits"
- "github.com/zitadel/zitadel/internal/repository/milestone"
- "github.com/zitadel/zitadel/internal/repository/oidcsession"
- "github.com/zitadel/zitadel/internal/repository/org"
- proj_repo "github.com/zitadel/zitadel/internal/repository/project"
- "github.com/zitadel/zitadel/internal/repository/quota"
- "github.com/zitadel/zitadel/internal/repository/restrictions"
- "github.com/zitadel/zitadel/internal/repository/session"
- usr_repo "github.com/zitadel/zitadel/internal/repository/user"
- usr_grant_repo "github.com/zitadel/zitadel/internal/repository/usergrant"
"github.com/zitadel/zitadel/internal/static"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
webauthn_helper "github.com/zitadel/zitadel/internal/webauthn"
@@ -151,24 +134,6 @@ func StartCommands(
samlCertificateAndKeyGenerator: samlCertificateAndKeyGenerator(defaults.KeyConfig.Size),
}
- instance_repo.RegisterEventMappers(repo.eventstore)
- org.RegisterEventMappers(repo.eventstore)
- usr_repo.RegisterEventMappers(repo.eventstore)
- usr_grant_repo.RegisterEventMappers(repo.eventstore)
- proj_repo.RegisterEventMappers(repo.eventstore)
- keypair.RegisterEventMappers(repo.eventstore)
- action.RegisterEventMappers(repo.eventstore)
- quota.RegisterEventMappers(repo.eventstore)
- limits.RegisterEventMappers(repo.eventstore)
- restrictions.RegisterEventMappers(repo.eventstore)
- session.RegisterEventMappers(repo.eventstore)
- idpintent.RegisterEventMappers(repo.eventstore)
- authrequest.RegisterEventMappers(repo.eventstore)
- oidcsession.RegisterEventMappers(repo.eventstore)
- milestone.RegisterEventMappers(repo.eventstore)
- feature.RegisterEventMappers(repo.eventstore)
- deviceauth.RegisterEventMappers(repo.eventstore)
-
repo.codeAlg = crypto.NewBCrypt(defaults.SecretGenerators.PasswordSaltCost)
repo.userPasswordHasher, err = defaults.PasswordHasher.PasswordHasher()
if err != nil {
diff --git a/internal/command/main_test.go b/internal/command/main_test.go
index 265059f4c..faed3c304 100644
--- a/internal/command/main_test.go
+++ b/internal/command/main_test.go
@@ -17,22 +17,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/repository/mock"
- action_repo "github.com/zitadel/zitadel/internal/repository/action"
- "github.com/zitadel/zitadel/internal/repository/authrequest"
- "github.com/zitadel/zitadel/internal/repository/deviceauth"
- "github.com/zitadel/zitadel/internal/repository/feature"
- "github.com/zitadel/zitadel/internal/repository/idpintent"
- iam_repo "github.com/zitadel/zitadel/internal/repository/instance"
- key_repo "github.com/zitadel/zitadel/internal/repository/keypair"
- "github.com/zitadel/zitadel/internal/repository/limits"
- "github.com/zitadel/zitadel/internal/repository/oidcsession"
- "github.com/zitadel/zitadel/internal/repository/org"
- proj_repo "github.com/zitadel/zitadel/internal/repository/project"
- quota_repo "github.com/zitadel/zitadel/internal/repository/quota"
- "github.com/zitadel/zitadel/internal/repository/restrictions"
- "github.com/zitadel/zitadel/internal/repository/session"
- usr_repo "github.com/zitadel/zitadel/internal/repository/user"
- "github.com/zitadel/zitadel/internal/repository/usergrant"
"github.com/zitadel/zitadel/internal/zerrors"
)
@@ -49,22 +33,6 @@ func eventstoreExpect(t *testing.T, expects ...expect) *eventstore.Eventstore {
Pusher: m.MockPusher,
},
)
- iam_repo.RegisterEventMappers(es)
- org.RegisterEventMappers(es)
- usr_repo.RegisterEventMappers(es)
- proj_repo.RegisterEventMappers(es)
- usergrant.RegisterEventMappers(es)
- key_repo.RegisterEventMappers(es)
- action_repo.RegisterEventMappers(es)
- session.RegisterEventMappers(es)
- idpintent.RegisterEventMappers(es)
- authrequest.RegisterEventMappers(es)
- oidcsession.RegisterEventMappers(es)
- quota_repo.RegisterEventMappers(es)
- limits.RegisterEventMappers(es)
- restrictions.RegisterEventMappers(es)
- feature.RegisterEventMappers(es)
- deviceauth.RegisterEventMappers(es)
return es
}
diff --git a/internal/crypto/database/database.go b/internal/crypto/database/database.go
index 2d8666fd0..7b27d223a 100644
--- a/internal/crypto/database/database.go
+++ b/internal/crypto/database/database.go
@@ -11,7 +11,7 @@ import (
"github.com/zitadel/zitadel/internal/zerrors"
)
-type database struct {
+type Database struct {
client *z_db.DB
masterKey string
encrypt func(key, masterKey string) (encryptedKey string, err error)
@@ -24,11 +24,11 @@ const (
encryptionKeysKeyCol = "key"
)
-func NewKeyStorage(client *z_db.DB, masterKey string) (*database, error) {
+func NewKeyStorage(client *z_db.DB, masterKey string) (*Database, error) {
if err := checkMasterKeyLength(masterKey); err != nil {
return nil, err
}
- return &database{
+ return &Database{
client: client,
masterKey: masterKey,
encrypt: crypto.EncryptAESString,
@@ -36,7 +36,7 @@ func NewKeyStorage(client *z_db.DB, masterKey string) (*database, error) {
}, nil
}
-func (d *database) ReadKeys() (crypto.Keys, error) {
+func (d *Database) ReadKeys() (crypto.Keys, error) {
keys := make(map[string]string)
stmt, args, err := sq.Select(encryptionKeysIDCol, encryptionKeysKeyCol).
From(EncryptionKeysTable).
@@ -67,7 +67,7 @@ func (d *database) ReadKeys() (crypto.Keys, error) {
return keys, nil
}
-func (d *database) ReadKey(id string) (_ *crypto.Key, err error) {
+func (d *Database) ReadKey(id string) (_ *crypto.Key, err error) {
stmt, args, err := sq.Select(encryptionKeysKeyCol).
From(EncryptionKeysTable).
Where(sq.Eq{encryptionKeysIDCol: id}).
@@ -99,7 +99,7 @@ func (d *database) ReadKey(id string) (_ *crypto.Key, err error) {
}, nil
}
-func (d *database) CreateKeys(ctx context.Context, keys ...*crypto.Key) error {
+func (d *Database) CreateKeys(ctx context.Context, keys ...*crypto.Key) error {
insert := sq.Insert(EncryptionKeysTable).
Columns(encryptionKeysIDCol, encryptionKeysKeyCol).PlaceholderFormat(sq.Dollar)
for _, key := range keys {
diff --git a/internal/crypto/database/database_test.go b/internal/crypto/database/database_test.go
index 80d39e058..becbd48d0 100644
--- a/internal/crypto/database/database_test.go
+++ b/internal/crypto/database/database_test.go
@@ -115,7 +115,7 @@ func Test_database_ReadKeys(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- d := &database{
+ d := &Database{
client: tt.fields.client.db,
masterKey: tt.fields.masterKey,
decrypt: tt.fields.decrypt,
@@ -247,7 +247,7 @@ func Test_database_ReadKey(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- d := &database{
+ d := &Database{
client: tt.fields.client.db,
masterKey: tt.fields.masterKey,
decrypt: tt.fields.decrypt,
@@ -391,7 +391,7 @@ func Test_database_CreateKeys(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- d := &database{
+ d := &Database{
client: tt.fields.client.db,
masterKey: tt.fields.masterKey,
encrypt: tt.fields.encrypt,
diff --git a/internal/eventstore/eventstore.go b/internal/eventstore/eventstore.go
index 0bf31afb4..7aeaa53ad 100644
--- a/internal/eventstore/eventstore.go
+++ b/internal/eventstore/eventstore.go
@@ -12,13 +12,7 @@ import (
// Eventstore abstracts all functions needed to store valid events
// and filters the stored events
type Eventstore struct {
- // TODO: get rid of this mutex,
- // or if we scale to >4vCPU use a sync.Map
- interceptorMutex sync.RWMutex
- eventInterceptors map[EventType]eventTypeInterceptors
- eventTypes []string
- aggregateTypes []string
- PushTimeout time.Duration
+ PushTimeout time.Duration
pusher Pusher
querier Querier
@@ -28,14 +22,36 @@ type Eventstore struct {
instancesMu sync.Mutex
}
+var (
+ eventInterceptors map[EventType]eventTypeInterceptors
+ eventTypes []string
+ aggregateTypes []string
+)
+
+// RegisterFilterEventMapper registers a function for mapping an eventstore event to an event
+func RegisterFilterEventMapper(aggregateType AggregateType, eventType EventType, mapper func(Event) (Event, error)) {
+ if mapper == nil || eventType == "" {
+ return
+ }
+
+ appendEventType(eventType)
+ appendAggregateType(aggregateType)
+
+ if eventInterceptors == nil {
+ eventInterceptors = make(map[EventType]eventTypeInterceptors)
+ }
+ interceptor := eventInterceptors[eventType]
+ interceptor.eventMapper = mapper
+ eventInterceptors[eventType] = interceptor
+}
+
type eventTypeInterceptors struct {
eventMapper func(Event) (Event, error)
}
func NewEventstore(config *Config) *Eventstore {
return &Eventstore{
- eventInterceptors: map[EventType]eventTypeInterceptors{},
- PushTimeout: config.PushTimeout,
+ PushTimeout: config.PushTimeout,
pusher: config.Pusher,
querier: config.Querier,
@@ -75,11 +91,11 @@ func (es *Eventstore) Push(ctx context.Context, cmds ...Command) ([]Event, error
}
func (es *Eventstore) EventTypes() []string {
- return es.eventTypes
+ return eventTypes
}
func (es *Eventstore) AggregateTypes() []string {
- return es.aggregateTypes
+ return aggregateTypes
}
// Filter filters the stored events based on the searchQuery
@@ -105,28 +121,21 @@ func (es *Eventstore) Filter(ctx context.Context, searchQuery *SearchQueryBuilde
func (es *Eventstore) mapEvents(events []Event) (mappedEvents []Event, err error) {
mappedEvents = make([]Event, len(events))
-
- es.interceptorMutex.RLock()
- defer es.interceptorMutex.RUnlock()
-
for i, event := range events {
mappedEvents[i], err = es.mapEventLocked(event)
if err != nil {
return nil, err
}
}
-
return mappedEvents, nil
}
func (es *Eventstore) mapEvent(event Event) (Event, error) {
- es.interceptorMutex.RLock()
- defer es.interceptorMutex.RUnlock()
return es.mapEventLocked(event)
}
func (es *Eventstore) mapEventLocked(event Event) (Event, error) {
- interceptors, ok := es.eventInterceptors[event.Type()]
+ interceptors, ok := eventInterceptors[event.Type()]
if !ok || interceptors.eventMapper == nil {
return BaseEventFromRepo(event), nil
}
@@ -204,24 +213,6 @@ func (es *Eventstore) FilterToQueryReducer(ctx context.Context, r QueryReducer)
return es.FilterToReducer(ctx, r.Query(), r)
}
-// RegisterFilterEventMapper registers a function for mapping an eventstore event to an event
-func (es *Eventstore) RegisterFilterEventMapper(aggregateType AggregateType, eventType EventType, mapper func(Event) (Event, error)) *Eventstore {
- if mapper == nil || eventType == "" {
- return es
- }
- es.interceptorMutex.Lock()
- defer es.interceptorMutex.Unlock()
-
- es.appendEventType(eventType)
- es.appendAggregateType(aggregateType)
-
- interceptor := es.eventInterceptors[eventType]
- interceptor.eventMapper = mapper
- es.eventInterceptors[eventType] = interceptor
-
- return es
-}
-
type Reducer func(event Event) error
type Querier interface {
@@ -242,18 +233,18 @@ type Pusher interface {
Push(ctx context.Context, commands ...Command) (_ []Event, err error)
}
-func (es *Eventstore) appendEventType(typ EventType) {
- i := sort.SearchStrings(es.eventTypes, string(typ))
- if i < len(es.eventTypes) && es.eventTypes[i] == string(typ) {
+func appendEventType(typ EventType) {
+ i := sort.SearchStrings(eventTypes, string(typ))
+ if i < len(eventTypes) && eventTypes[i] == string(typ) {
return
}
- es.eventTypes = append(es.eventTypes[:i], append([]string{string(typ)}, es.eventTypes[i:]...)...)
+ eventTypes = append(eventTypes[:i], append([]string{string(typ)}, eventTypes[i:]...)...)
}
-func (es *Eventstore) appendAggregateType(typ AggregateType) {
- i := sort.SearchStrings(es.aggregateTypes, string(typ))
- if len(es.aggregateTypes) > i && es.aggregateTypes[i] == string(typ) {
+func appendAggregateType(typ AggregateType) {
+ i := sort.SearchStrings(aggregateTypes, string(typ))
+ if len(aggregateTypes) > i && aggregateTypes[i] == string(typ) {
return
}
- es.aggregateTypes = append(es.aggregateTypes[:i], append([]string{string(typ)}, es.aggregateTypes[i:]...)...)
+ aggregateTypes = append(aggregateTypes[:i], append([]string{string(typ)}, aggregateTypes[i:]...)...)
}
diff --git a/internal/eventstore/eventstore_test.go b/internal/eventstore/eventstore_test.go
index fe8400be2..bbbb383bb 100644
--- a/internal/eventstore/eventstore_test.go
+++ b/internal/eventstore/eventstore_test.go
@@ -139,12 +139,11 @@ func Test_eventstore_RegisterFilterEventMapper(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- es := &Eventstore{
- eventInterceptors: tt.fields.eventMapper,
- }
- es = es.RegisterFilterEventMapper("test", tt.args.eventType, tt.args.mapper)
- if len(es.eventInterceptors) != tt.res.mapperCount {
- t.Errorf("unexpected mapper count: want %d, got %d", tt.res.mapperCount, len(es.eventInterceptors))
+
+ eventInterceptors = tt.fields.eventMapper
+ RegisterFilterEventMapper("test", tt.args.eventType, tt.args.mapper)
+ if len(eventInterceptors) != tt.res.mapperCount {
+ t.Errorf("unexpected mapper count: want %d, got %d", tt.res.mapperCount, len(eventInterceptors))
return
}
@@ -152,7 +151,7 @@ func Test_eventstore_RegisterFilterEventMapper(t *testing.T) {
return
}
- mapper := es.eventInterceptors[tt.args.eventType]
+ mapper := eventInterceptors[tt.args.eventType]
event, err := mapper.eventMapper(nil)
if err != nil {
t.Errorf("unexpected error %v", err)
@@ -694,15 +693,15 @@ func TestEventstore_Push(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ eventInterceptors = map[EventType]eventTypeInterceptors{}
es := &Eventstore{
- pusher: tt.fields.pusher,
- eventInterceptors: map[EventType]eventTypeInterceptors{},
+ pusher: tt.fields.pusher,
}
for eventType, mapper := range tt.fields.eventMapper {
- es = es.RegisterFilterEventMapper("test", eventType, mapper)
+ RegisterFilterEventMapper("test", eventType, mapper)
}
- if len(es.eventInterceptors) != len(tt.fields.eventMapper) {
- t.Errorf("register event mapper failed expected mapper amount: %d, got: %d", len(tt.fields.eventMapper), len(es.eventInterceptors))
+ if len(eventInterceptors) != len(tt.fields.eventMapper) {
+ t.Errorf("register event mapper failed expected mapper amount: %d, got: %d", len(tt.fields.eventMapper), len(eventInterceptors))
t.FailNow()
}
@@ -825,16 +824,16 @@ func TestEventstore_FilterEvents(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ eventInterceptors = map[EventType]eventTypeInterceptors{}
es := &Eventstore{
- querier: tt.fields.repo,
- eventInterceptors: map[EventType]eventTypeInterceptors{},
+ querier: tt.fields.repo,
}
for eventType, mapper := range tt.fields.eventMapper {
- es = es.RegisterFilterEventMapper("test", eventType, mapper)
+ RegisterFilterEventMapper("test", eventType, mapper)
}
- if len(es.eventInterceptors) != len(tt.fields.eventMapper) {
- t.Errorf("register event mapper failed expected mapper amount: %d, got: %d", len(tt.fields.eventMapper), len(es.eventInterceptors))
+ if len(eventInterceptors) != len(tt.fields.eventMapper) {
+ t.Errorf("register event mapper failed expected mapper amount: %d, got: %d", len(tt.fields.eventMapper), len(eventInterceptors))
t.FailNow()
}
@@ -1130,14 +1129,13 @@ func TestEventstore_FilterToReducer(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
es := &Eventstore{
- querier: tt.fields.repo,
- eventInterceptors: map[EventType]eventTypeInterceptors{},
+ querier: tt.fields.repo,
}
for eventType, mapper := range tt.fields.eventMapper {
- es = es.RegisterFilterEventMapper("test", eventType, mapper)
+ RegisterFilterEventMapper("test", eventType, mapper)
}
- if len(es.eventInterceptors) != len(tt.fields.eventMapper) {
- t.Errorf("register event mapper failed expected mapper amount: %d, got: %d", len(tt.fields.eventMapper), len(es.eventInterceptors))
+ if len(eventInterceptors) != len(tt.fields.eventMapper) {
+ t.Errorf("register event mapper failed expected mapper amount: %d, got: %d", len(tt.fields.eventMapper), len(eventInterceptors))
t.FailNow()
}
@@ -1246,14 +1244,12 @@ func TestEventstore_mapEvents(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- es := &Eventstore{
- eventInterceptors: map[EventType]eventTypeInterceptors{},
- }
+ es := &Eventstore{}
for eventType, mapper := range tt.fields.eventMapper {
- es = es.RegisterFilterEventMapper("test", eventType, mapper)
+ RegisterFilterEventMapper("test", eventType, mapper)
}
- if len(es.eventInterceptors) != len(tt.fields.eventMapper) {
- t.Errorf("register event mapper failed expected mapper amount: %d, got: %d", len(tt.fields.eventMapper), len(es.eventInterceptors))
+ if len(eventInterceptors) != len(tt.fields.eventMapper) {
+ t.Errorf("register event mapper failed expected mapper amount: %d, got: %d", len(tt.fields.eventMapper), len(eventInterceptors))
t.FailNow()
}
diff --git a/internal/eventstore/example_test.go b/internal/eventstore/example_test.go
index c1051f826..ee053d16d 100644
--- a/internal/eventstore/example_test.go
+++ b/internal/eventstore/example_test.go
@@ -294,10 +294,10 @@ func TestUserReadModel(t *testing.T) {
},
)
- es.RegisterFilterEventMapper(UserAddedEventMapper()).
- RegisterFilterEventMapper(UserFirstNameChangedMapper()).
- RegisterFilterEventMapper(UserPasswordCheckedMapper()).
- RegisterFilterEventMapper(UserDeletedMapper())
+ eventstore.RegisterFilterEventMapper(UserAddedEventMapper())
+ eventstore.RegisterFilterEventMapper(UserFirstNameChangedMapper())
+ eventstore.RegisterFilterEventMapper(UserPasswordCheckedMapper())
+ eventstore.RegisterFilterEventMapper(UserDeletedMapper())
events, err := es.Push(context.Background(),
NewUserAddedEvent("1", "hodor"),
diff --git a/internal/eventstore/handler/v2/event.go b/internal/eventstore/handler/v2/event.go
deleted file mode 100644
index f4b722504..000000000
--- a/internal/eventstore/handler/v2/event.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package handler
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/eventstore"
-)
-
-const (
- schedulerSucceeded = eventstore.EventType("system.projections.scheduler.succeeded")
- aggregateType = eventstore.AggregateType("system")
- aggregateID = "SYSTEM"
-)
-
-func (h *Handler) didProjectionInitialize(ctx context.Context) bool {
- events, err := h.es.Filter(ctx, eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- InstanceID("").
- AddQuery().
- AggregateTypes(aggregateType).
- AggregateIDs(aggregateID).
- EventTypes(schedulerSucceeded).
- EventData(map[string]interface{}{
- "name": h.projection.Name(),
- }).
- Builder(),
- )
- return len(events) > 0 && err == nil
-}
-
-func (h *Handler) setSucceededOnce(ctx context.Context) error {
- _, err := h.es.Push(ctx, &ProjectionSucceededEvent{
- BaseEvent: *eventstore.NewBaseEventForPush(ctx,
- eventstore.NewAggregate(ctx, aggregateID, aggregateType, "v1"),
- schedulerSucceeded,
- ),
- Name: h.projection.Name(),
- })
- return err
-}
-
-type ProjectionSucceededEvent struct {
- eventstore.BaseEvent `json:"-"`
- Name string `json:"name"`
-}
-
-func (p *ProjectionSucceededEvent) Payload() interface{} {
- return p
-}
-
-func (p *ProjectionSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
- return nil
-}
diff --git a/internal/eventstore/handler/v2/handler.go b/internal/eventstore/handler/v2/handler.go
index 36eb1ef13..37bb9718d 100644
--- a/internal/eventstore/handler/v2/handler.go
+++ b/internal/eventstore/handler/v2/handler.go
@@ -6,20 +6,26 @@ import (
"errors"
"math"
"math/rand"
+ "slices"
"sync"
"time"
"github.com/jackc/pgconn"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/migration"
+ "github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/pseudo"
)
type EventStore interface {
InstanceIDs(ctx context.Context, maxAge time.Duration, forceLoad bool, query *eventstore.SearchQueryBuilder) ([]string, error)
+ FilterToQueryReducer(ctx context.Context, reducer eventstore.QueryReducer) error
Filter(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error)
Push(ctx context.Context, cmds ...eventstore.Command) ([]eventstore.Event, error)
}
@@ -58,6 +64,70 @@ type Handler struct {
triggerWithoutEvents Reduce
}
+var _ migration.Migration = (*Handler)(nil)
+
+// Execute implements migration.Migration.
+func (h *Handler) Execute(ctx context.Context, startedEvent eventstore.Event) error {
+ start := time.Now()
+ logging.WithFields("projection", h.ProjectionName()).Info("projection starts prefilling")
+ logTicker := time.NewTicker(30 * time.Second)
+ go func() {
+ for range logTicker.C {
+ logging.WithFields("projection", h.ProjectionName()).Info("projection is prefilling")
+ }
+ }()
+
+ instanceIDs, err := h.existingInstances(ctx)
+ if err != nil {
+ return err
+ }
+
+ // default amount of workers is 10
+ workerCount := 10
+
+ if h.client.DB.Stats().MaxOpenConnections > 0 {
+ workerCount = h.client.DB.Stats().MaxOpenConnections / 4
+ }
+ // ensure that at least one worker is active
+ if workerCount == 0 {
+ workerCount = 1
+ }
+ // spawn less workers if not all workers needed
+ if workerCount > len(instanceIDs) {
+ workerCount = len(instanceIDs)
+ }
+
+ instances := make(chan string, workerCount)
+ var wg sync.WaitGroup
+ wg.Add(workerCount)
+ for i := 0; i < workerCount; i++ {
+ go h.executeInstances(ctx, instances, startedEvent, &wg)
+ }
+
+ for _, instance := range instanceIDs {
+ instances <- instance
+ }
+
+ close(instances)
+ wg.Wait()
+
+ logTicker.Stop()
+ logging.WithFields("projection", h.ProjectionName(), "took", time.Since(start)).Info("projections ended prefilling")
+ return nil
+}
+
+func (h *Handler) executeInstances(ctx context.Context, instances <-chan string, startedEvent eventstore.Event, wg *sync.WaitGroup) {
+ for instance := range instances {
+ h.triggerInstances(ctx, []string{instance}, WithMaxPosition(startedEvent.Position()))
+ }
+ wg.Done()
+}
+
+// String implements migration.Migration.
+func (h *Handler) String() string {
+ return h.ProjectionName()
+}
+
// nowFunc makes [time.Now] mockable
type nowFunc func() time.Time
@@ -111,21 +181,56 @@ func (h *Handler) Start(ctx context.Context) {
go h.subscribe(ctx)
}
-func (h *Handler) schedule(ctx context.Context) {
- // if there was no run before trigger within half a second
- start := randomizeStart(0, 0.5)
- t := time.NewTimer(start)
- didInitialize := h.didProjectionInitialize(ctx)
- if didInitialize {
- if !t.Stop() {
- <-t.C
- }
- // if there was a trigger before, start the projection
- // after a second (should generally be after the not initialized projections)
- // and its configured `RequeueEvery`
- reset := randomizeStart(1, h.requeueEvery.Seconds())
- t.Reset(reset)
+type checkInit struct {
+ didInit bool
+ projectionName string
+}
+
+// AppendEvents implements eventstore.QueryReducer.
+func (ci *checkInit) AppendEvents(...eventstore.Event) {
+ ci.didInit = true
+}
+
+// Query implements eventstore.QueryReducer.
+func (ci *checkInit) Query() *eventstore.SearchQueryBuilder {
+ return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ Limit(1).
+ InstanceID("").
+ AddQuery().
+ AggregateTypes(migration.SystemAggregate).
+ AggregateIDs(migration.SystemAggregateID).
+ EventTypes(migration.DoneType).
+ EventData(map[string]interface{}{
+ "name": ci.projectionName,
+ }).
+ Builder()
+}
+
+// Reduce implements eventstore.QueryReducer.
+func (*checkInit) Reduce() error {
+ return nil
+}
+
+var _ eventstore.QueryReducer = (*checkInit)(nil)
+
+func (h *Handler) didInitialize(ctx context.Context) bool {
+ initiated := checkInit{
+ projectionName: h.ProjectionName(),
}
+ err := h.es.FilterToQueryReducer(ctx, &initiated)
+ if err != nil {
+ return false
+ }
+ return initiated.didInit
+}
+
+func (h *Handler) schedule(ctx context.Context) {
+ // start the projection and its configured `RequeueEvery`
+ reset := randomizeStart(0, h.requeueEvery.Seconds())
+ if !h.didInitialize(ctx) {
+ reset = randomizeStart(0, 0.5)
+ }
+ t := time.NewTimer(reset)
for {
select {
@@ -133,40 +238,34 @@ func (h *Handler) schedule(ctx context.Context) {
t.Stop()
return
case <-t.C:
- instances, err := h.queryInstances(ctx, didInitialize)
+ instances, err := h.queryInstances(ctx)
h.log().OnError(err).Debug("unable to query instances")
- var instanceFailed bool
- scheduledCtx := call.WithTimestamp(ctx)
- for _, instance := range instances {
- instanceCtx := authz.WithInstanceID(scheduledCtx, instance)
-
- // simple implementation of do while
- _, err = h.Trigger(instanceCtx)
- instanceFailed = instanceFailed || err != nil
- h.log().WithField("instance", instance).OnError(err).Info("scheduled trigger failed")
- time.Sleep(h.retryFailedAfter)
- // retry if trigger failed
- for ; err != nil; _, err = h.Trigger(instanceCtx) {
- time.Sleep(h.retryFailedAfter)
- instanceFailed = instanceFailed || err != nil
- h.log().WithField("instance", instance).OnError(err).Info("scheduled trigger failed")
- if err == nil {
- break
- }
- }
- }
-
- if !didInitialize && !instanceFailed {
- err = h.setSucceededOnce(ctx)
- h.log().OnError(err).Debug("unable to set succeeded once")
- didInitialize = err == nil
- }
+ h.triggerInstances(call.WithTimestamp(ctx), instances)
t.Reset(h.requeueEvery)
}
}
}
+func (h *Handler) triggerInstances(ctx context.Context, instances []string, triggerOpts ...TriggerOpt) {
+ for _, instance := range instances {
+ instanceCtx := authz.WithInstanceID(ctx, instance)
+
+ // simple implementation of do while
+ _, err := h.Trigger(instanceCtx, triggerOpts...)
+ h.log().WithField("instance", instance).OnError(err).Debug("trigger failed")
+ time.Sleep(h.retryFailedAfter)
+ // retry if trigger failed
+ for ; err != nil; _, err = h.Trigger(instanceCtx, triggerOpts...) {
+ time.Sleep(h.retryFailedAfter)
+ h.log().WithField("instance", instance).OnError(err).Debug("trigger failed")
+ if err == nil {
+ break
+ }
+ }
+ }
+}
+
func randomizeStart(min, maxSeconds float64) time.Duration {
d := min + rand.Float64()*(maxSeconds-min)
return time.Duration(d*1000) * time.Millisecond
@@ -223,31 +322,84 @@ func checkAdditionalEvents(eventQueue chan eventstore.Event, event eventstore.Ev
}
}
-func (h *Handler) queryInstances(ctx context.Context, didInitialize bool) ([]string, error) {
+type existingInstances []string
+
+// AppendEvents implements eventstore.QueryReducer.
+func (ai *existingInstances) AppendEvents(events ...eventstore.Event) {
+ for _, event := range events {
+ switch event.Type() {
+ case instance.InstanceAddedEventType:
+ *ai = append(*ai, event.Aggregate().InstanceID)
+ case instance.InstanceRemovedEventType:
+ slices.DeleteFunc(*ai, func(s string) bool {
+ return s == event.Aggregate().InstanceID
+ })
+ }
+ }
+}
+
+// Query implements eventstore.QueryReducer.
+func (*existingInstances) Query() *eventstore.SearchQueryBuilder {
+ return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AddQuery().
+ AggregateTypes(instance.AggregateType).
+ EventTypes(
+ instance.InstanceAddedEventType,
+ instance.InstanceRemovedEventType,
+ ).
+ Builder()
+}
+
+// Reduce implements eventstore.QueryReducer.
+// reduce is not used as events are reduced during AppendEvents
+func (*existingInstances) Reduce() error {
+ return nil
+}
+
+var _ eventstore.QueryReducer = (*existingInstances)(nil)
+
+func (h *Handler) queryInstances(ctx context.Context) ([]string, error) {
+ if h.handleActiveInstances == 0 {
+ return h.existingInstances(ctx)
+ }
+
query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsInstanceIDs).
AwaitOpenTransactions().
AllowTimeTravel().
- ExcludedInstanceID("")
- if didInitialize && h.handleActiveInstances > 0 {
- query = query.
- CreationDateAfter(h.now().Add(-1 * h.handleActiveInstances))
+ CreationDateAfter(h.now().Add(-1 * h.handleActiveInstances))
+
+ return h.es.InstanceIDs(ctx, h.requeueEvery, false, query)
+}
+
+func (h *Handler) existingInstances(ctx context.Context) ([]string, error) {
+ ai := existingInstances{}
+ if err := h.es.FilterToQueryReducer(ctx, &ai); err != nil {
+ return nil, err
}
- return h.es.InstanceIDs(ctx, h.requeueEvery, !didInitialize, query)
+
+ return ai, nil
}
type triggerConfig struct {
awaitRunning bool
+ maxPosition float64
}
-type triggerOpt func(conf *triggerConfig)
+type TriggerOpt func(conf *triggerConfig)
-func WithAwaitRunning() triggerOpt {
+func WithAwaitRunning() TriggerOpt {
return func(conf *triggerConfig) {
conf.awaitRunning = true
}
}
-func (h *Handler) Trigger(ctx context.Context, opts ...triggerOpt) (_ context.Context, err error) {
+func WithMaxPosition(position float64) TriggerOpt {
+ return func(conf *triggerConfig) {
+ conf.maxPosition = position
+ }
+}
+
+func (h *Handler) Trigger(ctx context.Context, opts ...TriggerOpt) (_ context.Context, err error) {
config := new(triggerConfig)
for _, opt := range opts {
opt(config)
@@ -261,7 +413,7 @@ func (h *Handler) Trigger(ctx context.Context, opts ...triggerOpt) (_ context.Co
for i := 0; ; i++ {
additionalIteration, err := h.processEvents(ctx, config)
- h.log().OnError(err).Warn("process events failed")
+ h.log().OnError(err).Info("process events failed")
h.log().WithField("iteration", i).Debug("trigger iteration")
if !additionalIteration || err != nil {
return call.ResetTimestamp(ctx), err
@@ -350,6 +502,10 @@ func (h *Handler) processEvents(ctx context.Context, config *triggerConfig) (add
}
return additionalIteration, err
}
+ // stop execution if currentState.eventTimestamp >= config.maxCreatedAt
+ if config.maxPosition != 0 && currentState.position >= config.maxPosition {
+ return false, nil
+ }
var statements []*Statement
statements, additionalIteration, err = h.generateStatements(ctx, tx, currentState)
@@ -362,6 +518,7 @@ func (h *Handler) processEvents(ctx context.Context, config *triggerConfig) (add
}
lastProcessedIndex, err := h.executeStatements(ctx, tx, currentState, statements)
+ h.log().OnError(err).WithField("lastProcessedIndex", lastProcessedIndex).Debug("execution of statements failed")
if lastProcessedIndex < 0 {
return false, err
}
diff --git a/internal/eventstore/repository/search_query.go b/internal/eventstore/repository/search_query.go
index a9167607e..86bc2e26d 100644
--- a/internal/eventstore/repository/search_query.go
+++ b/internal/eventstore/repository/search_query.go
@@ -134,7 +134,6 @@ func QueryFromBuilder(builder *eventstore.SearchQueryBuilder) (*SearchQuery, err
for _, f := range []func(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter{
instanceIDFilter,
instanceIDsFilter,
- excludedInstanceIDFilter,
editorUserFilter,
resourceOwnerFilter,
positionAfterFilter,
@@ -184,14 +183,6 @@ func eventSequenceGreaterFilter(builder *eventstore.SearchQueryBuilder, query *S
return query.Sequence
}
-func excludedInstanceIDFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
- if len(builder.GetExcludedInstanceIDs()) == 0 {
- return nil
- }
- query.ExcludedInstances = NewFilter(FieldInstanceID, database.TextArray[string](builder.GetExcludedInstanceIDs()), OperationNotIn)
- return query.ExcludedInstances
-}
-
func creationDateAfterFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
if builder.GetCreationDateAfter().IsZero() {
return nil
diff --git a/internal/eventstore/search_query.go b/internal/eventstore/search_query.go
index 00b404eab..0c08a260e 100644
--- a/internal/eventstore/search_query.go
+++ b/internal/eventstore/search_query.go
@@ -19,7 +19,6 @@ type SearchQueryBuilder struct {
resourceOwner string
instanceID *string
instanceIDs []string
- excludedInstanceIDs []string
editorUser string
queries []*SearchQuery
tx *sql.Tx
@@ -83,10 +82,6 @@ func (b SearchQueryBuilder) GetAwaitOpenTransactions() bool {
return b.awaitOpenTransactions
}
-func (q SearchQueryBuilder) GetExcludedInstanceIDs() []string {
- return q.excludedInstanceIDs
-}
-
func (q SearchQueryBuilder) GetEventSequenceGreater() uint64 {
return q.eventSequenceGreater
}
@@ -289,12 +284,6 @@ func (builder *SearchQueryBuilder) SequenceGreater(sequence uint64) *SearchQuery
return builder
}
-// ExcludedInstanceID filters for events not having the given instanceIDs
-func (builder *SearchQueryBuilder) ExcludedInstanceID(instanceIDs ...string) *SearchQueryBuilder {
- builder.excludedInstanceIDs = instanceIDs
- return builder
-}
-
// CreationDateAfter filters for events which happened after the specified time
func (builder *SearchQueryBuilder) CreationDateAfter(creationDate time.Time) *SearchQueryBuilder {
if creationDate.IsZero() || creationDate.Unix() == 0 {
diff --git a/internal/integration/config/zitadel.yaml b/internal/integration/config/zitadel.yaml
index f4925881e..707cf180f 100644
--- a/internal/integration/config/zitadel.yaml
+++ b/internal/integration/config/zitadel.yaml
@@ -49,3 +49,6 @@ SystemAPIUsers:
- "SYSTEM_OWNER"
- "IAM_OWNER"
- "ORG_OWNER"
+
+InitProjections:
+ Enabled: true
\ No newline at end of file
diff --git a/internal/migration/command.go b/internal/migration/command.go
index d48f9462d..5ea4d9eb0 100644
--- a/internal/migration/command.go
+++ b/internal/migration/command.go
@@ -9,6 +9,13 @@ import (
"github.com/zitadel/zitadel/internal/zerrors"
)
+func init() {
+ eventstore.RegisterFilterEventMapper(SystemAggregate, StartedType, SetupMapper)
+ eventstore.RegisterFilterEventMapper(SystemAggregate, DoneType, SetupMapper)
+ eventstore.RegisterFilterEventMapper(SystemAggregate, failedType, SetupMapper)
+ eventstore.RegisterFilterEventMapper(SystemAggregate, repeatableDoneType, SetupMapper)
+}
+
// SetupStep is the command pushed on the eventstore
type SetupStep struct {
eventstore.BaseEvent `json:"-"`
@@ -23,7 +30,7 @@ func setupStartedCmd(ctx context.Context, migration Migration) eventstore.Comman
return &SetupStep{
BaseEvent: *eventstore.NewBaseEventForPush(
ctx,
- eventstore.NewAggregate(ctx, aggregateID, aggregateType, "v1"),
+ eventstore.NewAggregate(ctx, SystemAggregateID, SystemAggregate, "v1"),
StartedType),
migration: migration,
Name: migration.String(),
@@ -32,7 +39,7 @@ func setupStartedCmd(ctx context.Context, migration Migration) eventstore.Comman
func setupDoneCmd(ctx context.Context, migration Migration, err error) eventstore.Command {
ctx = authz.SetCtxData(service.WithService(ctx, "system"), authz.CtxData{UserID: "system", OrgID: "SYSTEM", ResourceOwner: "SYSTEM"})
- typ := doneType
+ typ := DoneType
var lastRun interface{}
if repeatable, ok := migration.(RepeatableMigration); ok {
typ = repeatableDoneType
@@ -51,7 +58,7 @@ func setupDoneCmd(ctx context.Context, migration Migration, err error) eventstor
s.BaseEvent = *eventstore.NewBaseEventForPush(
ctx,
- eventstore.NewAggregate(ctx, aggregateID, aggregateType, "v1"),
+ eventstore.NewAggregate(ctx, SystemAggregateID, SystemAggregate, "v1"),
typ)
return s
@@ -79,13 +86,6 @@ func (s *SetupStep) UniqueConstraints() []*eventstore.UniqueConstraint {
}
}
-func RegisterMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(aggregateType, StartedType, SetupMapper)
- es.RegisterFilterEventMapper(aggregateType, doneType, SetupMapper)
- es.RegisterFilterEventMapper(aggregateType, failedType, SetupMapper)
- es.RegisterFilterEventMapper(aggregateType, repeatableDoneType, SetupMapper)
-}
-
func SetupMapper(event eventstore.Event) (eventstore.Event, error) {
step := &SetupStep{
BaseEvent: *eventstore.BaseEventFromRepo(event),
diff --git a/internal/migration/migration.go b/internal/migration/migration.go
index 5c03f28d5..a2224340a 100644
--- a/internal/migration/migration.go
+++ b/internal/migration/migration.go
@@ -13,11 +13,11 @@ import (
const (
StartedType = eventstore.EventType("system.migration.started")
- doneType = eventstore.EventType("system.migration.done")
+ DoneType = eventstore.EventType("system.migration.done")
failedType = eventstore.EventType("system.migration.failed")
repeatableDoneType = eventstore.EventType("system.migration.repeatable.done")
- aggregateType = eventstore.AggregateType("system")
- aggregateID = "SYSTEM"
+ SystemAggregate = eventstore.AggregateType("system")
+ SystemAggregateID = "SYSTEM"
)
var (
@@ -26,7 +26,7 @@ var (
type Migration interface {
String() string
- Execute(context.Context) error
+ Execute(ctx context.Context, startedEvent eventstore.Event) error
}
type errCheckerMigration interface {
@@ -58,12 +58,13 @@ func Migrate(ctx context.Context, es *eventstore.Eventstore, migration Migration
return nil
}
- if _, err = es.Push(ctx, setupStartedCmd(ctx, migration)); err != nil && !continueOnErr(err) {
+ startedEvent, err := es.Push(ctx, setupStartedCmd(ctx, migration))
+ if err != nil && !continueOnErr(err) {
return err
}
logging.WithFields("name", migration.String()).Info("starting migration")
- err = migration.Execute(ctx)
+ err = migration.Execute(ctx, startedEvent[0])
logging.WithFields("name", migration.String()).OnError(err).Error("migration failed")
_, pushErr := es.Push(ctx, setupDoneCmd(ctx, migration, err))
@@ -95,7 +96,7 @@ type cancelMigration struct {
}
// Execute implements Migration
-func (*cancelMigration) Execute(context.Context) error {
+func (*cancelMigration) Execute(context.Context, eventstore.Event) error {
return nil
}
diff --git a/internal/migration/step.go b/internal/migration/step.go
index ed0ec52ad..036a0a105 100644
--- a/internal/migration/step.go
+++ b/internal/migration/step.go
@@ -19,9 +19,9 @@ type StepStates struct {
func (*StepStates) Query() *eventstore.SearchQueryBuilder {
return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
AddQuery().
- AggregateTypes(aggregateType).
- AggregateIDs(aggregateID).
- EventTypes(StartedType, doneType, repeatableDoneType, failedType).
+ AggregateTypes(SystemAggregate).
+ AggregateIDs(SystemAggregateID).
+ EventTypes(StartedType, DoneType, repeatableDoneType, failedType).
Builder()
}
@@ -38,7 +38,7 @@ func (s *StepStates) Reduce() error {
switch step.EventType {
case StartedType:
state.state = StepStarted
- case doneType:
+ case DoneType:
state.state = StepDone
case repeatableDoneType:
state.state = StepDone
diff --git a/internal/notification/projections.go b/internal/notification/projections.go
index 341e35146..cdb2a84b2 100644
--- a/internal/notification/projections.go
+++ b/internal/notification/projections.go
@@ -6,13 +6,16 @@ import (
"github.com/zitadel/zitadel/internal/command"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/notification/handlers"
_ "github.com/zitadel/zitadel/internal/notification/statik"
"github.com/zitadel/zitadel/internal/query"
"github.com/zitadel/zitadel/internal/query/projection"
)
-func Start(
+var projections []*handler.Handler
+
+func Register(
ctx context.Context,
userHandlerCustomConfig, quotaHandlerCustomConfig, telemetryHandlerCustomConfig projection.CustomConfig,
telemetryCfg handlers.TelemetryPusherConfig,
@@ -28,9 +31,19 @@ func Start(
) {
q := handlers.NewNotificationQueries(queries, es, externalDomain, externalPort, externalSecure, fileSystemPath, userEncryption, smtpEncryption, smsEncryption)
c := newChannels(q)
- handlers.NewUserNotifier(ctx, projection.ApplyCustomConfig(userHandlerCustomConfig), commands, q, c, otpEmailTmpl).Start(ctx)
- handlers.NewQuotaNotifier(ctx, projection.ApplyCustomConfig(quotaHandlerCustomConfig), commands, q, c).Start(ctx)
+ projections = append(projections, handlers.NewUserNotifier(ctx, projection.ApplyCustomConfig(userHandlerCustomConfig), commands, q, c, otpEmailTmpl))
+ projections = append(projections, handlers.NewQuotaNotifier(ctx, projection.ApplyCustomConfig(quotaHandlerCustomConfig), commands, q, c))
if telemetryCfg.Enabled {
- handlers.NewTelemetryPusher(ctx, telemetryCfg, projection.ApplyCustomConfig(telemetryHandlerCustomConfig), commands, q, c).Start(ctx)
+ projections = append(projections, handlers.NewTelemetryPusher(ctx, telemetryCfg, projection.ApplyCustomConfig(telemetryHandlerCustomConfig), commands, q, c))
}
}
+
+func Start(ctx context.Context) {
+ for _, projection := range projections {
+ projection.Start(ctx)
+ }
+}
+
+func Projections() []*handler.Handler {
+ return projections
+}
diff --git a/internal/query/projection/eventstore_mock_test.go b/internal/query/projection/eventstore_mock_test.go
index 672b19ae3..c1cdf434d 100644
--- a/internal/query/projection/eventstore_mock_test.go
+++ b/internal/query/projection/eventstore_mock_test.go
@@ -38,6 +38,13 @@ func (m *mockEventStore) Filter(ctx context.Context, queryFactory *eventstore.Se
return m.filterResponse[m.filterCounter-1], nil
}
+func (m *mockEventStore) FilterToQueryReducer(ctx context.Context, reducer eventstore.QueryReducer) error {
+ m.filterCounter++
+ events := m.filterResponse[m.filterCounter-1]
+ reducer.AppendEvents(events...)
+ return reducer.Reduce()
+}
+
func (m *mockEventStore) Push(ctx context.Context, cmds ...eventstore.Command) ([]eventstore.Event, error) {
m.pushCounter++
return m.pushResponse[m.pushCounter-1], nil
diff --git a/internal/query/projection/main_test.go b/internal/query/projection/main_test.go
index ac5251921..ba5789746 100644
--- a/internal/query/projection/main_test.go
+++ b/internal/query/projection/main_test.go
@@ -8,15 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/repository/mock"
- action_repo "github.com/zitadel/zitadel/internal/repository/action"
- iam_repo "github.com/zitadel/zitadel/internal/repository/instance"
- key_repo "github.com/zitadel/zitadel/internal/repository/keypair"
- "github.com/zitadel/zitadel/internal/repository/limits"
- "github.com/zitadel/zitadel/internal/repository/org"
- proj_repo "github.com/zitadel/zitadel/internal/repository/project"
- quota_repo "github.com/zitadel/zitadel/internal/repository/quota"
- usr_repo "github.com/zitadel/zitadel/internal/repository/user"
- "github.com/zitadel/zitadel/internal/repository/usergrant"
)
type expect func(mockRepository *mock.MockRepository)
@@ -32,15 +23,6 @@ func eventstoreExpect(t *testing.T, expects ...expect) *eventstore.Eventstore {
Pusher: m.MockPusher,
},
)
- iam_repo.RegisterEventMappers(es)
- org.RegisterEventMappers(es)
- usr_repo.RegisterEventMappers(es)
- proj_repo.RegisterEventMappers(es)
- quota_repo.RegisterEventMappers(es)
- limits.RegisterEventMappers(es)
- usergrant.RegisterEventMappers(es)
- key_repo.RegisterEventMappers(es)
- action_repo.RegisterEventMappers(es)
return es
}
diff --git a/internal/query/projection/projection.go b/internal/query/projection/projection.go
index 055aaa81a..7c67b5cc3 100644
--- a/internal/query/projection/projection.go
+++ b/internal/query/projection/projection.go
@@ -7,6 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore/handler/v2"
+ "github.com/zitadel/zitadel/internal/migration"
)
const (
@@ -76,6 +77,8 @@ var (
type projection interface {
Start(ctx context.Context)
Init(ctx context.Context) error
+ Trigger(ctx context.Context, opts ...handler.TriggerOpt) (_ context.Context, err error)
+ migration.Migration
}
var (
@@ -149,6 +152,10 @@ func Create(ctx context.Context, sqlClient *database.DB, es handler.EventStore,
return nil
}
+func Projections() []projection {
+ return projections
+}
+
func Init(ctx context.Context) error {
for _, p := range projections {
if err := p.Init(ctx); err != nil {
diff --git a/internal/query/query.go b/internal/query/query.go
index 1b48c44a4..6bae5f924 100644
--- a/internal/query/query.go
+++ b/internal/query/query.go
@@ -18,21 +18,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
- "github.com/zitadel/zitadel/internal/repository/action"
- "github.com/zitadel/zitadel/internal/repository/authrequest"
- "github.com/zitadel/zitadel/internal/repository/deviceauth"
- "github.com/zitadel/zitadel/internal/repository/idpintent"
- iam_repo "github.com/zitadel/zitadel/internal/repository/instance"
- "github.com/zitadel/zitadel/internal/repository/keypair"
- "github.com/zitadel/zitadel/internal/repository/limits"
- "github.com/zitadel/zitadel/internal/repository/oidcsession"
- "github.com/zitadel/zitadel/internal/repository/org"
- "github.com/zitadel/zitadel/internal/repository/project"
- "github.com/zitadel/zitadel/internal/repository/quota"
- "github.com/zitadel/zitadel/internal/repository/restrictions"
- "github.com/zitadel/zitadel/internal/repository/session"
- usr_repo "github.com/zitadel/zitadel/internal/repository/user"
- "github.com/zitadel/zitadel/internal/repository/usergrant"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -67,6 +52,7 @@ func StartQueries(
permissionCheck func(q *Queries) domain.PermissionCheck,
defaultAuditLogRetention time.Duration,
systemAPIUsers map[string]*authz.SystemAPIUser,
+ startProjections bool,
) (repo *Queries, err error) {
repo = &Queries{
eventstore: es,
@@ -86,21 +72,6 @@ func StartQueries(
},
defaultAuditLogRetention: defaultAuditLogRetention,
}
- iam_repo.RegisterEventMappers(repo.eventstore)
- usr_repo.RegisterEventMappers(repo.eventstore)
- org.RegisterEventMappers(repo.eventstore)
- project.RegisterEventMappers(repo.eventstore)
- action.RegisterEventMappers(repo.eventstore)
- keypair.RegisterEventMappers(repo.eventstore)
- usergrant.RegisterEventMappers(repo.eventstore)
- session.RegisterEventMappers(repo.eventstore)
- idpintent.RegisterEventMappers(repo.eventstore)
- authrequest.RegisterEventMappers(repo.eventstore)
- oidcsession.RegisterEventMappers(repo.eventstore)
- quota.RegisterEventMappers(repo.eventstore)
- limits.RegisterEventMappers(repo.eventstore)
- restrictions.RegisterEventMappers(repo.eventstore)
- deviceauth.RegisterEventMappers(repo.eventstore)
repo.checkPermission = permissionCheck(repo)
@@ -108,7 +79,9 @@ func StartQueries(
if err != nil {
return nil, err
}
- projection.Start(ctx)
+ if startProjections {
+ projection.Start(ctx)
+ }
return repo, nil
}
diff --git a/internal/query/query_test.go b/internal/query/query_test.go
index a7f43bbab..622638a33 100644
--- a/internal/query/query_test.go
+++ b/internal/query/query_test.go
@@ -10,21 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/repository/mock"
- action_repo "github.com/zitadel/zitadel/internal/repository/action"
- "github.com/zitadel/zitadel/internal/repository/authrequest"
- "github.com/zitadel/zitadel/internal/repository/deviceauth"
- "github.com/zitadel/zitadel/internal/repository/feature"
- "github.com/zitadel/zitadel/internal/repository/idpintent"
- iam_repo "github.com/zitadel/zitadel/internal/repository/instance"
- key_repo "github.com/zitadel/zitadel/internal/repository/keypair"
- "github.com/zitadel/zitadel/internal/repository/limits"
- "github.com/zitadel/zitadel/internal/repository/oidcsession"
- "github.com/zitadel/zitadel/internal/repository/org"
- proj_repo "github.com/zitadel/zitadel/internal/repository/project"
- quota_repo "github.com/zitadel/zitadel/internal/repository/quota"
- "github.com/zitadel/zitadel/internal/repository/session"
- usr_repo "github.com/zitadel/zitadel/internal/repository/user"
- "github.com/zitadel/zitadel/internal/repository/usergrant"
)
type expect func(mockRepository *mock.MockRepository)
@@ -41,21 +26,6 @@ func expectEventstore(expects ...expect) func(*testing.T) *eventstore.Eventstore
Pusher: m.MockPusher,
},
)
- iam_repo.RegisterEventMappers(es)
- org.RegisterEventMappers(es)
- usr_repo.RegisterEventMappers(es)
- proj_repo.RegisterEventMappers(es)
- usergrant.RegisterEventMappers(es)
- key_repo.RegisterEventMappers(es)
- action_repo.RegisterEventMappers(es)
- session.RegisterEventMappers(es)
- idpintent.RegisterEventMappers(es)
- authrequest.RegisterEventMappers(es)
- oidcsession.RegisterEventMappers(es)
- quota_repo.RegisterEventMappers(es)
- limits.RegisterEventMappers(es)
- feature.RegisterEventMappers(es)
- deviceauth.RegisterEventMappers(es)
return es
}
}
diff --git a/internal/repository/action/eventstore.go b/internal/repository/action/eventstore.go
index c97268302..dd0c399b7 100644
--- a/internal/repository/action/eventstore.go
+++ b/internal/repository/action/eventstore.go
@@ -2,10 +2,10 @@ package action
import "github.com/zitadel/zitadel/internal/eventstore"
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, AddedEventType, AddedEventMapper).
- RegisterFilterEventMapper(AggregateType, ChangedEventType, ChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, DeactivatedEventType, DeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, ReactivatedEventType, ReactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, RemovedEventType, RemovedEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, AddedEventType, AddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ChangedEventType, ChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DeactivatedEventType, DeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ReactivatedEventType, ReactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, RemovedEventType, RemovedEventMapper)
}
diff --git a/internal/repository/authrequest/eventstore.go b/internal/repository/authrequest/eventstore.go
index c1bfed7dc..1e1e08b46 100644
--- a/internal/repository/authrequest/eventstore.go
+++ b/internal/repository/authrequest/eventstore.go
@@ -2,11 +2,11 @@ package authrequest
import "github.com/zitadel/zitadel/internal/eventstore"
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, AddedType, AddedEventMapper).
- RegisterFilterEventMapper(AggregateType, SessionLinkedType, SessionLinkedEventMapper).
- RegisterFilterEventMapper(AggregateType, CodeAddedType, CodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, CodeExchangedType, CodeExchangedEventMapper).
- RegisterFilterEventMapper(AggregateType, FailedType, FailedEventMapper).
- RegisterFilterEventMapper(AggregateType, SucceededType, SucceededEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, AddedType, AddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SessionLinkedType, SessionLinkedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, CodeAddedType, CodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, CodeExchangedType, CodeExchangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, FailedType, FailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SucceededType, SucceededEventMapper)
}
diff --git a/internal/repository/deviceauth/eventstore.go b/internal/repository/deviceauth/eventstore.go
index 6ebdf71b6..75ce37c9e 100644
--- a/internal/repository/deviceauth/eventstore.go
+++ b/internal/repository/deviceauth/eventstore.go
@@ -2,8 +2,8 @@ package deviceauth
import "github.com/zitadel/zitadel/internal/eventstore"
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, AddedEventType, eventstore.GenericEventMapper[AddedEvent]).
- RegisterFilterEventMapper(AggregateType, ApprovedEventType, eventstore.GenericEventMapper[ApprovedEvent]).
- RegisterFilterEventMapper(AggregateType, CanceledEventType, eventstore.GenericEventMapper[CanceledEvent])
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, AddedEventType, eventstore.GenericEventMapper[AddedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, ApprovedEventType, eventstore.GenericEventMapper[ApprovedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, CanceledEventType, eventstore.GenericEventMapper[CanceledEvent])
}
diff --git a/internal/repository/feature/eventstore.go b/internal/repository/feature/eventstore.go
index 4fe6a3727..41712e2e9 100644
--- a/internal/repository/feature/eventstore.go
+++ b/internal/repository/feature/eventstore.go
@@ -4,6 +4,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, DefaultLoginInstanceEventType, eventstore.GenericEventMapper[SetEvent[Boolean]])
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, DefaultLoginInstanceEventType, eventstore.GenericEventMapper[SetEvent[Boolean]])
}
diff --git a/internal/repository/idpintent/eventstore.go b/internal/repository/idpintent/eventstore.go
index 1c7417ef0..ea9480397 100644
--- a/internal/repository/idpintent/eventstore.go
+++ b/internal/repository/idpintent/eventstore.go
@@ -4,11 +4,11 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, StartedEventType, StartedEventMapper).
- RegisterFilterEventMapper(AggregateType, SucceededEventType, SucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, SAMLSucceededEventType, SAMLSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, SAMLRequestEventType, SAMLRequestEventMapper).
- RegisterFilterEventMapper(AggregateType, LDAPSucceededEventType, LDAPSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, FailedEventType, FailedEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, StartedEventType, StartedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SucceededEventType, SucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SAMLSucceededEventType, SAMLSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SAMLRequestEventType, SAMLRequestEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LDAPSucceededEventType, LDAPSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, FailedEventType, FailedEventMapper)
}
diff --git a/internal/repository/instance/eventstore.go b/internal/repository/instance/eventstore.go
index c9d750e3b..6b21ab6f2 100644
--- a/internal/repository/instance/eventstore.go
+++ b/internal/repository/instance/eventstore.go
@@ -4,119 +4,119 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, DefaultOrgSetEventType, DefaultOrgSetMapper).
- RegisterFilterEventMapper(AggregateType, ProjectSetEventType, ProjectSetMapper).
- RegisterFilterEventMapper(AggregateType, ConsoleSetEventType, ConsoleSetMapper).
- RegisterFilterEventMapper(AggregateType, DefaultLanguageSetEventType, DefaultLanguageSetMapper).
- RegisterFilterEventMapper(AggregateType, SecretGeneratorAddedEventType, SecretGeneratorAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, SecretGeneratorChangedEventType, SecretGeneratorChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, SecretGeneratorRemovedEventType, SecretGeneratorRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMTPConfigAddedEventType, SMTPConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMTPConfigChangedEventType, SMTPConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMTPConfigPasswordChangedEventType, SMTPConfigPasswordChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMTPConfigRemovedEventType, SMTPConfigRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMSConfigTwilioAddedEventType, SMSConfigTwilioAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMSConfigTwilioChangedEventType, SMSConfigTwilioChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMSConfigTwilioTokenChangedEventType, SMSConfigTwilioTokenChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMSConfigActivatedEventType, SMSConfigActivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMSConfigDeactivatedEventType, SMSConfigDeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, SMSConfigRemovedEventType, SMSConfigRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, DebugNotificationProviderFileAddedEventType, DebugNotificationProviderFileAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, DebugNotificationProviderFileChangedEventType, DebugNotificationProviderFileChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, DebugNotificationProviderFileRemovedEventType, DebugNotificationProviderFileRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, DebugNotificationProviderLogAddedEventType, DebugNotificationProviderLogAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, DebugNotificationProviderLogChangedEventType, DebugNotificationProviderLogChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, DebugNotificationProviderLogRemovedEventType, DebugNotificationProviderLogRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCSettingsAddedEventType, OIDCSettingsAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCSettingsChangedEventType, OIDCSettingsChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, SecurityPolicySetEventType, SecurityPolicySetEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyAddedEventType, LabelPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyChangedEventType, LabelPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyActivatedEventType, LabelPolicyActivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyLogoAddedEventType, LabelPolicyLogoAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyLogoRemovedEventType, LabelPolicyLogoRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyIconAddedEventType, LabelPolicyIconAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyIconRemovedEventType, LabelPolicyIconRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyLogoDarkAddedEventType, LabelPolicyLogoDarkAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyLogoDarkRemovedEventType, LabelPolicyLogoDarkRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyIconDarkAddedEventType, LabelPolicyIconDarkAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyIconDarkRemovedEventType, LabelPolicyIconDarkRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyFontAddedEventType, LabelPolicyFontAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyFontRemovedEventType, LabelPolicyFontRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyAssetsRemovedEventType, LabelPolicyAssetsRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyAddedEventType, LoginPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyChangedEventType, LoginPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, DomainPolicyAddedEventType, DomainPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, DomainPolicyChangedEventType, DomainPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordAgePolicyAddedEventType, PasswordAgePolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordAgePolicyChangedEventType, PasswordAgePolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyAddedEventType, PasswordComplexityPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyChangedEventType, PasswordComplexityPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, LockoutPolicyAddedEventType, LockoutPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LockoutPolicyChangedEventType, LockoutPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, PrivacyPolicyAddedEventType, PrivacyPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, PrivacyPolicyChangedEventType, PrivacyPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberAddedEventType, MemberAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberChangedEventType, MemberChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberRemovedEventType, MemberRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberCascadeRemovedEventType, MemberCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigAddedEventType, IDPConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigChangedEventType, IDPConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigRemovedEventType, IDPConfigRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigDeactivatedEventType, IDPConfigDeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigReactivatedEventType, IDPConfigReactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPOIDCConfigAddedEventType, IDPOIDCConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPOIDCConfigChangedEventType, IDPOIDCConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPJWTConfigAddedEventType, IDPJWTConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPJWTConfigChangedEventType, IDPJWTConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OAuthIDPAddedEventType, OAuthIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OAuthIDPChangedEventType, OAuthIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCIDPAddedEventType, OIDCIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCIDPChangedEventType, OIDCIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCIDPMigratedAzureADEventType, OIDCIDPMigratedAzureADEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCIDPMigratedGoogleEventType, OIDCIDPMigratedGoogleEventMapper).
- RegisterFilterEventMapper(AggregateType, JWTIDPAddedEventType, JWTIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, JWTIDPChangedEventType, JWTIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, AzureADIDPAddedEventType, AzureADIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, AzureADIDPChangedEventType, AzureADIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitHubIDPAddedEventType, GitHubIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitHubIDPChangedEventType, GitHubIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitHubEnterpriseIDPAddedEventType, GitHubEnterpriseIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitHubEnterpriseIDPChangedEventType, GitHubEnterpriseIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitLabIDPAddedEventType, GitLabIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitLabIDPChangedEventType, GitLabIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitLabSelfHostedIDPAddedEventType, GitLabSelfHostedIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitLabSelfHostedIDPChangedEventType, GitLabSelfHostedIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GoogleIDPAddedEventType, GoogleIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GoogleIDPChangedEventType, GoogleIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, LDAPIDPAddedEventType, LDAPIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LDAPIDPChangedEventType, LDAPIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, AppleIDPAddedEventType, AppleIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, AppleIDPChangedEventType, AppleIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, SAMLIDPAddedEventType, SAMLIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, SAMLIDPChangedEventType, SAMLIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPRemovedEventType, IDPRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderAddedEventType, IdentityProviderAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderRemovedEventType, IdentityProviderRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderCascadeRemovedEventType, IdentityProviderCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicySecondFactorAddedEventType, SecondFactorAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicySecondFactorRemovedEventType, SecondFactorRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyMultiFactorAddedEventType, MultiFactorAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyMultiFactorRemovedEventType, MultiFactorRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTemplateAddedEventType, MailTemplateAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTemplateChangedEventType, MailTemplateChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTextAddedEventType, MailTextAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTextChangedEventType, MailTextChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, CustomTextSetEventType, CustomTextSetEventMapper).
- RegisterFilterEventMapper(AggregateType, CustomTextRemovedEventType, CustomTextRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, CustomTextTemplateRemovedEventType, CustomTextTemplateRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, InstanceDomainAddedEventType, DomainAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, InstanceDomainPrimarySetEventType, DomainPrimarySetEventMapper).
- RegisterFilterEventMapper(AggregateType, InstanceDomainRemovedEventType, DomainRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, InstanceAddedEventType, InstanceAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, InstanceChangedEventType, InstanceChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, InstanceRemovedEventType, InstanceRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, NotificationPolicyAddedEventType, NotificationPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, NotificationPolicyChangedEventType, NotificationPolicyChangedEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, DefaultOrgSetEventType, DefaultOrgSetMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ProjectSetEventType, ProjectSetMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ConsoleSetEventType, ConsoleSetMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DefaultLanguageSetEventType, DefaultLanguageSetMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SecretGeneratorAddedEventType, SecretGeneratorAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SecretGeneratorChangedEventType, SecretGeneratorChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SecretGeneratorRemovedEventType, SecretGeneratorRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMTPConfigAddedEventType, SMTPConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMTPConfigChangedEventType, SMTPConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMTPConfigPasswordChangedEventType, SMTPConfigPasswordChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMTPConfigRemovedEventType, SMTPConfigRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMSConfigTwilioAddedEventType, SMSConfigTwilioAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMSConfigTwilioChangedEventType, SMSConfigTwilioChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMSConfigTwilioTokenChangedEventType, SMSConfigTwilioTokenChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMSConfigActivatedEventType, SMSConfigActivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMSConfigDeactivatedEventType, SMSConfigDeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SMSConfigRemovedEventType, SMSConfigRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DebugNotificationProviderFileAddedEventType, DebugNotificationProviderFileAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DebugNotificationProviderFileChangedEventType, DebugNotificationProviderFileChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DebugNotificationProviderFileRemovedEventType, DebugNotificationProviderFileRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DebugNotificationProviderLogAddedEventType, DebugNotificationProviderLogAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DebugNotificationProviderLogChangedEventType, DebugNotificationProviderLogChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DebugNotificationProviderLogRemovedEventType, DebugNotificationProviderLogRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCSettingsAddedEventType, OIDCSettingsAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCSettingsChangedEventType, OIDCSettingsChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SecurityPolicySetEventType, SecurityPolicySetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyAddedEventType, LabelPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyChangedEventType, LabelPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyActivatedEventType, LabelPolicyActivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyLogoAddedEventType, LabelPolicyLogoAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyLogoRemovedEventType, LabelPolicyLogoRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyIconAddedEventType, LabelPolicyIconAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyIconRemovedEventType, LabelPolicyIconRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyLogoDarkAddedEventType, LabelPolicyLogoDarkAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyLogoDarkRemovedEventType, LabelPolicyLogoDarkRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyIconDarkAddedEventType, LabelPolicyIconDarkAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyIconDarkRemovedEventType, LabelPolicyIconDarkRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyFontAddedEventType, LabelPolicyFontAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyFontRemovedEventType, LabelPolicyFontRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyAssetsRemovedEventType, LabelPolicyAssetsRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyAddedEventType, LoginPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyChangedEventType, LoginPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DomainPolicyAddedEventType, DomainPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DomainPolicyChangedEventType, DomainPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordAgePolicyAddedEventType, PasswordAgePolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordAgePolicyChangedEventType, PasswordAgePolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyAddedEventType, PasswordComplexityPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyChangedEventType, PasswordComplexityPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LockoutPolicyAddedEventType, LockoutPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LockoutPolicyChangedEventType, LockoutPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PrivacyPolicyAddedEventType, PrivacyPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PrivacyPolicyChangedEventType, PrivacyPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberAddedEventType, MemberAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberChangedEventType, MemberChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberRemovedEventType, MemberRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberCascadeRemovedEventType, MemberCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigAddedEventType, IDPConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigChangedEventType, IDPConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigRemovedEventType, IDPConfigRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigDeactivatedEventType, IDPConfigDeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigReactivatedEventType, IDPConfigReactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPOIDCConfigAddedEventType, IDPOIDCConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPOIDCConfigChangedEventType, IDPOIDCConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPJWTConfigAddedEventType, IDPJWTConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPJWTConfigChangedEventType, IDPJWTConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OAuthIDPAddedEventType, OAuthIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OAuthIDPChangedEventType, OAuthIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCIDPAddedEventType, OIDCIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCIDPChangedEventType, OIDCIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCIDPMigratedAzureADEventType, OIDCIDPMigratedAzureADEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCIDPMigratedGoogleEventType, OIDCIDPMigratedGoogleEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, JWTIDPAddedEventType, JWTIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, JWTIDPChangedEventType, JWTIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AzureADIDPAddedEventType, AzureADIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AzureADIDPChangedEventType, AzureADIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitHubIDPAddedEventType, GitHubIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitHubIDPChangedEventType, GitHubIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitHubEnterpriseIDPAddedEventType, GitHubEnterpriseIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitHubEnterpriseIDPChangedEventType, GitHubEnterpriseIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitLabIDPAddedEventType, GitLabIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitLabIDPChangedEventType, GitLabIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitLabSelfHostedIDPAddedEventType, GitLabSelfHostedIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitLabSelfHostedIDPChangedEventType, GitLabSelfHostedIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GoogleIDPAddedEventType, GoogleIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GoogleIDPChangedEventType, GoogleIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LDAPIDPAddedEventType, LDAPIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LDAPIDPChangedEventType, LDAPIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AppleIDPAddedEventType, AppleIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AppleIDPChangedEventType, AppleIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SAMLIDPAddedEventType, SAMLIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SAMLIDPChangedEventType, SAMLIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPRemovedEventType, IDPRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderAddedEventType, IdentityProviderAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderRemovedEventType, IdentityProviderRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderCascadeRemovedEventType, IdentityProviderCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicySecondFactorAddedEventType, SecondFactorAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicySecondFactorRemovedEventType, SecondFactorRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyMultiFactorAddedEventType, MultiFactorAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyMultiFactorRemovedEventType, MultiFactorRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTemplateAddedEventType, MailTemplateAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTemplateChangedEventType, MailTemplateChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTextAddedEventType, MailTextAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTextChangedEventType, MailTextChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, CustomTextSetEventType, CustomTextSetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, CustomTextRemovedEventType, CustomTextRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, CustomTextTemplateRemovedEventType, CustomTextTemplateRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, InstanceDomainAddedEventType, DomainAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, InstanceDomainPrimarySetEventType, DomainPrimarySetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, InstanceDomainRemovedEventType, DomainRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, InstanceAddedEventType, InstanceAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, InstanceChangedEventType, InstanceChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, InstanceRemovedEventType, InstanceRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, NotificationPolicyAddedEventType, NotificationPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, NotificationPolicyChangedEventType, NotificationPolicyChangedEventMapper)
}
diff --git a/internal/repository/keypair/eventstore.go b/internal/repository/keypair/eventstore.go
index 8fde03134..7c4db2dfc 100644
--- a/internal/repository/keypair/eventstore.go
+++ b/internal/repository/keypair/eventstore.go
@@ -4,7 +4,7 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, AddedEventType, AddedEventMapper)
- es.RegisterFilterEventMapper(AggregateType, AddedCertificateEventType, AddedCertificateEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, AddedEventType, AddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AddedCertificateEventType, AddedCertificateEventMapper)
}
diff --git a/internal/repository/limits/eventstore.go b/internal/repository/limits/eventstore.go
index 5c2ab16c4..3bbb604ee 100644
--- a/internal/repository/limits/eventstore.go
+++ b/internal/repository/limits/eventstore.go
@@ -4,7 +4,7 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, SetEventType, SetEventMapper).
- RegisterFilterEventMapper(AggregateType, ResetEventType, ResetEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, SetEventType, SetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ResetEventType, ResetEventMapper)
}
diff --git a/internal/repository/milestone/eventstore.go b/internal/repository/milestone/eventstore.go
index 4f82b0819..18b94d702 100644
--- a/internal/repository/milestone/eventstore.go
+++ b/internal/repository/milestone/eventstore.go
@@ -4,6 +4,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, PushedEventType, PushedEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, PushedEventType, PushedEventMapper)
}
diff --git a/internal/repository/oidcsession/eventstore.go b/internal/repository/oidcsession/eventstore.go
index 091bcf5d4..4fe6f1abc 100644
--- a/internal/repository/oidcsession/eventstore.go
+++ b/internal/repository/oidcsession/eventstore.go
@@ -4,12 +4,12 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, AddedType, eventstore.GenericEventMapper[AddedEvent]).
- RegisterFilterEventMapper(AggregateType, AccessTokenAddedType, eventstore.GenericEventMapper[AccessTokenAddedEvent]).
- RegisterFilterEventMapper(AggregateType, AccessTokenRevokedType, eventstore.GenericEventMapper[AccessTokenRevokedEvent]).
- RegisterFilterEventMapper(AggregateType, RefreshTokenAddedType, eventstore.GenericEventMapper[RefreshTokenAddedEvent]).
- RegisterFilterEventMapper(AggregateType, RefreshTokenRenewedType, eventstore.GenericEventMapper[RefreshTokenRenewedEvent]).
- RegisterFilterEventMapper(AggregateType, RefreshTokenRevokedType, eventstore.GenericEventMapper[RefreshTokenRevokedEvent])
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, AddedType, eventstore.GenericEventMapper[AddedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, AccessTokenAddedType, eventstore.GenericEventMapper[AccessTokenAddedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, AccessTokenRevokedType, eventstore.GenericEventMapper[AccessTokenRevokedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, RefreshTokenAddedType, eventstore.GenericEventMapper[RefreshTokenAddedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, RefreshTokenRenewedType, eventstore.GenericEventMapper[RefreshTokenRenewedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, RefreshTokenRevokedType, eventstore.GenericEventMapper[RefreshTokenRevokedEvent])
}
diff --git a/internal/repository/org/eventstore.go b/internal/repository/org/eventstore.go
index ca24c58f9..d1efa75df 100644
--- a/internal/repository/org/eventstore.go
+++ b/internal/repository/org/eventstore.go
@@ -4,114 +4,114 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, OrgAddedEventType, OrgAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgChangedEventType, OrgChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgDeactivatedEventType, OrgDeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgReactivatedEventType, OrgReactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgRemovedEventType, OrgRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgDomainAddedEventType, DomainAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgDomainVerificationAddedEventType, DomainVerificationAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgDomainVerificationFailedEventType, DomainVerificationFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgDomainVerifiedEventType, DomainVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgDomainPrimarySetEventType, DomainPrimarySetEventMapper).
- RegisterFilterEventMapper(AggregateType, OrgDomainRemovedEventType, DomainRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberAddedEventType, MemberAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberChangedEventType, MemberChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberRemovedEventType, MemberRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberCascadeRemovedEventType, MemberCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyAddedEventType, LabelPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyChangedEventType, LabelPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyActivatedEventType, LabelPolicyActivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyRemovedEventType, LabelPolicyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyLogoAddedEventType, LabelPolicyLogoAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyLogoRemovedEventType, LabelPolicyLogoRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyIconAddedEventType, LabelPolicyIconAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyIconRemovedEventType, LabelPolicyIconRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyLogoDarkAddedEventType, LabelPolicyLogoDarkAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyLogoDarkRemovedEventType, LabelPolicyLogoDarkRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyIconDarkAddedEventType, LabelPolicyIconDarkAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyIconDarkRemovedEventType, LabelPolicyIconDarkRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyFontAddedEventType, LabelPolicyFontAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyFontRemovedEventType, LabelPolicyFontRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LabelPolicyAssetsRemovedEventType, LabelPolicyAssetsRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyAddedEventType, LoginPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyChangedEventType, LoginPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyRemovedEventType, LoginPolicyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicySecondFactorAddedEventType, SecondFactorAddedEventEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicySecondFactorRemovedEventType, SecondFactorRemovedEventEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyMultiFactorAddedEventType, MultiFactorAddedEventEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyMultiFactorRemovedEventType, MultiFactorRemovedEventEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderAddedEventType, IdentityProviderAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderRemovedEventType, IdentityProviderRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderCascadeRemovedEventType, IdentityProviderCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, DomainPolicyAddedEventType, DomainPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, DomainPolicyChangedEventType, DomainPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, DomainPolicyRemovedEventType, DomainPolicyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordAgePolicyAddedEventType, PasswordAgePolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordAgePolicyChangedEventType, PasswordAgePolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordAgePolicyRemovedEventType, PasswordAgePolicyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyAddedEventType, PasswordComplexityPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyChangedEventType, PasswordComplexityPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyRemovedEventType, PasswordComplexityPolicyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, LockoutPolicyAddedEventType, LockoutPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LockoutPolicyChangedEventType, LockoutPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, LockoutPolicyRemovedEventType, LockoutPolicyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, PrivacyPolicyAddedEventType, PrivacyPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, PrivacyPolicyChangedEventType, PrivacyPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, PrivacyPolicyRemovedEventType, PrivacyPolicyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTemplateAddedEventType, MailTemplateAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTemplateChangedEventType, MailTemplateChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTemplateRemovedEventType, MailTemplateRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTextAddedEventType, MailTextAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTextChangedEventType, MailTextChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MailTextRemovedEventType, MailTextRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, CustomTextSetEventType, CustomTextSetEventMapper).
- RegisterFilterEventMapper(AggregateType, CustomTextRemovedEventType, CustomTextRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, CustomTextTemplateRemovedEventType, CustomTextTemplateRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigAddedEventType, IDPConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigChangedEventType, IDPConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigRemovedEventType, IDPConfigRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigDeactivatedEventType, IDPConfigDeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPConfigReactivatedEventType, IDPConfigReactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPOIDCConfigAddedEventType, IDPOIDCConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPOIDCConfigChangedEventType, IDPOIDCConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPJWTConfigAddedEventType, IDPJWTConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPJWTConfigChangedEventType, IDPJWTConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OAuthIDPAddedEventType, OAuthIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OAuthIDPChangedEventType, OAuthIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCIDPAddedEventType, OIDCIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCIDPChangedEventType, OIDCIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCIDPMigratedAzureADEventType, OIDCIDPMigratedAzureADEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCIDPMigratedGoogleEventType, OIDCIDPMigratedGoogleEventMapper).
- RegisterFilterEventMapper(AggregateType, JWTIDPAddedEventType, JWTIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, JWTIDPChangedEventType, JWTIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, AzureADIDPAddedEventType, AzureADIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, AzureADIDPChangedEventType, AzureADIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitHubIDPAddedEventType, GitHubIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitHubIDPChangedEventType, GitHubIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitHubEnterpriseIDPAddedEventType, GitHubEnterpriseIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitHubEnterpriseIDPChangedEventType, GitHubEnterpriseIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitLabIDPAddedEventType, GitLabIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitLabIDPChangedEventType, GitLabIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitLabSelfHostedIDPAddedEventType, GitLabSelfHostedIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GitLabSelfHostedIDPChangedEventType, GitLabSelfHostedIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GoogleIDPAddedEventType, GoogleIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GoogleIDPChangedEventType, GoogleIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, LDAPIDPAddedEventType, LDAPIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, LDAPIDPChangedEventType, LDAPIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, AppleIDPAddedEventType, AppleIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, AppleIDPChangedEventType, AppleIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, SAMLIDPAddedEventType, SAMLIDPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, SAMLIDPChangedEventType, SAMLIDPChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, IDPRemovedEventType, IDPRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, TriggerActionsSetEventType, TriggerActionsSetEventMapper).
- RegisterFilterEventMapper(AggregateType, TriggerActionsCascadeRemovedEventType, TriggerActionsCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, FlowClearedEventType, FlowClearedEventMapper).
- RegisterFilterEventMapper(AggregateType, MetadataSetType, MetadataSetEventMapper).
- RegisterFilterEventMapper(AggregateType, MetadataRemovedType, MetadataRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MetadataRemovedAllType, MetadataRemovedAllEventMapper).
- RegisterFilterEventMapper(AggregateType, NotificationPolicyAddedEventType, NotificationPolicyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, NotificationPolicyChangedEventType, NotificationPolicyChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, NotificationPolicyRemovedEventType, NotificationPolicyRemovedEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgAddedEventType, OrgAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgChangedEventType, OrgChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgDeactivatedEventType, OrgDeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgReactivatedEventType, OrgReactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgRemovedEventType, OrgRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgDomainAddedEventType, DomainAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgDomainVerificationAddedEventType, DomainVerificationAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgDomainVerificationFailedEventType, DomainVerificationFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgDomainVerifiedEventType, DomainVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgDomainPrimarySetEventType, DomainPrimarySetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OrgDomainRemovedEventType, DomainRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberAddedEventType, MemberAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberChangedEventType, MemberChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberRemovedEventType, MemberRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberCascadeRemovedEventType, MemberCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyAddedEventType, LabelPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyChangedEventType, LabelPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyActivatedEventType, LabelPolicyActivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyRemovedEventType, LabelPolicyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyLogoAddedEventType, LabelPolicyLogoAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyLogoRemovedEventType, LabelPolicyLogoRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyIconAddedEventType, LabelPolicyIconAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyIconRemovedEventType, LabelPolicyIconRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyLogoDarkAddedEventType, LabelPolicyLogoDarkAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyLogoDarkRemovedEventType, LabelPolicyLogoDarkRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyIconDarkAddedEventType, LabelPolicyIconDarkAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyIconDarkRemovedEventType, LabelPolicyIconDarkRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyFontAddedEventType, LabelPolicyFontAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyFontRemovedEventType, LabelPolicyFontRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LabelPolicyAssetsRemovedEventType, LabelPolicyAssetsRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyAddedEventType, LoginPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyChangedEventType, LoginPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyRemovedEventType, LoginPolicyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicySecondFactorAddedEventType, SecondFactorAddedEventEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicySecondFactorRemovedEventType, SecondFactorRemovedEventEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyMultiFactorAddedEventType, MultiFactorAddedEventEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyMultiFactorRemovedEventType, MultiFactorRemovedEventEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderAddedEventType, IdentityProviderAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderRemovedEventType, IdentityProviderRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LoginPolicyIDPProviderCascadeRemovedEventType, IdentityProviderCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DomainPolicyAddedEventType, DomainPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DomainPolicyChangedEventType, DomainPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, DomainPolicyRemovedEventType, DomainPolicyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordAgePolicyAddedEventType, PasswordAgePolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordAgePolicyChangedEventType, PasswordAgePolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordAgePolicyRemovedEventType, PasswordAgePolicyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyAddedEventType, PasswordComplexityPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyChangedEventType, PasswordComplexityPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordComplexityPolicyRemovedEventType, PasswordComplexityPolicyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LockoutPolicyAddedEventType, LockoutPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LockoutPolicyChangedEventType, LockoutPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LockoutPolicyRemovedEventType, LockoutPolicyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PrivacyPolicyAddedEventType, PrivacyPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PrivacyPolicyChangedEventType, PrivacyPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PrivacyPolicyRemovedEventType, PrivacyPolicyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTemplateAddedEventType, MailTemplateAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTemplateChangedEventType, MailTemplateChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTemplateRemovedEventType, MailTemplateRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTextAddedEventType, MailTextAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTextChangedEventType, MailTextChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MailTextRemovedEventType, MailTextRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, CustomTextSetEventType, CustomTextSetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, CustomTextRemovedEventType, CustomTextRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, CustomTextTemplateRemovedEventType, CustomTextTemplateRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigAddedEventType, IDPConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigChangedEventType, IDPConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigRemovedEventType, IDPConfigRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigDeactivatedEventType, IDPConfigDeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPConfigReactivatedEventType, IDPConfigReactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPOIDCConfigAddedEventType, IDPOIDCConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPOIDCConfigChangedEventType, IDPOIDCConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPJWTConfigAddedEventType, IDPJWTConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPJWTConfigChangedEventType, IDPJWTConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OAuthIDPAddedEventType, OAuthIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OAuthIDPChangedEventType, OAuthIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCIDPAddedEventType, OIDCIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCIDPChangedEventType, OIDCIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCIDPMigratedAzureADEventType, OIDCIDPMigratedAzureADEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCIDPMigratedGoogleEventType, OIDCIDPMigratedGoogleEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, JWTIDPAddedEventType, JWTIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, JWTIDPChangedEventType, JWTIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AzureADIDPAddedEventType, AzureADIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AzureADIDPChangedEventType, AzureADIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitHubIDPAddedEventType, GitHubIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitHubIDPChangedEventType, GitHubIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitHubEnterpriseIDPAddedEventType, GitHubEnterpriseIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitHubEnterpriseIDPChangedEventType, GitHubEnterpriseIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitLabIDPAddedEventType, GitLabIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitLabIDPChangedEventType, GitLabIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitLabSelfHostedIDPAddedEventType, GitLabSelfHostedIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GitLabSelfHostedIDPChangedEventType, GitLabSelfHostedIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GoogleIDPAddedEventType, GoogleIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GoogleIDPChangedEventType, GoogleIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LDAPIDPAddedEventType, LDAPIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LDAPIDPChangedEventType, LDAPIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AppleIDPAddedEventType, AppleIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AppleIDPChangedEventType, AppleIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SAMLIDPAddedEventType, SAMLIDPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SAMLIDPChangedEventType, SAMLIDPChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IDPRemovedEventType, IDPRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, TriggerActionsSetEventType, TriggerActionsSetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, TriggerActionsCascadeRemovedEventType, TriggerActionsCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, FlowClearedEventType, FlowClearedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MetadataSetType, MetadataSetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MetadataRemovedType, MetadataRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MetadataRemovedAllType, MetadataRemovedAllEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, NotificationPolicyAddedEventType, NotificationPolicyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, NotificationPolicyChangedEventType, NotificationPolicyChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, NotificationPolicyRemovedEventType, NotificationPolicyRemovedEventMapper)
}
diff --git a/internal/repository/project/eventstore.go b/internal/repository/project/eventstore.go
index 41afbd31a..6e9bccbd3 100644
--- a/internal/repository/project/eventstore.go
+++ b/internal/repository/project/eventstore.go
@@ -4,44 +4,44 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, ProjectAddedType, ProjectAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, ProjectChangedType, ProjectChangeEventMapper).
- RegisterFilterEventMapper(AggregateType, ProjectDeactivatedType, ProjectDeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, ProjectReactivatedType, ProjectReactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, ProjectRemovedType, ProjectRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberAddedType, MemberAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberChangedType, MemberChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberRemovedType, MemberRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MemberCascadeRemovedType, MemberCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, RoleAddedType, RoleAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, RoleChangedType, RoleChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, RoleRemovedType, RoleRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantAddedType, GrantAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantChangedType, GrantChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantCascadeChangedType, GrantCascadeChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantDeactivatedType, GrantDeactivateEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantReactivatedType, GrantReactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantRemovedType, GrantRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantMemberAddedType, GrantMemberAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantMemberChangedType, GrantMemberChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantMemberRemovedType, GrantMemberRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, GrantMemberCascadeRemovedType, GrantMemberCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, ApplicationAddedType, ApplicationAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, ApplicationChangedType, ApplicationChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, ApplicationRemovedType, ApplicationRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, ApplicationDeactivatedType, ApplicationDeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, ApplicationReactivatedType, ApplicationReactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCConfigAddedType, OIDCConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCConfigChangedType, OIDCConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCConfigSecretChangedType, OIDCConfigSecretChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCClientSecretCheckSucceededType, OIDCConfigSecretCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, OIDCClientSecretCheckFailedType, OIDCConfigSecretCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, APIConfigAddedType, APIConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, APIConfigChangedType, APIConfigChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, APIConfigSecretChangedType, APIConfigSecretChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, ApplicationKeyAddedEventType, ApplicationKeyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, ApplicationKeyRemovedEventType, ApplicationKeyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, SAMLConfigAddedType, SAMLConfigAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, SAMLConfigChangedType, SAMLConfigChangedEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, ProjectAddedType, ProjectAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ProjectChangedType, ProjectChangeEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ProjectDeactivatedType, ProjectDeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ProjectReactivatedType, ProjectReactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ProjectRemovedType, ProjectRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberAddedType, MemberAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberChangedType, MemberChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberRemovedType, MemberRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MemberCascadeRemovedType, MemberCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, RoleAddedType, RoleAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, RoleChangedType, RoleChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, RoleRemovedType, RoleRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantAddedType, GrantAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantChangedType, GrantChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantCascadeChangedType, GrantCascadeChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantDeactivatedType, GrantDeactivateEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantReactivatedType, GrantReactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantRemovedType, GrantRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantMemberAddedType, GrantMemberAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantMemberChangedType, GrantMemberChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantMemberRemovedType, GrantMemberRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, GrantMemberCascadeRemovedType, GrantMemberCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ApplicationAddedType, ApplicationAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ApplicationChangedType, ApplicationChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ApplicationRemovedType, ApplicationRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ApplicationDeactivatedType, ApplicationDeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ApplicationReactivatedType, ApplicationReactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCConfigAddedType, OIDCConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCConfigChangedType, OIDCConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCConfigSecretChangedType, OIDCConfigSecretChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCClientSecretCheckSucceededType, OIDCConfigSecretCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, OIDCClientSecretCheckFailedType, OIDCConfigSecretCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, APIConfigAddedType, APIConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, APIConfigChangedType, APIConfigChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, APIConfigSecretChangedType, APIConfigSecretChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ApplicationKeyAddedEventType, ApplicationKeyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, ApplicationKeyRemovedEventType, ApplicationKeyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SAMLConfigAddedType, SAMLConfigAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SAMLConfigChangedType, SAMLConfigChangedEventMapper)
}
diff --git a/internal/repository/quota/eventstore.go b/internal/repository/quota/eventstore.go
index f651e58e2..bf31c3e56 100644
--- a/internal/repository/quota/eventstore.go
+++ b/internal/repository/quota/eventstore.go
@@ -4,13 +4,13 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
+func init() {
// AddedEventType is not emitted anymore.
// For ease of use, old events are directly mapped to SetEvent.
// This works, because the data structures are compatible.
- es.RegisterFilterEventMapper(AggregateType, AddedEventType, SetEventMapper).
- RegisterFilterEventMapper(AggregateType, SetEventType, SetEventMapper).
- RegisterFilterEventMapper(AggregateType, RemovedEventType, RemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, NotificationDueEventType, NotificationDueEventMapper).
- RegisterFilterEventMapper(AggregateType, NotifiedEventType, NotifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, AddedEventType, SetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, SetEventType, SetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, RemovedEventType, RemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, NotificationDueEventType, NotificationDueEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, NotifiedEventType, NotifiedEventMapper)
}
diff --git a/internal/repository/restrictions/eventstore.go b/internal/repository/restrictions/eventstore.go
index b1633244d..ee72d3dc4 100644
--- a/internal/repository/restrictions/eventstore.go
+++ b/internal/repository/restrictions/eventstore.go
@@ -4,6 +4,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, SetEventType, SetEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, SetEventType, SetEventMapper)
}
diff --git a/internal/repository/session/eventstore.go b/internal/repository/session/eventstore.go
index ccd95d666..40384743d 100644
--- a/internal/repository/session/eventstore.go
+++ b/internal/repository/session/eventstore.go
@@ -2,22 +2,22 @@ package session
import "github.com/zitadel/zitadel/internal/eventstore"
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, AddedType, AddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserCheckedType, UserCheckedEventMapper).
- RegisterFilterEventMapper(AggregateType, PasswordCheckedType, PasswordCheckedEventMapper).
- RegisterFilterEventMapper(AggregateType, IntentCheckedType, IntentCheckedEventMapper).
- RegisterFilterEventMapper(AggregateType, WebAuthNChallengedType, eventstore.GenericEventMapper[WebAuthNChallengedEvent]).
- RegisterFilterEventMapper(AggregateType, WebAuthNCheckedType, eventstore.GenericEventMapper[WebAuthNCheckedEvent]).
- RegisterFilterEventMapper(AggregateType, TOTPCheckedType, eventstore.GenericEventMapper[TOTPCheckedEvent]).
- RegisterFilterEventMapper(AggregateType, OTPSMSChallengedType, eventstore.GenericEventMapper[OTPSMSChallengedEvent]).
- RegisterFilterEventMapper(AggregateType, OTPSMSSentType, eventstore.GenericEventMapper[OTPSMSSentEvent]).
- RegisterFilterEventMapper(AggregateType, OTPSMSCheckedType, eventstore.GenericEventMapper[OTPSMSCheckedEvent]).
- RegisterFilterEventMapper(AggregateType, OTPEmailChallengedType, eventstore.GenericEventMapper[OTPEmailChallengedEvent]).
- RegisterFilterEventMapper(AggregateType, OTPEmailSentType, eventstore.GenericEventMapper[OTPEmailSentEvent]).
- RegisterFilterEventMapper(AggregateType, OTPEmailCheckedType, eventstore.GenericEventMapper[OTPEmailCheckedEvent]).
- RegisterFilterEventMapper(AggregateType, TokenSetType, TokenSetEventMapper).
- RegisterFilterEventMapper(AggregateType, MetadataSetType, MetadataSetEventMapper).
- RegisterFilterEventMapper(AggregateType, LifetimeSetType, eventstore.GenericEventMapper[LifetimeSetEvent]).
- RegisterFilterEventMapper(AggregateType, TerminateType, TerminateEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, AddedType, AddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserCheckedType, UserCheckedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PasswordCheckedType, PasswordCheckedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, IntentCheckedType, IntentCheckedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, WebAuthNChallengedType, eventstore.GenericEventMapper[WebAuthNChallengedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, WebAuthNCheckedType, eventstore.GenericEventMapper[WebAuthNCheckedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, TOTPCheckedType, eventstore.GenericEventMapper[TOTPCheckedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, OTPSMSChallengedType, eventstore.GenericEventMapper[OTPSMSChallengedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, OTPSMSSentType, eventstore.GenericEventMapper[OTPSMSSentEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, OTPSMSCheckedType, eventstore.GenericEventMapper[OTPSMSCheckedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, OTPEmailChallengedType, eventstore.GenericEventMapper[OTPEmailChallengedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, OTPEmailSentType, eventstore.GenericEventMapper[OTPEmailSentEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, OTPEmailCheckedType, eventstore.GenericEventMapper[OTPEmailCheckedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, TokenSetType, TokenSetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MetadataSetType, MetadataSetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, LifetimeSetType, eventstore.GenericEventMapper[LifetimeSetEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, TerminateType, TerminateEventMapper)
}
diff --git a/internal/repository/user/eventstore.go b/internal/repository/user/eventstore.go
index 289d8af40..e326a3fdd 100644
--- a/internal/repository/user/eventstore.go
+++ b/internal/repository/user/eventstore.go
@@ -4,134 +4,134 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, UserV1AddedType, HumanAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1RegisteredType, HumanRegisteredEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1InitialCodeAddedType, HumanInitialCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1InitialCodeSentType, HumanInitialCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1InitializedCheckSucceededType, HumanInitializedCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1InitializedCheckFailedType, HumanInitializedCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1SignedOutType, HumanSignedOutEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PasswordChangedType, HumanPasswordChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PasswordCodeAddedType, HumanPasswordCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PasswordCodeSentType, HumanPasswordCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PasswordCheckSucceededType, HumanPasswordCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PasswordCheckFailedType, HumanPasswordCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1EmailChangedType, HumanEmailChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1EmailVerifiedType, HumanEmailVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1EmailVerificationFailedType, HumanEmailVerificationFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1EmailCodeAddedType, HumanEmailCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1EmailCodeSentType, HumanEmailCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PhoneChangedType, HumanPhoneChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PhoneRemovedType, HumanPhoneRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PhoneVerifiedType, HumanPhoneVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PhoneVerificationFailedType, HumanPhoneVerificationFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PhoneCodeAddedType, HumanPhoneCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1PhoneCodeSentType, HumanPhoneCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1ProfileChangedType, HumanProfileChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1AddressChangedType, HumanAddressChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1MFAInitSkippedType, HumanMFAInitSkippedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1MFAOTPAddedType, HumanOTPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1MFAOTPVerifiedType, HumanOTPVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1MFAOTPRemovedType, HumanOTPRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1MFAOTPCheckSucceededType, HumanOTPCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, UserV1MFAOTPCheckFailedType, HumanOTPCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserLockedType, UserLockedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserUnlockedType, UserUnlockedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserDeactivatedType, UserDeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserReactivatedType, UserReactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserRemovedType, UserRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserTokenAddedType, UserTokenAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserTokenRemovedType, UserTokenRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserDomainClaimedType, DomainClaimedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserDomainClaimedSentType, DomainClaimedSentEventMapper).
- RegisterFilterEventMapper(AggregateType, UserUserNameChangedType, UsernameChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MetadataSetType, MetadataSetEventMapper).
- RegisterFilterEventMapper(AggregateType, MetadataRemovedType, MetadataRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MetadataRemovedAllType, MetadataRemovedAllEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanAddedType, HumanAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanRegisteredType, HumanRegisteredEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanInitialCodeAddedType, HumanInitialCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanInitialCodeSentType, HumanInitialCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanInitializedCheckSucceededType, HumanInitializedCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanInitializedCheckFailedType, HumanInitializedCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanSignedOutType, HumanSignedOutEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordChangedType, HumanPasswordChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordCodeAddedType, HumanPasswordCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordCodeSentType, HumanPasswordCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordChangeSentType, HumanPasswordChangeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordCheckSucceededType, HumanPasswordCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordCheckFailedType, HumanPasswordCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordHashUpdatedType, eventstore.GenericEventMapper[HumanPasswordHashUpdatedEvent]).
- RegisterFilterEventMapper(AggregateType, UserIDPLinkAddedType, UserIDPLinkAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserIDPLinkRemovedType, UserIDPLinkRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserIDPLinkCascadeRemovedType, UserIDPLinkCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserIDPLoginCheckSucceededType, UserIDPCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, UserIDPExternalIDMigratedType, eventstore.GenericEventMapper[UserIDPExternalIDMigratedEvent]).
- RegisterFilterEventMapper(AggregateType, UserIDPExternalUsernameChangedType, eventstore.GenericEventMapper[UserIDPExternalUsernameEvent]).
- RegisterFilterEventMapper(AggregateType, HumanEmailChangedType, HumanEmailChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanEmailVerifiedType, HumanEmailVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanEmailVerificationFailedType, HumanEmailVerificationFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanEmailCodeAddedType, HumanEmailCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanEmailCodeSentType, HumanEmailCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPhoneChangedType, HumanPhoneChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPhoneRemovedType, HumanPhoneRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPhoneVerifiedType, HumanPhoneVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPhoneVerificationFailedType, HumanPhoneVerificationFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPhoneCodeAddedType, HumanPhoneCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPhoneCodeSentType, HumanPhoneCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanProfileChangedType, HumanProfileChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanAvatarAddedType, HumanAvatarAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanAvatarRemovedType, HumanAvatarRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanAddressChangedType, HumanAddressChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanMFAInitSkippedType, HumanMFAInitSkippedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanMFAOTPAddedType, HumanOTPAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanMFAOTPVerifiedType, HumanOTPVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanMFAOTPRemovedType, HumanOTPRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanMFAOTPCheckSucceededType, HumanOTPCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanMFAOTPCheckFailedType, HumanOTPCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanOTPSMSAddedType, eventstore.GenericEventMapper[HumanOTPSMSAddedEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPSMSRemovedType, eventstore.GenericEventMapper[HumanOTPSMSRemovedEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPSMSCodeAddedType, eventstore.GenericEventMapper[HumanOTPSMSCodeAddedEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPSMSCodeSentType, eventstore.GenericEventMapper[HumanOTPSMSCodeSentEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPSMSCheckSucceededType, eventstore.GenericEventMapper[HumanOTPSMSCheckSucceededEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPSMSCheckFailedType, eventstore.GenericEventMapper[HumanOTPSMSCheckFailedEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPEmailAddedType, eventstore.GenericEventMapper[HumanOTPEmailAddedEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPEmailRemovedType, eventstore.GenericEventMapper[HumanOTPEmailRemovedEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPEmailCodeAddedType, eventstore.GenericEventMapper[HumanOTPEmailCodeAddedEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPEmailCodeSentType, eventstore.GenericEventMapper[HumanOTPEmailCodeSentEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPEmailCheckSucceededType, eventstore.GenericEventMapper[HumanOTPEmailCheckSucceededEvent]).
- RegisterFilterEventMapper(AggregateType, HumanOTPEmailCheckFailedType, eventstore.GenericEventMapper[HumanOTPEmailCheckFailedEvent]).
- RegisterFilterEventMapper(AggregateType, HumanU2FTokenAddedType, HumanU2FAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanU2FTokenVerifiedType, HumanU2FVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanU2FTokenSignCountChangedType, HumanU2FSignCountChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanU2FTokenRemovedType, HumanU2FRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanU2FTokenBeginLoginType, HumanU2FBeginLoginEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanU2FTokenCheckSucceededType, HumanU2FCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanU2FTokenCheckFailedType, HumanU2FCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenAddedType, HumanPasswordlessAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenVerifiedType, HumanPasswordlessVerifiedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenSignCountChangedType, HumanPasswordlessSignCountChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenRemovedType, HumanPasswordlessRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenBeginLoginType, HumanPasswordlessBeginLoginEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenCheckSucceededType, HumanPasswordlessCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenCheckFailedType, HumanPasswordlessCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeAddedType, HumanPasswordlessInitCodeAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeRequestedType, HumanPasswordlessInitCodeRequestedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeSentType, HumanPasswordlessInitCodeSentEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeCheckFailedType, HumanPasswordlessInitCodeCodeCheckFailedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeCheckSucceededType, HumanPasswordlessInitCodeCodeCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanRefreshTokenAddedType, HumanRefreshTokenAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanRefreshTokenRenewedType, HumanRefreshTokenRenewedEventEventMapper).
- RegisterFilterEventMapper(AggregateType, HumanRefreshTokenRemovedType, HumanRefreshTokenRemovedEventEventMapper).
- RegisterFilterEventMapper(AggregateType, MachineAddedEventType, MachineAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MachineChangedEventType, MachineChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, MachineKeyAddedEventType, MachineKeyAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, MachineKeyRemovedEventType, MachineKeyRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, PersonalAccessTokenAddedType, PersonalAccessTokenAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, PersonalAccessTokenRemovedType, PersonalAccessTokenRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MachineSecretSetType, MachineSecretSetEventMapper).
- RegisterFilterEventMapper(AggregateType, MachineSecretRemovedType, MachineSecretRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, MachineSecretCheckSucceededType, MachineSecretCheckSucceededEventMapper).
- RegisterFilterEventMapper(AggregateType, MachineSecretCheckFailedType, MachineSecretCheckFailedEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1AddedType, HumanAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1RegisteredType, HumanRegisteredEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1InitialCodeAddedType, HumanInitialCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1InitialCodeSentType, HumanInitialCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1InitializedCheckSucceededType, HumanInitializedCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1InitializedCheckFailedType, HumanInitializedCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1SignedOutType, HumanSignedOutEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PasswordChangedType, HumanPasswordChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PasswordCodeAddedType, HumanPasswordCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PasswordCodeSentType, HumanPasswordCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PasswordCheckSucceededType, HumanPasswordCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PasswordCheckFailedType, HumanPasswordCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1EmailChangedType, HumanEmailChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1EmailVerifiedType, HumanEmailVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1EmailVerificationFailedType, HumanEmailVerificationFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1EmailCodeAddedType, HumanEmailCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1EmailCodeSentType, HumanEmailCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PhoneChangedType, HumanPhoneChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PhoneRemovedType, HumanPhoneRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PhoneVerifiedType, HumanPhoneVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PhoneVerificationFailedType, HumanPhoneVerificationFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PhoneCodeAddedType, HumanPhoneCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1PhoneCodeSentType, HumanPhoneCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1ProfileChangedType, HumanProfileChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1AddressChangedType, HumanAddressChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1MFAInitSkippedType, HumanMFAInitSkippedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1MFAOTPAddedType, HumanOTPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1MFAOTPVerifiedType, HumanOTPVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1MFAOTPRemovedType, HumanOTPRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1MFAOTPCheckSucceededType, HumanOTPCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserV1MFAOTPCheckFailedType, HumanOTPCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserLockedType, UserLockedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserUnlockedType, UserUnlockedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserDeactivatedType, UserDeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserReactivatedType, UserReactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserRemovedType, UserRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserTokenAddedType, UserTokenAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserTokenRemovedType, UserTokenRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserDomainClaimedType, DomainClaimedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserDomainClaimedSentType, DomainClaimedSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserUserNameChangedType, UsernameChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MetadataSetType, MetadataSetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MetadataRemovedType, MetadataRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MetadataRemovedAllType, MetadataRemovedAllEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanAddedType, HumanAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanRegisteredType, HumanRegisteredEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanInitialCodeAddedType, HumanInitialCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanInitialCodeSentType, HumanInitialCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanInitializedCheckSucceededType, HumanInitializedCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanInitializedCheckFailedType, HumanInitializedCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanSignedOutType, HumanSignedOutEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordChangedType, HumanPasswordChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordCodeAddedType, HumanPasswordCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordCodeSentType, HumanPasswordCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordChangeSentType, HumanPasswordChangeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordCheckSucceededType, HumanPasswordCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordCheckFailedType, HumanPasswordCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordHashUpdatedType, eventstore.GenericEventMapper[HumanPasswordHashUpdatedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, UserIDPLinkAddedType, UserIDPLinkAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserIDPLinkRemovedType, UserIDPLinkRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserIDPLinkCascadeRemovedType, UserIDPLinkCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserIDPLoginCheckSucceededType, UserIDPCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserIDPExternalIDMigratedType, eventstore.GenericEventMapper[UserIDPExternalIDMigratedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, UserIDPExternalUsernameChangedType, eventstore.GenericEventMapper[UserIDPExternalUsernameEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanEmailChangedType, HumanEmailChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanEmailVerifiedType, HumanEmailVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanEmailVerificationFailedType, HumanEmailVerificationFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanEmailCodeAddedType, HumanEmailCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanEmailCodeSentType, HumanEmailCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPhoneChangedType, HumanPhoneChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPhoneRemovedType, HumanPhoneRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPhoneVerifiedType, HumanPhoneVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPhoneVerificationFailedType, HumanPhoneVerificationFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPhoneCodeAddedType, HumanPhoneCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPhoneCodeSentType, HumanPhoneCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanProfileChangedType, HumanProfileChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanAvatarAddedType, HumanAvatarAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanAvatarRemovedType, HumanAvatarRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanAddressChangedType, HumanAddressChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanMFAInitSkippedType, HumanMFAInitSkippedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanMFAOTPAddedType, HumanOTPAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanMFAOTPVerifiedType, HumanOTPVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanMFAOTPRemovedType, HumanOTPRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanMFAOTPCheckSucceededType, HumanOTPCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanMFAOTPCheckFailedType, HumanOTPCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPSMSAddedType, eventstore.GenericEventMapper[HumanOTPSMSAddedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPSMSRemovedType, eventstore.GenericEventMapper[HumanOTPSMSRemovedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPSMSCodeAddedType, eventstore.GenericEventMapper[HumanOTPSMSCodeAddedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPSMSCodeSentType, eventstore.GenericEventMapper[HumanOTPSMSCodeSentEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPSMSCheckSucceededType, eventstore.GenericEventMapper[HumanOTPSMSCheckSucceededEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPSMSCheckFailedType, eventstore.GenericEventMapper[HumanOTPSMSCheckFailedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPEmailAddedType, eventstore.GenericEventMapper[HumanOTPEmailAddedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPEmailRemovedType, eventstore.GenericEventMapper[HumanOTPEmailRemovedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPEmailCodeAddedType, eventstore.GenericEventMapper[HumanOTPEmailCodeAddedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPEmailCodeSentType, eventstore.GenericEventMapper[HumanOTPEmailCodeSentEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPEmailCheckSucceededType, eventstore.GenericEventMapper[HumanOTPEmailCheckSucceededEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanOTPEmailCheckFailedType, eventstore.GenericEventMapper[HumanOTPEmailCheckFailedEvent])
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanU2FTokenAddedType, HumanU2FAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanU2FTokenVerifiedType, HumanU2FVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanU2FTokenSignCountChangedType, HumanU2FSignCountChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanU2FTokenRemovedType, HumanU2FRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanU2FTokenBeginLoginType, HumanU2FBeginLoginEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanU2FTokenCheckSucceededType, HumanU2FCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanU2FTokenCheckFailedType, HumanU2FCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenAddedType, HumanPasswordlessAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenVerifiedType, HumanPasswordlessVerifiedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenSignCountChangedType, HumanPasswordlessSignCountChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenRemovedType, HumanPasswordlessRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenBeginLoginType, HumanPasswordlessBeginLoginEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenCheckSucceededType, HumanPasswordlessCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessTokenCheckFailedType, HumanPasswordlessCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeAddedType, HumanPasswordlessInitCodeAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeRequestedType, HumanPasswordlessInitCodeRequestedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeSentType, HumanPasswordlessInitCodeSentEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeCheckFailedType, HumanPasswordlessInitCodeCodeCheckFailedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanPasswordlessInitCodeCheckSucceededType, HumanPasswordlessInitCodeCodeCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanRefreshTokenAddedType, HumanRefreshTokenAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanRefreshTokenRenewedType, HumanRefreshTokenRenewedEventEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, HumanRefreshTokenRemovedType, HumanRefreshTokenRemovedEventEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MachineAddedEventType, MachineAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MachineChangedEventType, MachineChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MachineKeyAddedEventType, MachineKeyAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MachineKeyRemovedEventType, MachineKeyRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PersonalAccessTokenAddedType, PersonalAccessTokenAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, PersonalAccessTokenRemovedType, PersonalAccessTokenRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MachineSecretSetType, MachineSecretSetEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MachineSecretRemovedType, MachineSecretRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MachineSecretCheckSucceededType, MachineSecretCheckSucceededEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, MachineSecretCheckFailedType, MachineSecretCheckFailedEventMapper)
}
diff --git a/internal/repository/usergrant/eventstore.go b/internal/repository/usergrant/eventstore.go
index e93619eec..c62ec6347 100644
--- a/internal/repository/usergrant/eventstore.go
+++ b/internal/repository/usergrant/eventstore.go
@@ -4,12 +4,12 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
)
-func RegisterEventMappers(es *eventstore.Eventstore) {
- es.RegisterFilterEventMapper(AggregateType, UserGrantAddedType, UserGrantAddedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserGrantChangedType, UserGrantChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserGrantCascadeChangedType, UserGrantCascadeChangedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserGrantRemovedType, UserGrantRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserGrantCascadeRemovedType, UserGrantCascadeRemovedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserGrantDeactivatedType, UserGrantDeactivatedEventMapper).
- RegisterFilterEventMapper(AggregateType, UserGrantReactivatedType, UserGrantReactivatedEventMapper)
+func init() {
+ eventstore.RegisterFilterEventMapper(AggregateType, UserGrantAddedType, UserGrantAddedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserGrantChangedType, UserGrantChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserGrantCascadeChangedType, UserGrantCascadeChangedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserGrantRemovedType, UserGrantRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserGrantCascadeRemovedType, UserGrantCascadeRemovedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserGrantDeactivatedType, UserGrantDeactivatedEventMapper)
+ eventstore.RegisterFilterEventMapper(AggregateType, UserGrantReactivatedType, UserGrantReactivatedEventMapper)
}