fix: custom userID not being added when specified in zitadel.org.v2.AddOrganizationRequest.AddOrganization() request (#9334)

# Which Problems Are Solved

When specifying a `user_id` as a human admin in
`zitadel.org.v2.AddOrganizationRequest.AddOrganization()` the `user_id`
specified in the request should have been used, before it was being
ignored, this has been fixed with this PR

# Additional Context
- Closes https://github.com/zitadel/zitadel/issues/9308

---------

Co-authored-by: Iraq Jaber <IraqJaber@gmail.com>
This commit is contained in:
Iraq 2025-02-13 09:17:05 +00:00 committed by GitHub
parent bd4e53314d
commit 66296db971
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 8 deletions

View File

@ -43,6 +43,7 @@ func TestMain(m *testing.M) {
func TestServer_AddOrganization(t *testing.T) {
idpResp := Instance.AddGenericOAuthProvider(CTX, Instance.DefaultOrg.Id)
userId := "userID"
tests := []struct {
name string
@ -81,7 +82,7 @@ func TestServer_AddOrganization(t *testing.T) {
wantErr: true,
},
{
name: "admin with init",
name: "admin with init with userID passed for Human admin",
ctx: CTX,
req: &org.AddOrganizationRequest{
Name: gofakeit.AppName(),
@ -89,6 +90,7 @@ func TestServer_AddOrganization(t *testing.T) {
{
UserType: &org.AddOrganizationRequest_Admin_Human{
Human: &user.AddHumanUserRequest{
UserId: &userId,
Profile: &user.SetHumanProfile{
GivenName: "firstname",
FamilyName: "lastname",
@ -108,7 +110,7 @@ func TestServer_AddOrganization(t *testing.T) {
OrganizationId: integration.NotEmpty,
CreatedAdmins: []*org.AddOrganizationResponse_CreatedAdmin{
{
UserId: integration.NotEmpty,
UserId: userId,
EmailCode: gu.Ptr(integration.NotEmpty),
PhoneCode: nil,
},
@ -140,7 +142,7 @@ func TestServer_AddOrganization(t *testing.T) {
IdpLinks: []*user.IDPLink{
{
IdpId: idpResp.Id,
UserId: "userID",
UserId: userId,
UserName: "username",
},
},

View File

@ -57,6 +57,7 @@ func addOrganizationRequestAdminToCommand(admin *org.AddOrganizationRequest_Admi
if err != nil {
return nil, err
}
return &command.OrgSetupAdmin{
Human: human,
Roles: admin.GetRoles(),

View File

@ -96,16 +96,24 @@ func (c *orgSetupCommands) setupOrgAdmin(admin *OrgSetupAdmin, allowInitialMail
c.validations = append(c.validations, c.commands.AddOrgMemberCommand(c.aggregate, admin.ID, orgAdminRoles(admin.Roles)...))
return nil
}
userID, err := c.commands.idGenerator.Next()
if err != nil {
return err
var userID string
if admin.Human != nil && admin.Human.ID != "" {
userID = admin.Human.ID
} else {
var err error
userID, err = c.commands.idGenerator.Next()
if err != nil {
return err
}
}
if admin.Human != nil {
admin.Human.ID = userID
c.validations = append(c.validations, c.commands.AddHumanCommand(admin.Human, c.aggregate.ID, c.commands.userPasswordHasher, c.commands.userEncryption, allowInitialMail))
} else if admin.Machine != nil {
admin.Machine.Machine.AggregateID = userID
if err = c.setupOrgAdminMachine(c.aggregate, admin.Machine); err != nil {
if err := c.setupOrgAdminMachine(c.aggregate, admin.Machine); err != nil {
return err
}
}
@ -179,7 +187,7 @@ func (c *orgSetupCommands) push(ctx context.Context) (_ *CreatedOrg, err error)
func (c *orgSetupCommands) createdAdmins() []*CreatedOrgAdmin {
users := make([]*CreatedOrgAdmin, 0, len(c.admins))
for _, admin := range c.admins {
if admin.ID != "" {
if admin.ID != "" && admin.Human == nil {
continue
}
if admin.Human != nil {