feat: Login, OP Support and Auth Queries (#177)

* fix: change oidc config

* fix: change oidc config secret

* begin models

* begin repo

* fix: implement grpc app funcs

* fix: add application requests

* fix: converter

* fix: converter

* fix: converter and generate clientid

* fix: tests

* feat: project grant aggregate

* feat: project grant

* fix: project grant check if role existing

* fix: project grant requests

* fix: project grant fixes

* fix: project grant member model

* fix: project grant member aggregate

* fix: project grant member eventstore

* fix: project grant member requests

* feat: user model

* begin repo

* repo models and more

* feat: user command side

* lots of functions

* user command side

* profile requests

* commit before rebase on user

* save

* local config with gopass and more

* begin new auth command (user centric)

* Update internal/user/model/user.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/address.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/address.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/email.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/email.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/email.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/mfa.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/mfa.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/password.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/password.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/password.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/phone.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/phone.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/phone.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/user.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/user.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/model/user.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/usergrant/repository/eventsourcing/model/user_grant.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/usergrant/repository/eventsourcing/model/user_grant.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/usergrant/repository/eventsourcing/user_grant.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/user_test.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* Update internal/user/repository/eventsourcing/eventstore_mock_test.go

Co-Authored-By: Livio Amstutz <livio.a@gmail.com>

* changes from mr review

* save files into basedir

* changes from mr review

* changes from mr review

* move to auth request

* Update internal/usergrant/repository/eventsourcing/cache.go

Co-authored-by: Silvan <silvan.reusser@gmail.com>

* Update internal/usergrant/repository/eventsourcing/cache.go

Co-authored-by: Silvan <silvan.reusser@gmail.com>

* changes requested on mr

* fix generate codes

* fix return if no events

* password code

* email verification step

* more steps

* lot of mfa

* begin tests

* more next steps

* auth api

* auth api (user)

* auth api (user)

* auth api (user)

* differ requests

* merge

* tests

* fix compilation error

* mock for id generator

* Update internal/user/repository/eventsourcing/model/password.go

Co-authored-by: Silvan <silvan.reusser@gmail.com>

* Update internal/user/repository/eventsourcing/model/user.go

Co-authored-by: Silvan <silvan.reusser@gmail.com>

* requests of mr

* check email

* begin separation of command and query

* otp

* change packages

* some cleanup and fixes

* tests for auth request / next steps

* add VerificationLifetimes to config and make it run

* tests

* fix code challenge validation

* cleanup

* fix merge

* begin view

* repackaging tests and configs

* fix startup config for auth

* add migration

* add PromptSelectAccount

* fix copy / paste

* remove user_agent files

* fixes

* fix sequences in user_session

* token commands

* token queries and signout

* fix

* fix set password test

* add token handler and table

* handle session init

* add session state

* add user view test cases

* change VerifyMyMfaOTP

* some fixes

* fix user repo in auth api

* cleanup

* add user session view test

* fix merge

* begin oidc

* user agent and more

* config

* keys

* key command and query

* add login statics

* key handler

* start login

* login handlers

* lot of fixes

* merge oidc

* add missing exports

* add missing exports

* fix some bugs

* authrequestid in htmls

* getrequest

* update auth request

* fix userid check

* add username to authrequest

* fix user session and auth request handling

* fix UserSessionsByAgentID

* fix auth request tests

* fix user session on UserPasswordChanged and MfaOtpRemoved

* fix MfaTypesSetupPossible

* handle mfa

* fill username

* auth request query checks new events

* fix userSessionByIDs

* fix tokens

* fix userSessionByIDs test

* add user selection

* init code

* user code creation date

* add init user step

* add verification failed types

* add verification failures

* verify init code

* user init code handle

* user init code handle

* fix userSessionByIDs

* update logging

* user agent cookie

* browserinfo from request

* add DeleteAuthRequest

* add static login files to binary

* add login statik to build

* move generate to separate file and remove statik.go files

* remove static dirs from startup.yaml

* generate into separate namespaces

* merge master

* auth request code

* auth request type mapping

* fix keys

* improve tokens

* improve register and basic styling

* fix ailerons font

* improve password reset

* add audience to token

* all oidc apps as audience

* fix test nextStep

* fix email texts

* remove "not set"

* lot of style changes

* improve copy to clipboard

* fix footer

* add cookie handler

* remove placeholders

* fix compilation after merge

* fix auth config

* remove comments

* typo

* use new secrets store

* change default pws to match default policy

* fixes

* add todo

* enable login

* fix db name

* Auth queries (#179)

* my usersession

* org structure/ auth handlers

* working user grant spooler

* auth internal user grants

* search my project orgs

* remove permissions file

* my zitadel permissions

* my zitadel permissions

* remove unused code

* authz

* app searches in view

* token verification

* fix user grant load

* fix tests

* fix tests

* read configs

* remove unused const

* remove todos

* env variables

* app_name

* working authz

* search projects

* global resourceowner

* Update internal/api/auth/permissions.go

Co-authored-by: Livio Amstutz <livio.a@gmail.com>

* Update internal/api/auth/permissions.go

Co-authored-by: Livio Amstutz <livio.a@gmail.com>

* model2 rename

* at least it works

* check token expiry

* search my user grants

* remove token table from authz

Co-authored-by: Livio Amstutz <livio.a@gmail.com>

* fix test

* fix ports and enable console

Co-authored-by: Fabiennne <fabienne.gerschwiler@gmail.com>
Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com>
Co-authored-by: Silvan <silvan.reusser@gmail.com>
This commit is contained in:
Livio Amstutz
2020-06-05 07:50:04 +02:00
committed by GitHub
parent 46b60a6968
commit 8a5badddf6
293 changed files with 14189 additions and 3176 deletions

View File

@@ -8,6 +8,7 @@ import (
es_sdk "github.com/caos/zitadel/internal/eventstore/sdk"
"github.com/caos/zitadel/internal/id"
org_model "github.com/caos/zitadel/internal/org/model"
"github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
)
type OrgEventstore struct {
@@ -26,7 +27,7 @@ func StartOrg(conf OrgConfig) *OrgEventstore {
}
}
func (es *OrgEventstore) PrepareCreateOrg(ctx context.Context, orgModel *org_model.Org) (*Org, []*es_models.Aggregate, error) {
func (es *OrgEventstore) PrepareCreateOrg(ctx context.Context, orgModel *org_model.Org) (*model.Org, []*es_models.Aggregate, error) {
if orgModel == nil || !orgModel.IsValid() {
return nil, nil, errors.ThrowInvalidArgument(nil, "EVENT-OeLSk", "org not valid")
}
@@ -35,7 +36,7 @@ func (es *OrgEventstore) PrepareCreateOrg(ctx context.Context, orgModel *org_mod
return nil, nil, errors.ThrowInternal(err, "EVENT-OwciI", "id gen failed")
}
orgModel.AggregateID = id
org := OrgFromModel(orgModel)
org := model.OrgFromModel(orgModel)
aggregates, err := orgCreatedAggregates(ctx, es.AggregateCreator(), org)
@@ -49,7 +50,7 @@ func (es *OrgEventstore) CreateOrg(ctx context.Context, orgModel *org_model.Org)
return nil, err
}
return OrgToModel(org), nil
return model.OrgToModel(org), nil
}
func (es *OrgEventstore) OrgByID(ctx context.Context, org *org_model.Org) (*org_model.Org, error) {
@@ -61,7 +62,7 @@ func (es *OrgEventstore) OrgByID(ctx context.Context, org *org_model.Org) (*org_
return nil, err
}
esOrg := OrgFromModel(org)
esOrg := model.OrgFromModel(org)
err = es_sdk.Filter(ctx, es.FilterEvents, esOrg.AppendEvents, query)
if err != nil && !errors.IsNotFound(err) {
return nil, err
@@ -70,7 +71,7 @@ func (es *OrgEventstore) OrgByID(ctx context.Context, org *org_model.Org) (*org_
return nil, errors.ThrowNotFound(nil, "EVENT-kVLb2", "org not found")
}
return OrgToModel(esOrg), nil
return model.OrgToModel(esOrg), nil
}
func (es *OrgEventstore) IsOrgUnique(ctx context.Context, name, domain string) (isUnique bool, err error) {
@@ -93,7 +94,7 @@ func isUniqueValidation(unique *bool) func(events ...*es_models.Event) error {
if len(events) == 0 {
return nil
}
*unique = *unique || events[0].Type == org_model.OrgDomainReserved || events[0].Type == org_model.OrgNameReserved
*unique = *unique || events[0].Type == model.OrgDomainReserved || events[0].Type == model.OrgNameReserved
return nil
}
@@ -104,7 +105,7 @@ func (es *OrgEventstore) DeactivateOrg(ctx context.Context, orgID string) (*org_
if err != nil {
return nil, errors.ThrowInvalidArgument(nil, "EVENT-oL9nT", "org not found")
}
org := OrgFromModel(existingOrg)
org := model.OrgFromModel(existingOrg)
aggregate := orgDeactivateAggregate(es.AggregateCreator(), org)
err = es_sdk.Push(ctx, es.PushAggregates, org.AppendEvents, aggregate)
@@ -112,7 +113,7 @@ func (es *OrgEventstore) DeactivateOrg(ctx context.Context, orgID string) (*org_
return nil, err
}
return OrgToModel(org), nil
return model.OrgToModel(org), nil
}
func (es *OrgEventstore) ReactivateOrg(ctx context.Context, orgID string) (*org_model.Org, error) {
@@ -120,7 +121,7 @@ func (es *OrgEventstore) ReactivateOrg(ctx context.Context, orgID string) (*org_
if err != nil {
return nil, errors.ThrowInvalidArgument(nil, "EVENT-oL9nT", "org not set")
}
org := OrgFromModel(existingOrg)
org := model.OrgFromModel(existingOrg)
aggregate := orgReactivateAggregate(es.AggregateCreator(), org)
err = es_sdk.Push(ctx, es.PushAggregates, org.AppendEvents, aggregate)
@@ -128,7 +129,7 @@ func (es *OrgEventstore) ReactivateOrg(ctx context.Context, orgID string) (*org_
return nil, err
}
return OrgToModel(org), nil
return model.OrgToModel(org), nil
}
func (es *OrgEventstore) OrgMemberByIDs(ctx context.Context, member *org_model.OrgMember) (*org_model.OrgMember, error) {
@@ -150,12 +151,12 @@ func (es *OrgEventstore) OrgMemberByIDs(ctx context.Context, member *org_model.O
return nil, errors.ThrowNotFound(nil, "EVENT-SXji6", "member not found")
}
func (es *OrgEventstore) PrepareAddOrgMember(ctx context.Context, member *org_model.OrgMember) (*OrgMember, *es_models.Aggregate, error) {
func (es *OrgEventstore) PrepareAddOrgMember(ctx context.Context, member *org_model.OrgMember) (*model.OrgMember, *es_models.Aggregate, error) {
if member == nil || !member.IsValid() {
return nil, nil, errors.ThrowPreconditionFailed(nil, "EVENT-9dk45", "UserID and Roles are required")
}
repoMember := OrgMemberFromModel(member)
repoMember := model.OrgMemberFromModel(member)
addAggregate, err := orgMemberAddedAggregate(ctx, es.Eventstore.AggregateCreator(), repoMember)
return repoMember, addAggregate, err
@@ -171,7 +172,7 @@ func (es *OrgEventstore) AddOrgMember(ctx context.Context, member *org_model.Org
return nil, err
}
return OrgMemberToModel(repoMember), nil
return model.OrgMemberToModel(repoMember), nil
}
func (es *OrgEventstore) ChangeOrgMember(ctx context.Context, member *org_model.OrgMember) (*org_model.OrgMember, error) {
@@ -185,8 +186,8 @@ func (es *OrgEventstore) ChangeOrgMember(ctx context.Context, member *org_model.
}
member.ObjectRoot = existingMember.ObjectRoot
repoMember := OrgMemberFromModel(member)
repoExistingMember := OrgMemberFromModel(existingMember)
repoMember := model.OrgMemberFromModel(member)
repoExistingMember := model.OrgMemberFromModel(existingMember)
orgAggregate := orgMemberChangedAggregate(es.Eventstore.AggregateCreator(), repoExistingMember, repoMember)
err = es_sdk.Push(ctx, es.PushAggregates, repoMember.AppendEvents, orgAggregate)
@@ -194,7 +195,7 @@ func (es *OrgEventstore) ChangeOrgMember(ctx context.Context, member *org_model.
return nil, err
}
return OrgMemberToModel(repoMember), nil
return model.OrgMemberToModel(repoMember), nil
}
func (es *OrgEventstore) RemoveOrgMember(ctx context.Context, member *org_model.OrgMember) error {
@@ -211,7 +212,7 @@ func (es *OrgEventstore) RemoveOrgMember(ctx context.Context, member *org_model.
}
member.ObjectRoot = existingMember.ObjectRoot
repoMember := OrgMemberFromModel(member)
repoMember := model.OrgMemberFromModel(member)
orgAggregate := orgMemberRemovedAggregate(es.Eventstore.AggregateCreator(), repoMember)
return es_sdk.Push(ctx, es.PushAggregates, repoMember.AppendEvents, orgAggregate)

View File

@@ -2,6 +2,7 @@ package eventsourcing
import (
"context"
"github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
"testing"
"time"
@@ -428,7 +429,7 @@ func TestOrgEventstore_OrgMemberByIDs(t *testing.T) {
{
name: "new events found and added success",
fields: fields{Eventstore: newTestEventstore(t).expectFilterEvents([]*es_models.Event{
{Sequence: 6, Data: []byte("{\"userId\": \"banana\", \"roles\": [\"bananaa\"]}"), Type: org_model.OrgMemberChanged},
{Sequence: 6, Data: []byte("{\"userId\": \"banana\", \"roles\": [\"bananaa\"]}"), Type: model.OrgMemberChanged},
}, nil)},
args: args{
ctx: auth.NewMockContext("user", "org"),
@@ -442,8 +443,8 @@ func TestOrgEventstore_OrgMemberByIDs(t *testing.T) {
{
name: "not member of org error",
fields: fields{Eventstore: newTestEventstore(t).expectFilterEvents([]*es_models.Event{
{Sequence: 6, Data: []byte("{\"userId\": \"banana\", \"roles\": [\"bananaa\"]}"), Type: org_model.OrgMemberAdded},
{Sequence: 7, Data: []byte("{\"userId\": \"apple\"}"), Type: org_model.OrgMemberRemoved},
{Sequence: 6, Data: []byte("{\"userId\": \"banana\", \"roles\": [\"bananaa\"]}"), Type: model.OrgMemberAdded},
{Sequence: 7, Data: []byte("{\"userId\": \"apple\"}"), Type: model.OrgMemberRemoved},
}, nil)},
args: args{
ctx: auth.NewMockContext("user", "org"),
@@ -511,7 +512,7 @@ func TestOrgEventstore_AddOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
@@ -541,7 +542,7 @@ func TestOrgEventstore_AddOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
@@ -570,7 +571,7 @@ func TestOrgEventstore_AddOrgMember(t *testing.T) {
expectAggregateCreator().
expectFilterEvents([]*es_models.Event{
{
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "hodor", "roles": ["master"]}`),
Sequence: 6,
},
@@ -600,12 +601,12 @@ func TestOrgEventstore_AddOrgMember(t *testing.T) {
expectPushEvents(10, nil).
expectFilterEvents([]*es_models.Event{
{
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "hodor", "roles": ["master"]}`),
Sequence: 6,
},
{
Type: org_model.OrgMemberRemoved,
Type: model.OrgMemberRemoved,
Data: []byte(`{"userId": "hodor"}`),
Sequence: 10,
},
@@ -708,13 +709,13 @@ func TestOrgEventstore_ChangeOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
{
AggregateID: "hodor-org",
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "brudi", "roles": ["master of desaster"]}`),
Sequence: 6,
},
@@ -740,13 +741,13 @@ func TestOrgEventstore_ChangeOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
{
AggregateID: "hodor-org",
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "hodor", "roles": ["master"]}`),
Sequence: 6,
},
@@ -772,13 +773,13 @@ func TestOrgEventstore_ChangeOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
{
AggregateID: "hodor-org",
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "hodor", "roles": ["master"]}`),
Sequence: 6,
},
@@ -805,13 +806,13 @@ func TestOrgEventstore_ChangeOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
{
AggregateID: "hodor-org",
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "hodor", "roles": ["master"]}`),
Sequence: 6,
},
@@ -890,13 +891,13 @@ func TestOrgEventstore_RemoveOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
{
AggregateID: "hodor-org",
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "brudi", "roles": ["master of desaster"]}`),
Sequence: 6,
},
@@ -921,13 +922,13 @@ func TestOrgEventstore_RemoveOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
{
AggregateID: "hodor-org",
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "hodor", "roles": ["master"]}`),
Sequence: 6,
},
@@ -952,13 +953,13 @@ func TestOrgEventstore_RemoveOrgMember(t *testing.T) {
expectFilterEvents([]*es_models.Event{
{
AggregateID: "hodor-org",
Type: org_model.OrgAdded,
Type: model.OrgAdded,
Sequence: 4,
Data: []byte("{}"),
},
{
AggregateID: "hodor-org",
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId": "hodor", "roles": ["master"]}`),
Sequence: 6,
},
@@ -996,7 +997,7 @@ func TestOrgEventstore_RemoveOrgMember(t *testing.T) {
func orgCreatedEvent() *es_models.Event {
return &es_models.Event{
AggregateID: "hodor-org",
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
AggregateVersion: "v1",
CreationDate: time.Now().Add(-1 * time.Minute),
Data: []byte(`{"name": "hodor-org", "domain":"hodor.org"}`),
@@ -1005,14 +1006,14 @@ func orgCreatedEvent() *es_models.Event {
ID: "sdlfö4t23kj",
ResourceOwner: "hodor-org",
Sequence: 32,
Type: org_model.OrgAdded,
Type: model.OrgAdded,
}
}
func orgInactiveEvent() *es_models.Event {
return &es_models.Event{
AggregateID: "hodor-org",
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
AggregateVersion: "v1",
CreationDate: time.Now().Add(-1 * time.Minute),
Data: nil,
@@ -1021,6 +1022,6 @@ func orgInactiveEvent() *es_models.Event {
ID: "sdlfö4t23kj",
ResourceOwner: "hodor-org",
Sequence: 52,
Type: org_model.OrgDeactivated,
Type: model.OrgDeactivated,
}
}

View File

@@ -1,4 +1,4 @@
package eventsourcing
package model
import (
"encoding/json"
@@ -29,10 +29,10 @@ func (m *OrgMember) AppendEvents(events ...*es_models.Event) error {
func (m *OrgMember) AppendEvent(event *es_models.Event) error {
m.ObjectRoot.AppendEvent(event)
return m.setData(event)
return m.SetData(event)
}
func (m *OrgMember) setData(event *es_models.Event) error {
func (m *OrgMember) SetData(event *es_models.Event) error {
err := json.Unmarshal(event.Data, m)
if err != nil {
return errors.ThrowInternal(err, "EVENT-Hz7Mb", "unable to unmarshal data")

View File

@@ -1,15 +1,14 @@
package eventsourcing
package model
import (
"encoding/json"
"github.com/caos/zitadel/internal/errors"
es_models "github.com/caos/zitadel/internal/eventstore/models"
org_model "github.com/caos/zitadel/internal/org/model"
)
const (
orgVersion = "v1"
OrgVersion = "v1"
)
type Org struct {
@@ -64,22 +63,22 @@ func (o *Org) AppendEvents(events ...*es_models.Event) error {
func (o *Org) AppendEvent(event *es_models.Event) error {
switch event.Type {
case org_model.OrgAdded:
case OrgAdded:
*o = Org{}
err := o.setData(event)
if err != nil {
return err
}
case org_model.OrgChanged:
case OrgChanged:
err := o.setData(event)
if err != nil {
return err
}
case org_model.OrgDeactivated:
case OrgDeactivated:
o.State = int32(org_model.ORGSTATE_INACTIVE)
case org_model.OrgReactivated:
case OrgReactivated:
o.State = int32(org_model.ORGSTATE_ACTIVE)
case org_model.OrgMemberAdded:
case OrgMemberAdded:
member, err := OrgMemberFromEvent(nil, event)
if err != nil {
return err
@@ -87,7 +86,7 @@ func (o *Org) AppendEvent(event *es_models.Event) error {
member.CreationDate = event.CreationDate
o.setMember(member)
case org_model.OrgMemberChanged:
case OrgMemberChanged:
member, err := OrgMemberFromEvent(nil, event)
if err != nil {
return err
@@ -96,7 +95,7 @@ func (o *Org) AppendEvent(event *es_models.Event) error {
member.CreationDate = existingMember.CreationDate
o.setMember(member)
case org_model.OrgMemberRemoved:
case OrgMemberRemoved:
member, err := OrgMemberFromEvent(nil, event)
if err != nil {
return err

View File

@@ -1,4 +1,4 @@
package eventsourcing
package model
import (
"encoding/json"
@@ -22,7 +22,7 @@ func TestOrgFromEvents(t *testing.T) {
name: "org from events, ok",
args: args{
event: []*es_models.Event{
{AggregateID: "ID", Sequence: 1, Type: model.OrgAdded},
{AggregateID: "ID", Sequence: 1, Type: OrgAdded},
},
org: &Org{Name: "OrgName"},
},
@@ -32,7 +32,7 @@ func TestOrgFromEvents(t *testing.T) {
name: "org from events, nil org",
args: args{
event: []*es_models.Event{
{AggregateID: "ID", Sequence: 1, Type: model.OrgAdded},
{AggregateID: "ID", Sequence: 1, Type: OrgAdded},
},
org: nil,
},
@@ -66,7 +66,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append added event",
args: args{
event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: model.OrgAdded},
event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: OrgAdded},
org: &Org{Name: "OrgName"},
},
result: &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: "ID"}, State: int32(model.ORGSTATE_ACTIVE), Name: "OrgName"},
@@ -74,7 +74,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append change event",
args: args{
event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: model.OrgChanged, Data: []byte(`{"domain": "OrgDomain"}`)},
event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: OrgChanged, Data: []byte(`{"domain": "OrgDomain"}`)},
org: &Org{Name: "OrgName", Domain: "asdf"},
},
result: &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: "ID"}, State: int32(model.ORGSTATE_ACTIVE), Name: "OrgName", Domain: "OrgDomain"},
@@ -82,14 +82,14 @@ func TestAppendEvent(t *testing.T) {
{
name: "append deactivate event",
args: args{
event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: model.OrgDeactivated},
event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: OrgDeactivated},
},
result: &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: "ID"}, State: int32(model.ORGSTATE_INACTIVE)},
},
{
name: "append reactivate event",
args: args{
event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: model.OrgReactivated},
event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: OrgReactivated},
},
result: &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: "ID"}, State: int32(model.ORGSTATE_ACTIVE)},
},

View File

@@ -5,6 +5,7 @@ import (
"github.com/caos/zitadel/internal/errors"
es_models "github.com/caos/zitadel/internal/eventstore/models"
org_model "github.com/caos/zitadel/internal/org/model"
"github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
)
func OrgByIDQuery(id string, latestSequence uint64) (*es_models.SearchQuery, error) {
@@ -17,7 +18,7 @@ func OrgByIDQuery(id string, latestSequence uint64) (*es_models.SearchQuery, err
func OrgDomainUniqueQuery(domain string) *es_models.SearchQuery {
return es_models.NewSearchQuery().
AggregateTypeFilter(org_model.OrgDomainAggregate).
AggregateTypeFilter(model.OrgDomainAggregate).
AggregateIDFilter(domain).
OrderDesc().
SetLimit(1)
@@ -25,7 +26,7 @@ func OrgDomainUniqueQuery(domain string) *es_models.SearchQuery {
func OrgNameUniqueQuery(name string) *es_models.SearchQuery {
return es_models.NewSearchQuery().
AggregateTypeFilter(org_model.OrgNameAggregate).
AggregateTypeFilter(model.OrgNameAggregate).
AggregateIDFilter(name).
OrderDesc().
SetLimit(1)
@@ -33,15 +34,15 @@ func OrgNameUniqueQuery(name string) *es_models.SearchQuery {
func OrgQuery(latestSequence uint64) *es_models.SearchQuery {
return es_models.NewSearchQuery().
AggregateTypeFilter(org_model.OrgAggregate).
AggregateTypeFilter(model.OrgAggregate).
LatestSequenceFilter(latestSequence)
}
func OrgAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, id string, sequence uint64) (*es_models.Aggregate, error) {
return aggCreator.NewAggregate(ctx, id, org_model.OrgAggregate, orgVersion, sequence)
return aggCreator.NewAggregate(ctx, id, model.OrgAggregate, model.OrgVersion, sequence)
}
func orgCreatedAggregates(ctx context.Context, aggCreator *es_models.AggregateCreator, org *Org) (_ []*es_models.Aggregate, err error) {
func orgCreatedAggregates(ctx context.Context, aggCreator *es_models.AggregateCreator, org *model.Org) (_ []*es_models.Aggregate, err error) {
if org == nil {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-kdie7", "org should not be nil")
}
@@ -56,11 +57,11 @@ func orgCreatedAggregates(ctx context.Context, aggCreator *es_models.AggregateCr
return nil, err
}
agg, err := aggCreator.NewAggregate(ctx, org.AggregateID, org_model.OrgAggregate, orgVersion, org.Sequence, es_models.OverwriteResourceOwner(org.AggregateID))
agg, err := aggCreator.NewAggregate(ctx, org.AggregateID, model.OrgAggregate, model.OrgVersion, org.Sequence, es_models.OverwriteResourceOwner(org.AggregateID))
if err != nil {
return nil, err
}
agg, err = agg.AppendEvent(org_model.OrgAdded, org)
agg, err = agg.AppendEvent(model.OrgAdded, org)
if err != nil {
return nil, err
}
@@ -72,7 +73,7 @@ func orgCreatedAggregates(ctx context.Context, aggCreator *es_models.AggregateCr
}, nil
}
func OrgUpdateAggregates(ctx context.Context, aggCreator *es_models.AggregateCreator, existing *Org, updated *Org) ([]*es_models.Aggregate, error) {
func OrgUpdateAggregates(ctx context.Context, aggCreator *es_models.AggregateCreator, existing *model.Org, updated *model.Org) ([]*es_models.Aggregate, error) {
if existing == nil {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-dk83d", "existing org must not be nil")
}
@@ -107,7 +108,7 @@ func OrgUpdateAggregates(ctx context.Context, aggCreator *es_models.AggregateCre
return nil, err
}
orgAggregate, err = orgAggregate.AppendEvent(org_model.OrgChanged, changes)
orgAggregate, err = orgAggregate.AppendEvent(model.OrgChanged, changes)
if err != nil {
return nil, err
}
@@ -116,7 +117,7 @@ func OrgUpdateAggregates(ctx context.Context, aggCreator *es_models.AggregateCre
return aggregates, nil
}
func orgDeactivateAggregate(aggCreator *es_models.AggregateCreator, org *Org) func(ctx context.Context) (*es_models.Aggregate, error) {
func orgDeactivateAggregate(aggCreator *es_models.AggregateCreator, org *model.Org) func(ctx context.Context) (*es_models.Aggregate, error) {
return func(ctx context.Context) (*es_models.Aggregate, error) {
if org == nil {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-R03z8", "existing org must not be nil")
@@ -129,11 +130,11 @@ func orgDeactivateAggregate(aggCreator *es_models.AggregateCreator, org *Org) fu
return nil, err
}
return agg.AppendEvent(org_model.OrgDeactivated, nil)
return agg.AppendEvent(model.OrgDeactivated, nil)
}
}
func orgReactivateAggregate(aggCreator *es_models.AggregateCreator, org *Org) func(ctx context.Context) (*es_models.Aggregate, error) {
func orgReactivateAggregate(aggCreator *es_models.AggregateCreator, org *model.Org) func(ctx context.Context) (*es_models.Aggregate, error) {
return func(ctx context.Context) (*es_models.Aggregate, error) {
if org == nil {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-cTHLd", "existing org must not be nil")
@@ -146,40 +147,40 @@ func orgReactivateAggregate(aggCreator *es_models.AggregateCreator, org *Org) fu
return nil, err
}
return agg.AppendEvent(org_model.OrgReactivated, nil)
return agg.AppendEvent(model.OrgReactivated, nil)
}
}
func uniqueDomainAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, resourceOwner, domain string) (*es_models.Aggregate, error) {
aggregate, err := aggCreator.NewAggregate(ctx, domain, org_model.OrgDomainAggregate, orgVersion, 0)
aggregate, err := aggCreator.NewAggregate(ctx, domain, model.OrgDomainAggregate, model.OrgVersion, 0)
if resourceOwner != "" {
aggregate, err = aggCreator.NewAggregate(ctx, domain, org_model.OrgDomainAggregate, orgVersion, 0, es_models.OverwriteResourceOwner(resourceOwner))
aggregate, err = aggCreator.NewAggregate(ctx, domain, model.OrgDomainAggregate, model.OrgVersion, 0, es_models.OverwriteResourceOwner(resourceOwner))
}
if err != nil {
return nil, err
}
aggregate, err = aggregate.AppendEvent(org_model.OrgDomainReserved, nil)
aggregate, err = aggregate.AppendEvent(model.OrgDomainReserved, nil)
if err != nil {
return nil, err
}
return aggregate.SetPrecondition(OrgDomainUniqueQuery(domain), isReservedValidation(aggregate, org_model.OrgDomainReserved)), nil
return aggregate.SetPrecondition(OrgDomainUniqueQuery(domain), isReservedValidation(aggregate, model.OrgDomainReserved)), nil
}
func uniqueNameAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, resourceOwner, name string) (aggregate *es_models.Aggregate, err error) {
aggregate, err = aggCreator.NewAggregate(ctx, name, org_model.OrgNameAggregate, orgVersion, 0)
aggregate, err = aggCreator.NewAggregate(ctx, name, model.OrgNameAggregate, model.OrgVersion, 0)
if resourceOwner != "" {
aggregate, err = aggCreator.NewAggregate(ctx, name, org_model.OrgNameAggregate, orgVersion, 0, es_models.OverwriteResourceOwner(resourceOwner))
aggregate, err = aggCreator.NewAggregate(ctx, name, model.OrgNameAggregate, model.OrgVersion, 0, es_models.OverwriteResourceOwner(resourceOwner))
}
if err != nil {
return nil, err
}
aggregate, err = aggregate.AppendEvent(org_model.OrgNameReserved, nil)
aggregate, err = aggregate.AppendEvent(model.OrgNameReserved, nil)
if err != nil {
return nil, err
}
return aggregate.SetPrecondition(OrgNameUniqueQuery(name), isReservedValidation(aggregate, org_model.OrgNameReserved)), nil
return aggregate.SetPrecondition(OrgNameUniqueQuery(name), isReservedValidation(aggregate, model.OrgNameReserved)), nil
}
func isReservedValidation(aggregate *es_models.Aggregate, resevedEventType es_models.EventType) func(...*es_models.Event) error {

View File

@@ -2,33 +2,33 @@ package eventsourcing
import (
"context"
"github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
"github.com/caos/zitadel/internal/errors"
es_models "github.com/caos/zitadel/internal/eventstore/models"
org_model "github.com/caos/zitadel/internal/org/model"
usr_model "github.com/caos/zitadel/internal/user/repository/eventsourcing/model"
)
func orgMemberAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, member *OrgMember) (*es_models.Aggregate, error) {
func orgMemberAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, member *model.OrgMember) (*es_models.Aggregate, error) {
if member == nil {
return nil, errors.ThrowInvalidArgument(nil, "EVENT-c63Ap", "member must not be nil")
}
aggregate, err := aggCreator.NewAggregate(ctx, member.AggregateID, org_model.OrgAggregate, orgVersion, member.Sequence)
aggregate, err := aggCreator.NewAggregate(ctx, member.AggregateID, model.OrgAggregate, model.OrgVersion, member.Sequence)
if err != nil {
return nil, err
}
validationQuery := es_models.NewSearchQuery().
AggregateTypeFilter(org_model.OrgAggregate, usr_model.UserAggregate).
AggregateTypeFilter(model.OrgAggregate, usr_model.UserAggregate).
AggregateIDsFilter(member.AggregateID, member.UserID)
validation := addMemberValidation(aggregate, member)
return aggregate.SetPrecondition(validationQuery, validation).AppendEvent(org_model.OrgMemberAdded, member)
return aggregate.SetPrecondition(validationQuery, validation).AppendEvent(model.OrgMemberAdded, member)
}
func orgMemberChangedAggregate(aggCreator *es_models.AggregateCreator, existingMember *OrgMember, member *OrgMember) func(ctx context.Context) (*es_models.Aggregate, error) {
func orgMemberChangedAggregate(aggCreator *es_models.AggregateCreator, existingMember *model.OrgMember, member *model.OrgMember) func(ctx context.Context) (*es_models.Aggregate, error) {
return func(ctx context.Context) (*es_models.Aggregate, error) {
if member == nil || existingMember == nil {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-d34fs", "member must not be nil")
@@ -43,11 +43,11 @@ func orgMemberChangedAggregate(aggCreator *es_models.AggregateCreator, existingM
if err != nil {
return nil, err
}
return agg.AppendEvent(org_model.OrgMemberChanged, changes)
return agg.AppendEvent(model.OrgMemberChanged, changes)
}
}
func orgMemberRemovedAggregate(aggCreator *es_models.AggregateCreator, member *OrgMember) func(ctx context.Context) (*es_models.Aggregate, error) {
func orgMemberRemovedAggregate(aggCreator *es_models.AggregateCreator, member *model.OrgMember) func(ctx context.Context) (*es_models.Aggregate, error) {
return func(ctx context.Context) (*es_models.Aggregate, error) {
if member == nil {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-dieu7", "member must not be nil")
@@ -57,11 +57,11 @@ func orgMemberRemovedAggregate(aggCreator *es_models.AggregateCreator, member *O
if err != nil {
return nil, err
}
return agg.AppendEvent(org_model.OrgMemberRemoved, member)
return agg.AppendEvent(model.OrgMemberRemoved, member)
}
}
func addMemberValidation(aggregate *es_models.Aggregate, member *OrgMember) func(...*es_models.Event) error {
func addMemberValidation(aggregate *es_models.Aggregate, member *model.OrgMember) func(...*es_models.Event) error {
return func(events ...*es_models.Event) error {
existsOrg := false
existsUser := false
@@ -70,17 +70,17 @@ func addMemberValidation(aggregate *es_models.Aggregate, member *OrgMember) func
switch event.AggregateType {
case usr_model.UserAggregate:
existsUser = true
case org_model.OrgAggregate:
case model.OrgAggregate:
aggregate.PreviousSequence = event.Sequence
existsOrg = true
switch event.Type {
case org_model.OrgMemberAdded, org_model.OrgMemberRemoved:
manipulatedMember, err := OrgMemberFromEvent(new(OrgMember), event)
case model.OrgMemberAdded, model.OrgMemberRemoved:
manipulatedMember, err := model.OrgMemberFromEvent(new(model.OrgMember), event)
if err != nil {
return errors.ThrowInternal(err, "EVENT-Eg8St", "unable to validate object")
}
if manipulatedMember.UserID == member.UserID {
isMember = event.Type == org_model.OrgMemberAdded
isMember = event.Type == model.OrgMemberAdded
}
}
}

View File

@@ -2,12 +2,12 @@ package eventsourcing
import (
"context"
"github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
"testing"
"github.com/caos/zitadel/internal/api/auth"
"github.com/caos/zitadel/internal/errors"
es_models "github.com/caos/zitadel/internal/eventstore/models"
org_model "github.com/caos/zitadel/internal/org/model"
usr_model "github.com/caos/zitadel/internal/user/repository/eventsourcing/model"
)
@@ -18,7 +18,7 @@ func TestOrgMemberAddedAggregate(t *testing.T) {
}
type args struct {
aggCreator *es_models.AggregateCreator
member *OrgMember
member *model.OrgMember
ctx context.Context
}
tests := []struct {
@@ -42,7 +42,7 @@ func TestOrgMemberAddedAggregate(t *testing.T) {
args: args{
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
member: &OrgMember{
member: &model.OrgMember{
ObjectRoot: es_models.ObjectRoot{AggregateID: "asdf", Sequence: 234},
},
},
@@ -78,8 +78,8 @@ func TestOrgMemberChangedAggregate(t *testing.T) {
}
type args struct {
aggCreator *es_models.AggregateCreator
existingMember *OrgMember
member *OrgMember
existingMember *model.OrgMember
member *model.OrgMember
ctx context.Context
}
tests := []struct {
@@ -93,7 +93,7 @@ func TestOrgMemberChangedAggregate(t *testing.T) {
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
member: nil,
existingMember: &OrgMember{},
existingMember: &model.OrgMember{},
},
res: res{
isErr: errors.IsPreconditionFailed,
@@ -105,7 +105,7 @@ func TestOrgMemberChangedAggregate(t *testing.T) {
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
existingMember: nil,
member: &OrgMember{},
member: &model.OrgMember{},
},
res: res{
isErr: errors.IsPreconditionFailed,
@@ -116,10 +116,10 @@ func TestOrgMemberChangedAggregate(t *testing.T) {
args: args{
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
member: &OrgMember{
member: &model.OrgMember{
ObjectRoot: es_models.ObjectRoot{AggregateID: "asdf", Sequence: 234},
},
existingMember: &OrgMember{
existingMember: &model.OrgMember{
ObjectRoot: es_models.ObjectRoot{AggregateID: "asdf", Sequence: 234},
},
},
@@ -132,11 +132,11 @@ func TestOrgMemberChangedAggregate(t *testing.T) {
args: args{
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
member: &OrgMember{
member: &model.OrgMember{
ObjectRoot: es_models.ObjectRoot{AggregateID: "asdf", Sequence: 234},
Roles: []string{"asdf"},
},
existingMember: &OrgMember{
existingMember: &model.OrgMember{
ObjectRoot: es_models.ObjectRoot{AggregateID: "asdf", Sequence: 234},
Roles: []string{"asdf", "woeri"},
},
@@ -174,7 +174,7 @@ func TestOrgMemberRemovedAggregate(t *testing.T) {
}
type args struct {
aggCreator *es_models.AggregateCreator
member *OrgMember
member *model.OrgMember
ctx context.Context
}
tests := []struct {
@@ -198,7 +198,7 @@ func TestOrgMemberRemovedAggregate(t *testing.T) {
args: args{
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
member: &OrgMember{
member: &model.OrgMember{
ObjectRoot: es_models.ObjectRoot{AggregateID: "asdf", Sequence: 234},
},
},
@@ -236,7 +236,7 @@ func Test_addMemberValidation(t *testing.T) {
type args struct {
aggregate *es_models.Aggregate
events []*es_models.Event
member *OrgMember
member *model.OrgMember
}
tests := []struct {
name string
@@ -258,21 +258,21 @@ func Test_addMemberValidation(t *testing.T) {
aggregate: &es_models.Aggregate{},
events: []*es_models.Event{
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 13,
},
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 142,
},
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 1234,
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId":"hodor"}`),
},
},
member: &OrgMember{UserID: "hodor"},
member: &model.OrgMember{UserID: "hodor"},
},
res: res{
isErr: errors.IsPreconditionFailed,
@@ -292,7 +292,7 @@ func Test_addMemberValidation(t *testing.T) {
Sequence: 142,
},
},
member: &OrgMember{UserID: "hodor"},
member: &model.OrgMember{UserID: "hodor"},
},
res: res{
isErr: errors.IsPreconditionFailed,
@@ -308,11 +308,11 @@ func Test_addMemberValidation(t *testing.T) {
Sequence: 13,
},
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 142,
},
},
member: &OrgMember{UserID: "hodor"},
member: &model.OrgMember{UserID: "hodor"},
},
res: res{
isErr: nil,
@@ -329,23 +329,23 @@ func Test_addMemberValidation(t *testing.T) {
Sequence: 13,
},
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 142,
},
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 1234,
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId":"hodor"}`),
},
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 1236,
Type: org_model.OrgMemberRemoved,
Type: model.OrgMemberRemoved,
Data: []byte(`{"userId":"hodor"}`),
},
},
member: &OrgMember{UserID: "hodor"},
member: &model.OrgMember{UserID: "hodor"},
},
res: res{
isErr: nil,
@@ -362,17 +362,17 @@ func Test_addMemberValidation(t *testing.T) {
Sequence: 13,
},
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 142,
},
{
AggregateType: org_model.OrgAggregate,
AggregateType: model.OrgAggregate,
Sequence: 1234,
Type: org_model.OrgMemberAdded,
Type: model.OrgMemberAdded,
Data: []byte(`{"userId":"hodor"}`),
},
},
member: &OrgMember{UserID: "hodor"},
member: &model.OrgMember{UserID: "hodor"},
},
res: res{
isErr: errors.IsPreconditionFailed,

View File

@@ -2,6 +2,7 @@ package eventsourcing
import (
"context"
"github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
"testing"
"github.com/caos/zitadel/internal/api/auth"
@@ -217,7 +218,7 @@ func TestOrgReactivateAggregate(t *testing.T) {
}
type args struct {
aggCreator *es_models.AggregateCreator
org *Org
org *model.Org
ctx context.Context
}
tests := []struct {
@@ -230,7 +231,7 @@ func TestOrgReactivateAggregate(t *testing.T) {
args: args{
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
org: &Org{
org: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "orgID",
Sequence: 2,
@@ -244,7 +245,7 @@ func TestOrgReactivateAggregate(t *testing.T) {
args: args{
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
org: &Org{
org: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "orgID",
Sequence: 2,
@@ -291,7 +292,7 @@ func TestOrgDeactivateAggregate(t *testing.T) {
}
type args struct {
aggCreator *es_models.AggregateCreator
org *Org
org *model.Org
ctx context.Context
}
tests := []struct {
@@ -304,7 +305,7 @@ func TestOrgDeactivateAggregate(t *testing.T) {
args: args{
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
org: &Org{
org: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "orgID",
Sequence: 2,
@@ -318,7 +319,7 @@ func TestOrgDeactivateAggregate(t *testing.T) {
args: args{
aggCreator: es_models.NewAggregateCreator("test"),
ctx: auth.NewMockContext("org", "user"),
org: &Org{
org: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "orgID",
Sequence: 2,
@@ -367,8 +368,8 @@ func TestOrgUpdateAggregates(t *testing.T) {
type args struct {
ctx context.Context
aggCreator *es_models.AggregateCreator
existing *Org
updated *Org
existing *model.Org
updated *model.Org
}
tests := []struct {
name string
@@ -381,7 +382,7 @@ func TestOrgUpdateAggregates(t *testing.T) {
ctx: auth.NewMockContext("org", "user"),
aggCreator: es_models.NewAggregateCreator("test"),
existing: nil,
updated: &Org{},
updated: &model.Org{},
},
res: res{
aggregateCount: 0,
@@ -393,7 +394,7 @@ func TestOrgUpdateAggregates(t *testing.T) {
args: args{
ctx: auth.NewMockContext("org", "user"),
aggCreator: es_models.NewAggregateCreator("test"),
existing: &Org{},
existing: &model.Org{},
updated: nil,
},
res: res{
@@ -406,8 +407,8 @@ func TestOrgUpdateAggregates(t *testing.T) {
args: args{
ctx: auth.NewMockContext("org", "user"),
aggCreator: es_models.NewAggregateCreator("test"),
existing: &Org{},
updated: &Org{},
existing: &model.Org{},
updated: &model.Org{},
},
res: res{
aggregateCount: 0,
@@ -419,7 +420,7 @@ func TestOrgUpdateAggregates(t *testing.T) {
args: args{
ctx: auth.NewMockContext("org", "user"),
aggCreator: es_models.NewAggregateCreator("test"),
existing: &Org{
existing: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "sdaf",
Sequence: 5,
@@ -427,7 +428,7 @@ func TestOrgUpdateAggregates(t *testing.T) {
Domain: "caos.ch",
Name: "coas",
},
updated: &Org{
updated: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "sdaf",
Sequence: 5,
@@ -446,7 +447,7 @@ func TestOrgUpdateAggregates(t *testing.T) {
args: args{
ctx: auth.NewMockContext("org", "user"),
aggCreator: es_models.NewAggregateCreator("test"),
existing: &Org{
existing: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "sdaf",
Sequence: 5,
@@ -454,7 +455,7 @@ func TestOrgUpdateAggregates(t *testing.T) {
Domain: "caos.swiss",
Name: "caos",
},
updated: &Org{
updated: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "sdaf",
Sequence: 5,
@@ -493,7 +494,7 @@ func TestOrgCreatedAggregates(t *testing.T) {
type args struct {
ctx context.Context
aggCreator *es_models.AggregateCreator
org *Org
org *model.Org
}
tests := []struct {
name string
@@ -517,7 +518,7 @@ func TestOrgCreatedAggregates(t *testing.T) {
args: args{
ctx: auth.NewMockContext("org", "user"),
aggCreator: es_models.NewAggregateCreator("test"),
org: &Org{
org: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "sdaf",
Sequence: 5,
@@ -536,7 +537,7 @@ func TestOrgCreatedAggregates(t *testing.T) {
args: args{
ctx: auth.NewMockContext("org", "user"),
aggCreator: es_models.NewAggregateCreator("test"),
org: &Org{
org: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "sdaf",
Sequence: 5,
@@ -554,7 +555,7 @@ func TestOrgCreatedAggregates(t *testing.T) {
args: args{
ctx: auth.NewMockContext("org", "user"),
aggCreator: es_models.NewAggregateCreator("test"),
org: &Org{
org: &model.Org{
ObjectRoot: es_models.ObjectRoot{
AggregateID: "sdaf",
Sequence: 5,

View File

@@ -2,12 +2,12 @@ package view
import (
"encoding/json"
"github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
"time"
"github.com/caos/logging"
"github.com/caos/zitadel/internal/errors"
es_models "github.com/caos/zitadel/internal/eventstore/models"
org_es_model "github.com/caos/zitadel/internal/org/model"
org_model "github.com/caos/zitadel/internal/org/model"
)
@@ -69,17 +69,17 @@ func OrgsToModel(orgs []*OrgView) []*org_model.OrgView {
func (o *OrgView) AppendEvent(event *es_models.Event) (err error) {
switch event.Type {
case org_es_model.OrgAdded:
case model.OrgAdded:
o.CreationDate = event.CreationDate
o.State = int32(org_model.ORGSTATE_ACTIVE)
o.setRootData(event)
err = o.SetData(event)
case org_es_model.OrgChanged:
case model.OrgChanged:
o.setRootData(event)
err = o.SetData(event)
case org_es_model.OrgDeactivated:
case model.OrgDeactivated:
o.State = int32(org_model.ORGSTATE_INACTIVE)
case org_es_model.OrgReactivated:
case model.OrgReactivated:
o.State = int32(org_model.ORGSTATE_ACTIVE)
}
return err

View File

@@ -2,6 +2,7 @@ package view
import (
"encoding/json"
es_model "github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
"time"
"github.com/caos/logging"
@@ -76,11 +77,11 @@ func (r *OrgMemberView) AppendEvent(event *models.Event) (err error) {
r.Sequence = event.Sequence
r.ChangeDate = event.CreationDate
switch event.Type {
case model.OrgMemberAdded:
case es_model.OrgMemberAdded:
r.setRootData(event)
r.CreationDate = event.CreationDate
err = r.SetData(event)
case model.OrgMemberChanged:
case es_model.OrgMemberChanged:
err = r.SetData(event)
}
return err