mirror of
https://github.com/zitadel/zitadel.git
synced 2025-04-19 03:21:32 +00:00
105 lines
2.6 KiB
Go
105 lines
2.6 KiB
Go
![]() |
package setup
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/caos/logging"
|
||
|
|
||
|
"github.com/caos/zitadel/internal/config/systemdefaults"
|
||
|
caos_errs "github.com/caos/zitadel/internal/errors"
|
||
|
es_int "github.com/caos/zitadel/internal/eventstore"
|
||
|
"github.com/caos/zitadel/internal/eventstore/models"
|
||
|
iam_model "github.com/caos/zitadel/internal/iam/model"
|
||
|
es_iam "github.com/caos/zitadel/internal/iam/repository/eventsourcing"
|
||
|
"github.com/caos/zitadel/internal/v2/command"
|
||
|
"github.com/caos/zitadel/internal/v2/domain"
|
||
|
)
|
||
|
|
||
|
func StartSetupV2(esConfig es_int.Config, sd systemdefaults.SystemDefaults) (*Setup, error) {
|
||
|
setup := &Setup{
|
||
|
iamID: sd.IamID,
|
||
|
}
|
||
|
es, err := es_int.Start(esConfig)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
setup.IamEvents, err = es_iam.StartIAM(es_iam.IAMConfig{
|
||
|
Eventstore: es,
|
||
|
Cache: esConfig.Cache,
|
||
|
}, sd)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
setup.Commands, err = command.StartCommandSide(&command.Config{
|
||
|
Eventstore: es.V2(),
|
||
|
SystemDefaults: sd,
|
||
|
})
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return setup, nil
|
||
|
}
|
||
|
|
||
|
func (s *Setup) ExecuteV2(ctx context.Context, setUpConfig IAMSetUp) error {
|
||
|
logging.Log("SETUP-JAK2q").Info("starting setup")
|
||
|
|
||
|
iam, err := s.IamEvents.IAMByID(ctx, s.iamID)
|
||
|
if err != nil && !caos_errs.IsNotFound(err) {
|
||
|
return err
|
||
|
}
|
||
|
if iam != nil && (iam.SetUpDone == domain.StepCount-1 || iam.SetUpStarted != iam.SetUpDone) {
|
||
|
logging.Log("SETUP-VA2k1").Info("all steps done")
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
if iam == nil {
|
||
|
iam = &iam_model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: s.iamID}}
|
||
|
}
|
||
|
|
||
|
steps, err := setUpConfig.steps(iam_model.Step(iam.SetUpDone))
|
||
|
if err != nil || len(steps) == 0 {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
ctx = setSetUpContextData(ctx, s.iamID)
|
||
|
|
||
|
for _, step := range steps {
|
||
|
//step.init(s)
|
||
|
if step.step() != iam_model.Step(iam.SetUpDone+1) {
|
||
|
logging.LogWithFields("SETUP-rxRM1", "step", step.step(), "previous", iam.SetUpDone).Warn("wrong step order")
|
||
|
return caos_errs.ThrowPreconditionFailed(nil, "SETUP-wwAqO", "too few steps for this zitadel verison")
|
||
|
}
|
||
|
iam, err = s.Commands.StartSetup(ctx, s.iamID, domain.Step(step.step()))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
err = step.execute(ctx, iam.AggregateID, *s.Commands)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
err = s.validateExecutedStep(ctx)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
logging.Log("SETUP-ds31h").Info("setup done")
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (s *Setup) validateExecutedStep(ctx context.Context) error {
|
||
|
iam, err := s.IamEvents.IAMByID(ctx, s.iamID)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if iam.SetUpStarted != iam.SetUpDone {
|
||
|
return caos_errs.ThrowInternal(nil, "SETUP-QeukK", "started step is not equal to done")
|
||
|
}
|
||
|
return nil
|
||
|
}
|