diff --git a/internal/api/grpc/settings/v2/integration_test/query_test.go b/internal/api/grpc/settings/v2/integration_test/query_test.go index f0bca4a4f..3c58366c8 100644 --- a/internal/api/grpc/settings/v2/integration_test/query_test.go +++ b/internal/api/grpc/settings/v2/integration_test/query_test.go @@ -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) +} diff --git a/internal/api/grpc/settings/v2/settings_converter.go b/internal/api/grpc/settings/v2/settings_converter.go index 061f6cbc9..597cc5774 100644 --- a/internal/api/grpc/settings/v2/settings_converter.go +++ b/internal/api/grpc/settings/v2/settings_converter.go @@ -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 } diff --git a/internal/api/grpc/settings/v2/settings_converter_test.go b/internal/api/grpc/settings/v2/settings_converter_test.go index d459c51b2..408324abf 100644 --- a/internal/api/grpc/settings/v2/settings_converter_test.go +++ b/internal/api/grpc/settings/v2/settings_converter_test.go @@ -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, diff --git a/internal/api/grpc/settings/v2beta/settings_converter.go b/internal/api/grpc/settings/v2beta/settings_converter.go index ad4ad2eba..cc22e0d28 100644 --- a/internal/api/grpc/settings/v2beta/settings_converter.go +++ b/internal/api/grpc/settings/v2beta/settings_converter.go @@ -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 } diff --git a/internal/api/grpc/settings/v2beta/settings_converter_test.go b/internal/api/grpc/settings/v2beta/settings_converter_test.go index 99c60f262..26e17d180 100644 --- a/internal/api/grpc/settings/v2beta/settings_converter_test.go +++ b/internal/api/grpc/settings/v2beta/settings_converter_test.go @@ -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, diff --git a/internal/domain/idp.go b/internal/domain/idp.go index c0fac9fd9..442c49910 100644 --- a/internal/domain/idp.go +++ b/internal/domain/idp.go @@ -86,6 +86,8 @@ func (t IDPType) DisplayName() string { return "Google" case IDPTypeApple: return "Apple" + case IDPTypeZitadel: + return "ZITADEL" case IDPTypeUnspecified, IDPTypeOIDC, IDPTypeJWT, diff --git a/proto/zitadel/settings/v2/login_settings.proto b/proto/zitadel/settings/v2/login_settings.proto index f396b1626..f9ced7c39 100644 --- a/proto/zitadel/settings/v2/login_settings.proto +++ b/proto/zitadel/settings/v2/login_settings.proto @@ -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; } diff --git a/proto/zitadel/settings/v2beta/login_settings.proto b/proto/zitadel/settings/v2beta/login_settings.proto index dd809becc..a784d2b70 100644 --- a/proto/zitadel/settings/v2beta/login_settings.proto +++ b/proto/zitadel/settings/v2beta/login_settings.proto @@ -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; }