fix: check whether org exists before creating user (#11647)

# Which Problems Are Solved

It was possible to create a user with an imaginary org.

# How the Problems Are Solved

Check whether org exists before creating the user.

# Additional Changes

# Additional Context

- Closes #11532

(cherry picked from commit 965e3fa621)
This commit is contained in:
Wim Van Laer authored and Livio Spring committed 2026-03-23 07:01:49 +01:00
1 parent fa78ba0d40
commit ac046eeb79
5 files changed
+451 -59

No files matched your search

@@ -3452,6 +3452,34 @@ func TestServer_CreateUser(t *testing.T) {
}
},
},
{
name: "org does not exist human, using IAM owner, error",
testCase: func(runId string) testCase {
username := fmt.Sprintf("donald.duck+%s", runId)
email := username + "@example.com"
return testCase{
args: args{
IamCTX,
&user.CreateUserRequest{
OrganizationId: "does not exist",
Username: &username,
UserType: &user.CreateUserRequest_Human_{
Human: &user.CreateUserRequest_Human{
Profile: &user.SetHumanProfile{
GivenName: "Donald",
FamilyName: "Duck",
},
Email: &user.SetHumanEmail{
Email: email,
},
},
},
},
},
wantErr: true,
}
},
},
{
name: "org does not exist machine, error",
testCase: func(runId string) testCase {
@@ -3473,6 +3501,27 @@ func TestServer_CreateUser(t *testing.T) {
}
},
},
{
name: "org does not exist machine, using IAM owner, error",
testCase: func(runId string) testCase {
username := fmt.Sprintf("donald.duck+%s", runId)
return testCase{
args: args{
IamCTX,
&user.CreateUserRequest{
OrganizationId: "does not exist",
Username: &username,
UserType: &user.CreateUserRequest_Machine_{
Machine: &user.CreateUserRequest_Machine{
Name: integration.Username(),
},
},
},
},
wantErr: true,
}
},
},
}
for i, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+4
View File
@@ -110,6 +110,10 @@ func (c *Commands) AddMachine(ctx context.Context, machine *Machine, state *doma
return nil, err
}
}
err = c.checkOrgExists(ctx, machine.ResourceOwner)
if err != nil {
return nil, err
}
cmds, err := preparation.PrepareCommands(ctx, c.eventstore.Filter, AddMachineCommand(agg, machine))
if err != nil {
return nil, err
+113 -31
View File
@@ -2,6 +2,7 @@ package command
import (
"context"
"errors"
"testing"
"github.com/stretchr/testify/assert"
@@ -18,7 +19,7 @@ import (
func TestCommandSide_AddMachine(t *testing.T) {
type fields struct {
eventstore *eventstore.Eventstore
eventstore func(t *testing.T) *eventstore.Eventstore
idGenerator id.Generator
}
type args struct {
@@ -32,6 +33,9 @@ func TestCommandSide_AddMachine(t *testing.T) {
want *domain.ObjectDetails
err func(error) bool
}
orgAgg := org.NewAggregate("org1")
tests := []struct {
name string
fields fields
@@ -41,8 +45,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "user invalid, invalid argument error name",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
},
@@ -62,8 +70,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "user invalid, invalid argument error username",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
},
@@ -83,8 +95,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "org policy not found, precondition error",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(),
expectFilter(),
@@ -108,8 +124,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "add machine with invalid metadata key, error",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
},
@@ -137,8 +157,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "add machine with invalid metadata value, error",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
},
@@ -166,8 +190,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "add machine, ok",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -223,8 +251,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "add machine - custom id, ok",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -270,8 +302,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
name: "with username fallback to given username",
fields: fields{
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "aggregateID"),
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -320,8 +356,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
name: "with username fallback to generated id",
fields: fields{
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "aggregateID"),
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -368,8 +408,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "with username fallback to given id",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -417,8 +461,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "with succeeding permission check, ok",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -466,9 +514,7 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "with failing permission check, error",
fields: fields{
eventstore: eventstoreExpect(
t,
),
eventstore: expectEventstore(),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
},
args: args{
@@ -492,8 +538,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "add machine, ok + deactive state",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -545,8 +595,12 @@ func TestCommandSide_AddMachine(t *testing.T) {
{
name: "add machine, ok + locked state",
fields: fields{
eventstore: eventstoreExpect(
t,
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -595,11 +649,39 @@ func TestCommandSide_AddMachine(t *testing.T) {
},
},
},
{
name: "org not found, precondition error",
fields: fields{
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
eventstore: expectEventstore(
expectFilter(),
),
},
args: args{
ctx: context.Background(),
machine: &Machine{
ObjectRoot: models.ObjectRoot{
ResourceOwner: "non-existing-org",
},
Description: "description",
Name: "name",
Username: "username",
},
check: func(resourceOwner, aggregateID string) error {
return nil
},
},
res: res{
err: func(err error) bool {
return errors.Is(err, zerrors.ThrowPreconditionFailed(nil, "COMMAND-QXPGs", "Errors.Org.NotFound"))
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
r := &Commands{
eventstore: tt.fields.eventstore,
eventstore: tt.fields.eventstore(t),
idGenerator: tt.fields.idGenerator,
checkPermission: newMockPermissionCheckAllowed(),
}
+12 -8
View File
@@ -118,14 +118,14 @@ func (h *ChangeHuman) Changed() bool {
return false
}
func (c *Commands) AddUserHuman(ctx context.Context, resourceOwner string, human *AddHuman, allowInitMail bool, alg crypto.EncryptionAlgorithm) (err error) {
if resourceOwner == "" {
func (c *Commands) AddUserHuman(ctx context.Context, organizationID string, human *AddHuman, allowInitMail bool, alg crypto.EncryptionAlgorithm) (err error) {
if organizationID == "" {
return zerrors.ThrowInvalidArgument(nil, "COMMA-095xh8fll1", "Errors.Internal")
}
if human.Details == nil {
human.Details = &domain.ObjectDetails{}
}
human.Details.ResourceOwner = resourceOwner
human.Details.ResourceOwner = organizationID
if err := human.Validate(c.userPasswordHasher); err != nil {
return err
}
@@ -136,12 +136,16 @@ func (c *Commands) AddUserHuman(ctx context.Context, resourceOwner string, human
return err
}
}
// check for permission to create user on resourceOwner
// check for permission to create user on organizationID
if !human.Register {
if err := c.checkPermissionUpdateUser(ctx, resourceOwner, human.ID, true); err != nil {
if err := c.checkPermissionUpdateUser(ctx, organizationID, human.ID, true); err != nil {
return err
}
}
err = c.checkOrgExists(ctx, organizationID)
if err != nil {
return err
}
// only check if user is already existing
existingHuman, err := c.userExistsWriteModel(
ctx,
@@ -154,14 +158,14 @@ func (c *Commands) AddUserHuman(ctx context.Context, resourceOwner string, human
return zerrors.ThrowPreconditionFailed(nil, "COMMAND-7yiox1isql", "Errors.User.AlreadyExisting")
}
// add resourceowner for the events with the aggregate
existingHuman.ResourceOwner = resourceOwner
existingHuman.ResourceOwner = organizationID
domainPolicy, err := c.domainPolicyWriteModel(ctx, resourceOwner)
domainPolicy, err := c.domainPolicyWriteModel(ctx, organizationID)
if err != nil {
return err
}
if err = c.userValidateDomain(ctx, resourceOwner, human.Username, domainPolicy.UserLoginMustBeDomain); err != nil {
if err = c.userValidateDomain(ctx, organizationID, human.Username, domainPolicy.UserLoginMustBeDomain); err != nil {
return err
}
+273 -20
View File
@@ -62,6 +62,7 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
}
userAgg := user.NewAggregate("user1", "org1")
orgAgg := org.NewAggregate("org1")
cryptoAlg := crypto.CreateMockEncryptionAlg(gomock.NewController(t))
totpSecret := "TOTPSecret"
@@ -126,6 +127,11 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "with id, already exists, precondition error",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(
eventFromEventPusher(
newAddHumanEvent("$plain$x$password", true, true, "", language.English),
@@ -161,6 +167,11 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
fields: fields{
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(),
expectFilter(),
@@ -193,11 +204,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
fields: fields{
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -232,15 +248,52 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
},
},
},
{
name: "org not found, precondition error",
fields: fields{
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
eventstore: expectEventstore(
expectFilter(),
),
checkPermission: newMockPermissionCheckAllowed(),
loginPaths: expectLoginPathsNoCall,
},
args: args{
ctx: context.Background(),
orgID: "non-existing-org",
human: &AddHuman{
Username: "username",
FirstName: "firstname",
LastName: "lastname",
Password: "pass",
Email: Email{
Address: "email@test.ch",
Verified: true,
},
PreferredLanguage: language.English,
},
allowInitMail: true,
},
res: res{
err: func(err error) bool {
return errors.Is(err, zerrors.ThrowPreconditionFailed(nil, "COMMAND-QXPGs", "Errors.Org.NotFound"))
},
},
},
{
name: "register human (with initial code), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -340,11 +393,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (email not verified, no password), ok (init code)",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -411,6 +469,11 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (email not verified, with password), ok (init code)",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -483,6 +546,11 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (email not verified, no password, no allowInitMail), ok (email verification with passwordInit)",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -543,6 +611,11 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (with password and email code custom template), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -618,6 +691,11 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (with password and return email code), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -694,11 +772,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human email verified and password, ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -759,11 +842,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human email verified, trim spaces, ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -824,11 +912,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human, email verified, userLoginMustBeDomain false, ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
false,
true,
true,
@@ -889,11 +982,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human claimed domain, userLoginMustBeDomain false, error",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
false,
true,
true,
@@ -943,11 +1041,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human domain, userLoginMustBeDomain false, ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
false,
true,
true,
@@ -1032,11 +1135,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (with phone), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -1143,11 +1251,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (with phone), ok (external)",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -1249,11 +1362,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (with verified phone), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -1316,6 +1434,11 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human (with phone return code), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
@@ -1428,11 +1551,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "add human with metadata, ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -1499,11 +1627,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "register human with idp, unverified email, allow init mail, ok (verify mail)",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -1589,11 +1722,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "register human with idp, verified email, ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
@@ -1670,11 +1808,105 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "register human with TOTPSecret, ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,
),
),
),
expectPush(
user.NewHumanRegisteredEvent(context.Background(),
&userAgg.Aggregate,
"username",
"firstname",
"lastname",
"",
"firstname lastname",
language.English,
domain.GenderUnspecified,
"email@test.ch",
true,
"userAgentID",
),
user.NewHumanInitialCodeAddedEvent(context.Background(),
&userAgg.Aggregate,
&crypto.CryptoValue{
CryptoType: crypto.TypeEncryption,
Algorithm: "enc",
KeyID: "id",
Crypted: []byte("userinit"),
},
time.Hour*1,
"authRequestID",
),
user.NewHumanOTPAddedEvent(context.Background(),
&userAgg.Aggregate,
totpSecretEnc,
),
user.NewHumanOTPVerifiedEvent(context.Background(),
&userAgg.Aggregate,
"",
),
),
),
checkPermission: newMockPermissionCheckAllowed(),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
newCode: mockEncryptedCode("userinit", time.Hour),
loginPaths: expectLoginPathsNoCall,
},
args: args{
ctx: context.Background(),
orgID: "org1",
human: &AddHuman{
Username: "username",
FirstName: "firstname",
LastName: "lastname",
Email: Email{
Address: "email@test.ch",
},
PreferredLanguage: language.English,
Register: true,
UserAgentID: "userAgentID",
AuthRequestID: "authRequestID",
TOTPSecret: totpSecret,
},
secretGenerator: GetMockSecretGenerator(t),
allowInitMail: true,
codeAlg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
},
res: res{
want: &domain.ObjectDetails{
Sequence: 0,
EventDate: time.Time{},
ResourceOwner: "org1",
},
wantID: "user1",
},
},
{
name: "register human with TOTPSecret, ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&orgAgg.Aggregate,
true,
true,
true,
@@ -1754,11 +1986,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "register human (validate domain), already verified",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
false,
true,
true,
@@ -1808,11 +2045,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "register human (validate domain), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
false,
true,
true,
@@ -1891,11 +2133,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "register human (validate domain, domain removed), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
false,
true,
true,
@@ -1981,11 +2228,16 @@ func TestCommandSide_AddUserHuman(t *testing.T) {
name: "register human (validate domain, org removed), ok",
fields: fields{
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
org.NewOrgAddedEvent(context.Background(), &orgAgg.Aggregate, "org1"),
),
),
expectFilter(),
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
false,
true,
true,
@@ -2143,6 +2395,7 @@ func TestCommandSide_ChangeUserHuman(t *testing.T) {
}
userAgg := user.NewAggregate("user1", "org1")
orgAgg := user.NewAggregate("org1", "org1")
tests := []struct {
name string
@@ -2241,7 +2494,7 @@ func TestCommandSide_ChangeUserHuman(t *testing.T) {
expectFilter(
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&userAgg.Aggregate,
&orgAgg.Aggregate,
true,
true,
true,