This commit is contained in:
adlerhurst
2020-11-27 11:30:56 +01:00
parent 3bd4d3a8e3
commit 9487e8bdeb
20 changed files with 424 additions and 183 deletions

View File

@@ -8,8 +8,6 @@ import (
type ConfigReadModel struct {
eventstore.ReadModel
Type ConfigType
State ConfigState
ConfigID string
Name string
@@ -26,13 +24,24 @@ func NewConfigReadModel(configID string) *ConfigReadModel {
}
func (rm *ConfigReadModel) AppendEvents(events ...eventstore.EventReader) {
rm.ReadModel.AppendEvents(events...)
for _, event := range events {
switch event.(type) {
switch e := event.(type) {
case *ConfigAddedEvent:
rm.ReadModel.AppendEvents(e)
case *ConfigChangedEvent:
rm.ReadModel.AppendEvents(e)
case *ConfigDeactivatedEvent:
rm.ReadModel.AppendEvents(e)
case *ConfigReactivatedEvent:
rm.ReadModel.AppendEvents(e)
case *ConfigRemovedEvent:
rm.ReadModel.AppendEvents(e)
case *oidc.ConfigAddedEvent:
rm.OIDCConfig = &oidc.ConfigReadModel{}
rm.ReadModel.AppendEvents(e)
rm.OIDCConfig.AppendEvents(event)
case *oidc.ConfigChangedEvent:
rm.ReadModel.AppendEvents(e)
rm.OIDCConfig.AppendEvents(event)
}
}
@@ -42,30 +51,42 @@ func (rm *ConfigReadModel) Reduce() error {
for _, event := range rm.Events {
switch e := event.(type) {
case *ConfigAddedEvent:
rm.ConfigID = e.ConfigID
rm.Name = e.Name
rm.StylingType = e.StylingType
rm.State = ConfigStateActive
rm.reduceConfigAddedEvent(e)
case *ConfigChangedEvent:
if e.Name != "" {
rm.Name = e.Name
}
if e.StylingType.Valid() {
rm.StylingType = e.StylingType
}
rm.reduceConfigChangedEvent(e)
case *ConfigDeactivatedEvent:
rm.State = ConfigStateInactive
rm.reduceConfigStateChanged(e.ConfigID, ConfigStateInactive)
case *ConfigReactivatedEvent:
rm.State = ConfigStateActive
rm.reduceConfigStateChanged(e.ConfigID, ConfigStateActive)
case *ConfigRemovedEvent:
rm.State = ConfigStateRemoved
case *oidc.ConfigAddedEvent:
rm.Type = ConfigTypeOIDC
rm.reduceConfigStateChanged(e.ConfigID, ConfigStateRemoved)
}
}
if err := rm.OIDCConfig.Reduce(); err != nil {
return err
if rm.OIDCConfig != nil {
if err := rm.OIDCConfig.Reduce(); err != nil {
return err
}
}
return rm.ReadModel.Reduce()
}
func (rm *ConfigReadModel) reduceConfigAddedEvent(e *ConfigAddedEvent) {
rm.ConfigID = e.ConfigID
rm.Name = e.Name
rm.StylingType = e.StylingType
rm.State = ConfigStateActive
}
func (rm *ConfigReadModel) reduceConfigChangedEvent(e *ConfigChangedEvent) {
if e.Name != "" {
rm.Name = e.Name
}
if e.StylingType.Valid() {
rm.StylingType = e.StylingType
}
}
func (rm *ConfigReadModel) reduceConfigStateChanged(configID string, state ConfigState) {
rm.State = state
}

View File

@@ -8,10 +8,13 @@ import (
type ConfigWriteModel struct {
eventstore.WriteModel
State ConfigState
ConfigID string
Name string
StylingType StylingType
OIDCConfig *oidc.ConfigWriteModel
OIDCConfig *oidc.ConfigWriteModel
}
func (rm *ConfigWriteModel) AppendEvents(events ...eventstore.EventReader) {
@@ -19,7 +22,7 @@ func (rm *ConfigWriteModel) AppendEvents(events ...eventstore.EventReader) {
for _, event := range events {
switch event.(type) {
case *oidc.ConfigAddedEvent:
rm.OIDCConfig = &oidc.ConfigWriteModel{}
rm.OIDCConfig = new(oidc.ConfigWriteModel)
rm.OIDCConfig.AppendEvents(event)
case *oidc.ConfigChangedEvent:
rm.OIDCConfig.AppendEvents(event)
@@ -31,20 +34,41 @@ func (rm *ConfigWriteModel) Reduce() error {
for _, event := range rm.Events {
switch e := event.(type) {
case *ConfigAddedEvent:
rm.ConfigID = e.ConfigID
rm.Name = e.Name
rm.StylingType = e.StylingType
rm.reduceConfigAddedEvent(e)
case *ConfigChangedEvent:
if e.Name != "" {
rm.Name = e.Name
}
if e.StylingType.Valid() {
rm.StylingType = e.StylingType
}
rm.reduceConfigChangedEvent(e)
case *ConfigDeactivatedEvent:
rm.reduceConfigStateChanged(e.ConfigID, ConfigStateInactive)
case *ConfigReactivatedEvent:
rm.reduceConfigStateChanged(e.ConfigID, ConfigStateActive)
case *ConfigRemovedEvent:
rm.reduceConfigStateChanged(e.ConfigID, ConfigStateRemoved)
}
}
if err := rm.OIDCConfig.Reduce(); err != nil {
return err
if rm.OIDCConfig != nil {
if err := rm.OIDCConfig.Reduce(); err != nil {
return err
}
}
return rm.WriteModel.Reduce()
}
func (rm *ConfigWriteModel) reduceConfigAddedEvent(e *ConfigAddedEvent) {
rm.ConfigID = e.ConfigID
rm.Name = e.Name
rm.StylingType = e.StylingType
rm.State = ConfigStateActive
}
func (rm *ConfigWriteModel) reduceConfigChangedEvent(e *ConfigChangedEvent) {
if e.Name != "" {
rm.Name = e.Name
}
if e.StylingType.Valid() {
rm.StylingType = e.StylingType
}
}
func (rm *ConfigWriteModel) reduceConfigStateChanged(configID string, state ConfigState) {
rm.State = state
}

View File

@@ -12,7 +12,7 @@ type ConfigAddedEvent struct {
eventstore.BaseEvent `json:"-"`
ConfigID string `json:"idpConfigId"`
Name string `json:"name"`
Name string `json:"name,omitempty"`
Typ ConfigType `json:"idpType,omitempty"`
StylingType StylingType `json:"stylingType,omitempty"`
}

View File

@@ -21,31 +21,39 @@ func (rm *ConfigReadModel) Reduce() error {
for _, event := range rm.Events {
switch e := event.(type) {
case *ConfigAddedEvent:
rm.IDPConfigID = e.IDPConfigID
rm.ClientID = e.ClientID
rm.ClientSecret = e.ClientSecret
rm.Issuer = e.Issuer
rm.Scopes = e.Scopes
rm.IDPDisplayNameMapping = e.IDPDisplayNameMapping
rm.UserNameMapping = e.UserNameMapping
rm.reduceConfigAddedEvent(e)
case *ConfigChangedEvent:
if e.ClientID != "" {
rm.ClientID = e.ClientID
}
if e.Issuer != "" {
rm.Issuer = e.Issuer
}
if len(e.Scopes) > 0 {
rm.Scopes = e.Scopes
}
if e.IDPDisplayNameMapping.Valid() {
rm.IDPDisplayNameMapping = e.IDPDisplayNameMapping
}
if e.UserNameMapping.Valid() {
rm.UserNameMapping = e.UserNameMapping
}
rm.reduceConfigChangedEvent(e)
}
}
return rm.ReadModel.Reduce()
}
func (rm *ConfigReadModel) reduceConfigAddedEvent(e *ConfigAddedEvent) {
rm.IDPConfigID = e.IDPConfigID
rm.ClientID = e.ClientID
rm.ClientSecret = e.ClientSecret
rm.Issuer = e.Issuer
rm.Scopes = e.Scopes
rm.IDPDisplayNameMapping = e.IDPDisplayNameMapping
rm.UserNameMapping = e.UserNameMapping
}
func (rm *ConfigReadModel) reduceConfigChangedEvent(e *ConfigChangedEvent) {
if e.ClientID != "" {
rm.ClientID = e.ClientID
}
if e.Issuer != "" {
rm.Issuer = e.Issuer
}
if len(e.Scopes) > 0 {
rm.Scopes = e.Scopes
}
if e.IDPDisplayNameMapping.Valid() {
rm.IDPDisplayNameMapping = e.IDPDisplayNameMapping
}
if e.UserNameMapping.Valid() {
rm.UserNameMapping = e.UserNameMapping
}
}

View File

@@ -22,31 +22,39 @@ func (wm *ConfigWriteModel) Reduce() error {
for _, event := range wm.Events {
switch e := event.(type) {
case *ConfigAddedEvent:
wm.IDPConfigID = e.IDPConfigID
wm.ClientID = e.ClientID
wm.ClientSecret = e.ClientSecret
wm.Issuer = e.Issuer
wm.Scopes = e.Scopes
wm.IDPDisplayNameMapping = e.IDPDisplayNameMapping
wm.UserNameMapping = e.UserNameMapping
wm.reduceConfigAddedEvent(e)
case *ConfigChangedEvent:
if e.ClientID != "" {
wm.ClientID = e.ClientID
}
if e.Issuer != "" {
wm.Issuer = e.Issuer
}
if len(e.Scopes) > 0 {
wm.Scopes = e.Scopes
}
if e.IDPDisplayNameMapping.Valid() {
wm.IDPDisplayNameMapping = e.IDPDisplayNameMapping
}
if e.UserNameMapping.Valid() {
wm.UserNameMapping = e.UserNameMapping
}
wm.reduceConfigChangedEvent(e)
}
}
return wm.WriteModel.Reduce()
}
func (wm *ConfigWriteModel) reduceConfigAddedEvent(e *ConfigAddedEvent) {
wm.IDPConfigID = e.IDPConfigID
wm.ClientID = e.ClientID
wm.ClientSecret = e.ClientSecret
wm.Issuer = e.Issuer
wm.Scopes = e.Scopes
wm.IDPDisplayNameMapping = e.IDPDisplayNameMapping
wm.UserNameMapping = e.UserNameMapping
}
func (wm *ConfigWriteModel) reduceConfigChangedEvent(e *ConfigChangedEvent) {
if e.ClientID != "" {
wm.ClientID = e.ClientID
}
if e.Issuer != "" {
wm.Issuer = e.Issuer
}
if len(e.Scopes) > 0 {
wm.Scopes = e.Scopes
}
if e.IDPDisplayNameMapping.Valid() {
wm.IDPDisplayNameMapping = e.IDPDisplayNameMapping
}
if e.UserNameMapping.Valid() {
wm.UserNameMapping = e.UserNameMapping
}
}

View File

@@ -13,13 +13,13 @@ type ConfigAddedEvent struct {
eventstore.BaseEvent
IDPConfigID string `json:"idpConfigId"`
ClientID string `json:"clientId"`
ClientSecret *crypto.CryptoValue `json:"clientSecret"`
Issuer string `json:"issuer"`
Scopes []string `json:"scpoes"`
ClientID string `json:"clientId,omitempty"`
ClientSecret *crypto.CryptoValue `json:"clientSecret,omitempty"`
Issuer string `json:"issuer,omitempty"`
Scopes []string `json:"scpoes,omitempty"`
IDPDisplayNameMapping MappingField `json:"idpDisplayNameMapping"`
UserNameMapping MappingField `json:"usernameMapping"`
IDPDisplayNameMapping MappingField `json:"idpDisplayNameMapping,omitempty"`
UserNameMapping MappingField `json:"usernameMapping,omitempty"`
}
func (e *ConfigAddedEvent) CheckPrevious() bool {

View File

@@ -16,13 +16,13 @@ type ConfigChangedEvent struct {
IDPConfigID string `json:"idpConfigId"`
ClientID string `json:"clientId"`
ClientSecret *crypto.CryptoValue `json:"clientSecret"`
Issuer string `json:"issuer"`
Scopes []string `json:"scpoes"`
ClientID string `json:"clientId,omitempty"`
ClientSecret *crypto.CryptoValue `json:"clientSecret,omitempty"`
Issuer string `json:"issuer,omitempty"`
Scopes []string `json:"scpoes,omitempty"`
IDPDisplayNameMapping MappingField `json:"idpDisplayNameMapping"`
UserNameMapping MappingField `json:"usernameMapping"`
IDPDisplayNameMapping MappingField `json:"idpDisplayNameMapping,omitempty"`
UserNameMapping MappingField `json:"usernameMapping,omitempty"`
}
func (e *ConfigChangedEvent) CheckPrevious() bool {
@@ -60,7 +60,7 @@ func NewConfigChangedEvent(
hasChanged = true
}
if clientSecret != nil && clientSecret != current.ClientSecret {
if clientSecret != nil {
event.ClientSecret = clientSecret
hasChanged = true
}