policies implemented

This commit is contained in:
adlerhurst
2020-11-06 22:09:19 +01:00
parent f7f810caa5
commit 57fc3ddd16
22 changed files with 667 additions and 87 deletions

View File

@@ -1,7 +1,12 @@
package iam
import "github.com/caos/zitadel/internal/eventstore/v2"
import (
"github.com/caos/zitadel/internal/eventstore/v2"
)
type Aggregate struct {
eventstore.Aggregate
SetUpStarted Step
SetUpDone Step
}

View File

@@ -24,11 +24,10 @@ func (e *GlobalOrgSetEvent) Data() interface{} {
return e
}
func NewGlobalOrgSetEventEvent(ctx context.Context, service, orgID string) *GlobalOrgSetEvent {
func NewGlobalOrgSetEventEvent(ctx context.Context, orgID string) *GlobalOrgSetEvent {
return &GlobalOrgSetEvent{
BaseEvent: *eventstore.NewBaseEventForPush(
ctx,
service,
GlobalOrgSetEventType,
),
OrgID: orgID,

View File

@@ -7,28 +7,27 @@ import (
)
const (
IAMProjectSetEventType eventstore.EventType = "iam.project.iam.set"
ProjectSetEventType eventstore.EventType = "iam.project.iam.set"
)
type IAMProjectSetEvent struct {
type ProjectSetEvent struct {
eventstore.BaseEvent `json:"-"`
ProjectID string `json:"iamProjectId"`
}
func (e *IAMProjectSetEvent) CheckPrevious() bool {
func (e *ProjectSetEvent) CheckPrevious() bool {
return e.Type() == SetupStartedEventType
}
func (e *IAMProjectSetEvent) Data() interface{} {
func (e *ProjectSetEvent) Data() interface{} {
return e
}
func NewIAMProjectSetEvent(ctx context.Context, service, projectID string) *IAMProjectSetEvent {
return &IAMProjectSetEvent{
func NewProjectSetEvent(ctx context.Context, projectID string) *ProjectSetEvent {
return &ProjectSetEvent{
BaseEvent: *eventstore.NewBaseEventForPush(
ctx,
service,
SetupDoneEventType,
),
ProjectID: projectID,

View File

@@ -2,8 +2,11 @@ package iam
import (
"context"
"encoding/json"
"github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/eventstore/v2"
"github.com/caos/zitadel/internal/eventstore/v2/repository"
)
const (
@@ -17,6 +20,7 @@ type SetupStepEvent struct {
eventstore.BaseEvent `json:"-"`
Step Step `json:"Step"`
Done bool `json:"-"`
}
func (e *SetupStepEvent) CheckPrevious() bool {
@@ -27,21 +31,32 @@ func (e *SetupStepEvent) Data() interface{} {
return e
}
func NewSetupStepDoneEvent(ctx context.Context, service string) *SetupStepEvent {
func SetupStepMapper(event *repository.Event) (eventstore.EventReader, error) {
step := &SetupStepEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
Done: eventstore.EventType(event.Type) == SetupDoneEventType,
}
err := json.Unmarshal(event.Data, step)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-O6rVg", "unable to unmarshal step")
}
return step, nil
}
func NewSetupStepDoneEvent(ctx context.Context) *SetupStepEvent {
return &SetupStepEvent{
BaseEvent: *eventstore.NewBaseEventForPush(
ctx,
service,
SetupDoneEventType,
),
}
}
func NewSetupStepStartedEvent(ctx context.Context, service string) *SetupStepEvent {
func NewSetupStepStartedEvent(ctx context.Context) *SetupStepEvent {
return &SetupStepEvent{
BaseEvent: *eventstore.NewBaseEventForPush(
ctx,
service,
SetupStartedEventType,
),
}

View File

@@ -0,0 +1,52 @@
package iam
import (
"github.com/caos/zitadel/internal/eventstore/v2"
"github.com/caos/zitadel/internal/v2/repository/member"
)
type ReadModel struct {
eventstore.ReadModel
SetUpStarted Step
SetUpDone Step
Members member.MembersReadModel
GlobalOrgID string
ProjectID string
}
func (rm *ReadModel) AppendEvents(events ...eventstore.EventReader) (err error) {
rm.ReadModel.AppendEvents(events...)
for _, event := range events {
switch event.(type) {
case *member.MemberAddedEvent, *member.MemberChangedEvent, *member.MemberRemovedEvent:
err = rm.Members.AppendEvents(events...)
}
}
return err
}
func (rm *ReadModel) Reduce() (err error) {
for _, event := range rm.Events {
switch e := event.(type) {
case *ProjectSetEvent:
rm.ProjectID = e.ProjectID
case *GlobalOrgSetEvent:
rm.GlobalOrgID = e.OrgID
case *SetupStepEvent:
if e.Done {
rm.SetUpDone = e.Step
} else {
rm.SetUpStarted = e.Step
}
}
}
err = rm.Members.Reduce()
if err != nil {
return err
}
return rm.ReadModel.Reduce()
}