feat: add custom org ID to AddOrganizationRequest (#9720)

# Which Problems Are Solved

- It is not possible to specify a custom organization ID when creating
an organization. According to
https://github.com/zitadel/zitadel/discussions/9202#discussioncomment-11929464
this is "an inconsistency in the V2 API".

# How the Problems Are Solved

- Adds the `org_id` as an optional parameter to the
`AddOrganizationRequest` in the `v2beta` API.

# Additional Changes

None. 

# Additional Context

- Discussion
[#9202](https://github.com/zitadel/zitadel/discussions/9202)
- I was mostly interested in how much work it'd be to add this field.
Then after completing this, I thought I'd submit this PR. I won't be
angry if you just close this PR with the reasoning "we didn't ask for
it". 😄
- Even though I don't think this is a breaking change, I didn't add this
to the `v2` API yet (don't know what the process for this is TBH). The
changes should be analogous, so if you want me to, just request it.

---------

Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
This commit is contained in:
alfa-alex
2025-05-21 12:55:40 +02:00
committed by GitHub
parent 490e4bd623
commit 6889d6a1da
12 changed files with 193 additions and 3 deletions

View File

@@ -31,6 +31,7 @@ type OrgSetup struct {
Name string
CustomDomain string
Admins []*OrgSetupAdmin
OrgID string
}
// OrgSetupAdmin describes a user to be created (Human / Machine) or an existing (ID) to be used for an org setup.
@@ -64,6 +65,13 @@ type CreatedOrgAdmin struct {
MachineKey *MachineKey
}
func (o *OrgSetup) Validate() (err error) {
if o.OrgID != "" && strings.TrimSpace(o.OrgID) == "" {
return zerrors.ThrowInvalidArgument(nil, "ORG-4ABd3", "Errors.Invalid.Argument")
}
return nil
}
func (c *Commands) setUpOrgWithIDs(ctx context.Context, o *OrgSetup, orgID string, allowInitialMail bool, userIDs ...string) (_ *CreatedOrg, err error) {
cmds := c.newOrgSetupCommands(ctx, orgID, o)
for _, admin := range o.Admins {
@@ -233,12 +241,19 @@ func (c *orgSetupCommands) createdMachineAdmin(admin *OrgSetupAdmin) *CreatedOrg
}
func (c *Commands) SetUpOrg(ctx context.Context, o *OrgSetup, allowInitialMail bool, userIDs ...string) (*CreatedOrg, error) {
orgID, err := c.idGenerator.Next()
if err != nil {
if err := o.Validate(); err != nil {
return nil, err
}
return c.setUpOrgWithIDs(ctx, o, orgID, allowInitialMail, userIDs...)
if o.OrgID == "" {
var err error
o.OrgID, err = c.idGenerator.Next()
if err != nil {
return nil, err
}
}
return c.setUpOrgWithIDs(ctx, o, o.OrgID, allowInitialMail, userIDs...)
}
// AddOrgCommand defines the commands to create a new org,