feat: update GetActiveIdentityProviders to return Zitadel in the IdP list (#12422)

# Which Problems Are Solved

This PR extends the Settings Login API (v2 and v2beta) to include
ZITADEL IdP in the list of IdPs returned by `GetActiveIdentityProviders`

# How the Problems Are Solved

- Added `IDENTITY_PROVIDER_TYPE_ZITADEL` to Settings
IdentityProviderType enums (v2 and v2beta) and updated domain display
name handling.
- Updated Settings gRPC converters (v2 and v2beta) to map
`domain.IDPTypeZitadel` to the new proto enum value
- Added unit/integration tests


# Additional Changes
Correctly map `domain.IDPTypeApple` to
`IdentityProviderType_IDENTITY_PROVIDER_TYPE_APPLE` in v2beta instead of
unspecified.

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

---------

Co-authored-by: Livio Spring <[email protected]>
This commit is contained in:
gayathri
2026-07-14 13:50:09 +02:00
committed by GitHub
co-authored by Livio Spring
parent 051506b5bb
commit 6eafca2872
8 changed files with 47 additions and 3 deletions
@@ -692,3 +692,27 @@ func assertPaginationResponse(t *assert.CollectT, expected *filter.PaginationRes
assert.Equal(t, expected.AppliedLimit, actual.AppliedLimit)
assert.Equal(t, expected.TotalResult, actual.TotalResult)
}
func TestServer_GetActiveIdentityProviders_ZitadelType(t *testing.T) {
instance := integration.NewInstance(CTX)
iamOwnerCTX := instance.WithAuthorizationToken(CTX, integration.UserTypeIAMOwner)
idpName := integration.IDPName()
idpResp := instance.AddZitadelProvider(iamOwnerCTX, idpName)
instance.AddProviderToDefaultLoginPolicy(iamOwnerCTX, idpResp.GetId())
retryDuration, tick := integration.WaitForAndTickWithMaxDuration(iamOwnerCTX, time.Minute)
assert.EventuallyWithT(t, func(ct *assert.CollectT) {
got, err := instance.Client.SettingsV2.GetActiveIdentityProviders(iamOwnerCTX, &settings.GetActiveIdentityProvidersRequest{})
if !assert.NoError(ct, err) {
return
}
providers := got.GetIdentityProviders()
if !assert.Len(ct, providers, 1) {
return
}
assert.Equal(ct, idpResp.GetId(), providers[0].GetId())
assert.Equal(ct, idpName, providers[0].GetName())
assert.Equal(ct, settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_ZITADEL, providers[0].GetType())
}, retryDuration, tick)
}
@@ -232,6 +232,8 @@ func idpTypeToPb(idpType domain.IDPType) settings.IdentityProviderType {
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_APPLE
case domain.IDPTypeSAML:
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_SAML
case domain.IDPTypeZitadel:
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_ZITADEL
default:
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_UNSPECIFIED
}
@@ -511,6 +511,10 @@ func Test_idpTypeToPb(t *testing.T) {
args: args{domain.IDPTypeSAML},
want: settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_SAML,
},
{
args: args{domain.IDPTypeZitadel},
want: settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_ZITADEL,
},
{
args: args{99},
want: settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_UNSPECIFIED,
@@ -219,8 +219,9 @@ func idpTypeToPb(idpType domain.IDPType) settings.IdentityProviderType {
case domain.IDPTypeSAML:
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_SAML
case domain.IDPTypeApple:
// Handle all remaining cases so the linter succeeds
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_UNSPECIFIED
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_APPLE
case domain.IDPTypeZitadel:
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_ZITADEL
default:
return settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_UNSPECIFIED
}
@@ -470,6 +470,14 @@ func Test_idpTypeToPb(t *testing.T) {
args: args{domain.IDPTypeSAML},
want: settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_SAML,
},
{
args: args{domain.IDPTypeApple},
want: settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_APPLE,
},
{
args: args{domain.IDPTypeZitadel},
want: settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_ZITADEL,
},
{
args: args{99},
want: settings.IdentityProviderType_IDENTITY_PROVIDER_TYPE_UNSPECIFIED,
+2
View File
@@ -86,6 +86,8 @@ func (t IDPType) DisplayName() string {
return "Google"
case IDPTypeApple:
return "Apple"
case IDPTypeZitadel:
return "ZITADEL"
case IDPTypeUnspecified,
IDPTypeOIDC,
IDPTypeJWT,
@@ -185,4 +185,5 @@ enum IdentityProviderType {
IDENTITY_PROVIDER_TYPE_GOOGLE = 10;
IDENTITY_PROVIDER_TYPE_SAML = 11;
IDENTITY_PROVIDER_TYPE_APPLE = 12;
IDENTITY_PROVIDER_TYPE_ZITADEL = 13;
}
@@ -148,5 +148,7 @@ enum IdentityProviderType {
IDENTITY_PROVIDER_TYPE_GITLAB = 8;
IDENTITY_PROVIDER_TYPE_GITLAB_SELF_HOSTED = 9;
IDENTITY_PROVIDER_TYPE_GOOGLE = 10;
IDENTITY_PROVIDER_TYPE_SAML=11;
IDENTITY_PROVIDER_TYPE_SAML = 11;
IDENTITY_PROVIDER_TYPE_APPLE = 12;
IDENTITY_PROVIDER_TYPE_ZITADEL = 13;
}