diff --git a/internal/api/grpc/admin/integration_test/idp_test.go b/internal/api/grpc/admin/integration_test/idp_test.go index 7e54e58b02..a9c10e5031 100644 --- a/internal/api/grpc/admin/integration_test/idp_test.go +++ b/internal/api/grpc/admin/integration_test/idp_test.go @@ -223,6 +223,10 @@ func Test_AddZitadelProvider(t *testing.T) { assert.NotEmpty(t, got.GetId()) assert.WithinRange(t, got.GetDetails().GetCreationDate().AsTime(), before, after) assert.Equal(t, tt.wantResponse.GetDetails().GetResourceOwner(), got.GetDetails().GetResourceOwner()) + t.Cleanup(func() { + _, err := Client.DeleteProvider(AdminCTX, &admin_pb.DeleteProviderRequest{Id: got.GetId()}) + require.NoError(t, err) + }) }) } } @@ -414,7 +418,10 @@ func Test_UpdateZitadelProvider(t *testing.T) { t.Run(tt.name, func(t *testing.T) { // create a new provider per subtest existingProvider := Instance.AddZitadelProvider(AdminCTX, integration.IDPName()) - + t.Cleanup(func() { + _, err := Client.DeleteProvider(AdminCTX, &admin_pb.DeleteProviderRequest{Id: existingProvider.GetId()}) + require.NoError(t, err) + }) // build request using this provider ID tt.args.req.Id = existingProvider.GetId() @@ -445,7 +452,11 @@ func Test_UpdateZitadelProvider(t *testing.T) { } func Test_UpdateZitadelProvider_MissingID(t *testing.T) { - _ = Instance.AddZitadelProvider(AdminCTX, integration.IDPName()) + existingProvider := Instance.AddZitadelProvider(AdminCTX, integration.IDPName()) + t.Cleanup(func() { + _, err := Client.DeleteProvider(AdminCTX, &admin_pb.DeleteProviderRequest{Id: existingProvider.GetId()}) + require.NoError(t, err) + }) // Attempt to update the provider without specifying the ID updateResp, err := Client.UpdateZitadelProvider(AdminCTX, &admin_pb.UpdateZitadelProviderRequest{}) require.Error(t, err) @@ -459,6 +470,10 @@ func Test_UpdateZitadelProvider_MissingID(t *testing.T) { func Test_GetProviderByID(t *testing.T) { providerName := integration.IDPName() existingProvider := Instance.AddZitadelProvider(AdminCTX, providerName) + t.Cleanup(func() { + _, err := Client.DeleteProvider(AdminCTX, &admin_pb.DeleteProviderRequest{Id: existingProvider.GetId()}) + require.NoError(t, err) + }) tests := []struct { name string @@ -557,6 +572,12 @@ func Test_ListProviders(t *testing.T) { provider2Name := integration.IDPName() provider2 := Instance.AddZitadelProvider(AdminCTX, provider2Name) + t.Cleanup(func() { + _, err := Client.DeleteProvider(AdminCTX, &admin_pb.DeleteProviderRequest{Id: provider1.GetId()}) + require.NoError(t, err) + _, err = Client.DeleteProvider(AdminCTX, &admin_pb.DeleteProviderRequest{Id: provider2.GetId()}) + require.NoError(t, err) + }) tests := []struct { name string @@ -577,6 +598,82 @@ func Test_ListProviders(t *testing.T) { req: &admin_pb.ListProvidersRequest{}, wantErr: status.Error(codes.PermissionDenied, "No matching permissions found (AUTH-5mWD2)"), }, + { + name: "list all providers", + ctx: AdminCTX, + req: &admin_pb.ListProvidersRequest{ + Query: &object_pb.ListQuery{ + Asc: false, + }, + }, + wantResp: &admin_pb.ListProvidersResponse{ + Details: &object_pb.ListDetails{ + TotalResult: 2, + }, + Result: []*idp_pb.Provider{ + { + Id: provider1.GetId(), + Details: &object_pb.ObjectDetails{ + CreationDate: provider1.GetDetails().GetCreationDate(), + ChangeDate: provider1.GetDetails().GetChangeDate(), + ResourceOwner: provider1.GetDetails().GetResourceOwner(), + }, + State: idp_pb.IDPState_IDP_STATE_ACTIVE, + Name: provider1Name, + Owner: idp_pb.IDPOwnerType_IDP_OWNER_TYPE_SYSTEM, + Type: idp_pb.ProviderType_PROVIDER_TYPE_ZITADEL, + Config: &idp_pb.ProviderConfig{ + Options: &idp_pb.Options{ + IsCreationAllowed: true, + }, + Config: &idp_pb.ProviderConfig_Zitadel{ + Zitadel: &idp_pb.ZitadelConfig{ + Issuer: "zitadel.example.com", + ClientId: "test-client", + Scopes: []string{"email", "profile"}, + InstanceRolesInfo: []*idp_pb.InstanceRolesInfo{ + { + OrganizationId: "org1", + OrganizationDomain: "org1.com", + }, + }, + }, + }, + }, + }, + { + Id: provider2.GetId(), + Details: &object_pb.ObjectDetails{ + CreationDate: provider2.GetDetails().GetCreationDate(), + ChangeDate: provider2.GetDetails().GetChangeDate(), + ResourceOwner: provider2.GetDetails().GetResourceOwner(), + }, + State: idp_pb.IDPState_IDP_STATE_ACTIVE, + Name: provider2Name, + Owner: idp_pb.IDPOwnerType_IDP_OWNER_TYPE_SYSTEM, + Type: idp_pb.ProviderType_PROVIDER_TYPE_ZITADEL, + Config: &idp_pb.ProviderConfig{ + Options: &idp_pb.Options{ + IsCreationAllowed: true, + }, + Config: &idp_pb.ProviderConfig_Zitadel{ + Zitadel: &idp_pb.ZitadelConfig{ + Issuer: "zitadel.example.com", + ClientId: "test-client", + Scopes: []string{"email", "profile"}, + InstanceRolesInfo: []*idp_pb.InstanceRolesInfo{ + { + OrganizationId: "org1", + OrganizationDomain: "org1.com", + }, + }, + }, + }, + }, + }, + }, + }, + }, { name: "list by id", ctx: AdminCTX, @@ -702,11 +799,82 @@ func Test_ListProviders(t *testing.T) { require.NoError(t, err) assert.NotNil(t, got) assert.Equal(t, tt.wantResp.GetDetails().GetTotalResult(), got.GetDetails().GetTotalResult()) - for i, want := range tt.wantResp.GetResult() { - assert.Equal(t, want.GetDetails().GetCreationDate().AsTime(), got.GetResult()[i].GetDetails().GetCreationDate().AsTime()) - assert.Equal(t, Instance.ID(), got.GetResult()[i].GetDetails().GetResourceOwner()) - assertProvider(t, want, got.GetResult()[i]) + gotByID := make(map[string]*idp_pb.Provider) + for _, p := range got.GetResult() { + gotByID[p.GetId()] = p } + for _, want := range tt.wantResp.GetResult() { + actual, ok := gotByID[want.GetId()] + require.True(t, ok, "expected provider %s not found in results", want.GetId()) + assert.Equal(t, want.GetDetails().GetCreationDate().AsTime(), actual.GetDetails().GetCreationDate().AsTime()) + assert.Equal(t, Instance.ID(), actual.GetDetails().GetResourceOwner()) + assertProvider(t, want, actual) + } + }) + } +} + +func Test_DeleteZitadelProvider(t *testing.T) { + existingProvider := Instance.AddZitadelProvider(AdminCTX, integration.IDPName()) + t.Cleanup(func() { + _, err := Client.DeleteProvider(AdminCTX, &admin_pb.DeleteProviderRequest{Id: existingProvider.GetId()}) + if err != nil && status.Code(err) != codes.NotFound { + require.NoError(t, err) + } + }) + + tests := []struct { + name string + ctx context.Context + req *admin_pb.DeleteProviderRequest + wantResponse *admin_pb.DeleteProviderResponse + wantErr error + }{ + { + name: "no permissions, error", + ctx: Instance.WithAuthorizationToken(CTX, integration.UserTypeNoPermission), + req: &admin_pb.DeleteProviderRequest{Id: "idp-id"}, + wantErr: status.Error(codes.NotFound, "membership not found (AUTHZ-cdgFk)"), + }, + { + name: "insufficient permissions, error", // no iam.idp.write permission + ctx: integration.WithSystemUserWithNoPermissionsAuthorization(CTX), + req: &admin_pb.DeleteProviderRequest{Id: "idp-id"}, + wantErr: status.Error(codes.PermissionDenied, "No matching permissions found (AUTH-5mWD2)"), + }, + { + name: "not found, error", + ctx: AdminCTX, + req: &admin_pb.DeleteProviderRequest{Id: "idp-id"}, + wantErr: status.Error(codes.NotFound, "Identity Provider Configuration doesn't exist (INST-Se3tg)"), + }, + { + name: "delete, ok", + ctx: AdminCTX, + req: &admin_pb.DeleteProviderRequest{Id: existingProvider.GetId()}, + wantResponse: &admin_pb.DeleteProviderResponse{ + Details: &object_pb.ObjectDetails{ + ResourceOwner: Instance.Instance.Id, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := Client.DeleteProvider(tt.ctx, tt.req) + after := time.Now() + if tt.wantErr != nil { + require.Error(t, err) + grpcStatus, ok := status.FromError(err) + require.True(t, ok) + assert.Equal(t, status.Code(tt.wantErr), grpcStatus.Code()) + assert.Equal(t, status.Convert(tt.wantErr).Message(), grpcStatus.Message()) + return + } + require.NoError(t, err) + assert.NotNil(t, got) + assert.Equal(t, tt.wantResponse.GetDetails().GetResourceOwner(), got.GetDetails().GetResourceOwner()) + assert.WithinRange(t, got.GetDetails().GetChangeDate().AsTime(), existingProvider.GetDetails().GetCreationDate().AsTime(), after) }) } } diff --git a/internal/api/grpc/management/integration_test/idp_test.go b/internal/api/grpc/management/integration_test/idp_test.go index a64a3f995e..0c217d72b7 100644 --- a/internal/api/grpc/management/integration_test/idp_test.go +++ b/internal/api/grpc/management/integration_test/idp_test.go @@ -229,6 +229,10 @@ func Test_AddZitadelProvider(t *testing.T) { assert.NotEmpty(t, got.GetId()) assert.WithinRange(t, got.GetDetails().GetCreationDate().AsTime(), before, after) assert.Equal(t, tt.wantResponse.GetDetails().GetResourceOwner(), got.GetDetails().GetResourceOwner()) + t.Cleanup(func() { + _, err := Client.DeleteProvider(OrgCTX, &mgmt_pb.DeleteProviderRequest{Id: got.GetId()}) + require.NoError(t, err) + }) }) } } @@ -454,6 +458,10 @@ func Test_UpdateZitadelProvider(t *testing.T) { // create a new provider per subtest and set the ID in the request zitadelProvider := Instance.AddOrgZitadelProvider(OrgCTX, integration.IDPName()) tt.args.req.Id = zitadelProvider.Id + t.Cleanup(func() { + _, err := Client.DeleteProvider(OrgCTX, &mgmt_pb.DeleteProviderRequest{Id: zitadelProvider.GetId()}) + require.NoError(t, err) + }) before := time.Now() updateResp, err := Client.UpdateZitadelProvider(tt.args.ctx, tt.args.req) @@ -482,7 +490,11 @@ func Test_UpdateZitadelProvider(t *testing.T) { } func Test_UpdateZitadelProvider_MissingID(t *testing.T) { - _ = Instance.AddOrgZitadelProvider(OrgCTX, integration.IDPName()) + existingProvider := Instance.AddOrgZitadelProvider(OrgCTX, integration.IDPName()) + t.Cleanup(func() { + _, err := Client.DeleteProvider(OrgCTX, &mgmt_pb.DeleteProviderRequest{Id: existingProvider.GetId()}) + require.NoError(t, err) + }) // Attempt to update the provider without specifying the ID updateResp, err := Client.UpdateZitadelProvider(OrgCTX, &mgmt_pb.UpdateZitadelProviderRequest{}) require.Error(t, err) @@ -597,7 +609,12 @@ func Test_ListProviders(t *testing.T) { provider1 := Instance.AddOrgZitadelProvider(orgCtx, provider1Name) provider2Name := integration.IDPName() provider2 := Instance.AddOrgZitadelProvider(orgCtx, provider2Name) - + t.Cleanup(func() { + _, err := Client.DeleteProvider(orgCtx, &mgmt_pb.DeleteProviderRequest{Id: provider1.GetId()}) + require.NoError(t, err) + _, err = Client.DeleteProvider(orgCtx, &mgmt_pb.DeleteProviderRequest{Id: provider2.GetId()}) + require.NoError(t, err) + }) tests := []struct { name string ctx context.Context @@ -818,11 +835,82 @@ func Test_ListProviders(t *testing.T) { require.NoError(t, err) assert.NotNil(t, got) assert.Equal(t, tt.wantResp.GetDetails().GetTotalResult(), got.GetDetails().GetTotalResult()) - for i, want := range tt.wantResp.GetResult() { - assert.Equal(t, want.GetDetails().GetCreationDate().AsTime(), got.GetResult()[i].GetDetails().GetCreationDate().AsTime()) - assert.Equal(t, org.GetOrganizationId(), got.GetResult()[i].GetDetails().GetResourceOwner()) - assertProvider(t, want, got.GetResult()[i]) + gotByID := make(map[string]*idp_pb.Provider) + for _, p := range got.GetResult() { + gotByID[p.GetId()] = p } + for _, want := range tt.wantResp.GetResult() { + actual, ok := gotByID[want.GetId()] + require.True(t, ok, "expected provider %s not found in results", want.GetId()) + assert.Equal(t, want.GetDetails().GetCreationDate().AsTime(), actual.GetDetails().GetCreationDate().AsTime()) + assert.Equal(t, org.GetOrganizationId(), actual.GetDetails().GetResourceOwner()) + assertProvider(t, want, actual) + } + }) + } +} + +func Test_DeleteZitadelProvider(t *testing.T) { + existingProvider := Instance.AddOrgZitadelProvider(OrgCTX, integration.IDPName()) + t.Cleanup(func() { + _, err := Client.DeleteProvider(OrgCTX, &mgmt_pb.DeleteProviderRequest{Id: existingProvider.GetId()}) + if err != nil && status.Code(err) != codes.NotFound { + require.NoError(t, err) + } + }) + + tests := []struct { + name string + ctx context.Context + req *mgmt_pb.DeleteProviderRequest + wantResponse *mgmt_pb.DeleteProviderResponse + wantErr error + }{ + { + name: "no permissions, error", + ctx: Instance.WithAuthorizationToken(CTX, integration.UserTypeNoPermission), + req: &mgmt_pb.DeleteProviderRequest{Id: "idp-id"}, + wantErr: status.Error(codes.NotFound, "membership not found (AUTHZ-cdgFk)"), + }, + { + name: "insufficient permissions, error", // no iam.idp.write permission + ctx: integration.WithSystemUserWithNoPermissionsAuthorization(CTX), + req: &mgmt_pb.DeleteProviderRequest{Id: "idp-id"}, + wantErr: status.Error(codes.PermissionDenied, "No matching permissions found (AUTH-5mWD2)"), + }, + { + name: "not found, error", + ctx: OrgCTX, + req: &mgmt_pb.DeleteProviderRequest{Id: "idp-id"}, + wantErr: status.Error(codes.NotFound, "Identity Provider Configuration doesn't exist (ORG-Se3tg)"), + }, + { + name: "delete, ok", + ctx: OrgCTX, + req: &mgmt_pb.DeleteProviderRequest{Id: existingProvider.GetId()}, + wantResponse: &mgmt_pb.DeleteProviderResponse{ + Details: &object_pb.ObjectDetails{ + ResourceOwner: Instance.DefaultOrg.Id, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := Client.DeleteProvider(tt.ctx, tt.req) + after := time.Now() + if tt.wantErr != nil { + require.Error(t, err) + grpcStatus, ok := status.FromError(err) + require.True(t, ok) + assert.Equal(t, status.Code(tt.wantErr), grpcStatus.Code()) + assert.Equal(t, status.Convert(tt.wantErr).Message(), grpcStatus.Message()) + return + } + require.NoError(t, err) + assert.NotNil(t, got) + assert.Equal(t, tt.wantResponse.GetDetails().GetResourceOwner(), got.GetDetails().GetResourceOwner()) + assert.WithinRange(t, got.GetDetails().GetChangeDate().AsTime(), existingProvider.GetDetails().GetCreationDate().AsTime(), after) }) } } diff --git a/internal/command/idp_model.go b/internal/command/idp_model.go index 9ba93b7fd4..7e21ca9591 100644 --- a/internal/command/idp_model.go +++ b/internal/command/idp_model.go @@ -2014,6 +2014,8 @@ func (wm *IDPRemoveWriteModel) Reduce() error { wm.reduceAdded(e.ConfigID) case *idpconfig.IDPConfigRemovedEvent: wm.reduceRemoved(e.ConfigID) + case *idp.ZitadelIDPAddedEvent: + wm.reduceAdded(e.ID) } } return wm.WriteModel.Reduce() @@ -2126,6 +2128,10 @@ func (wm *IDPTypeWriteModel) Reduce() error { wm.reduceRemoved(e.ConfigID) case *org.IDPConfigRemovedEvent: wm.reduceRemoved(e.ConfigID) + case *instance.ZitadelIDPAddedEvent: + wm.reduceAdded(e.ID, domain.IDPTypeZitadel, e.Aggregate()) + case *org.ZitadelIDPAddedEvent: + wm.reduceAdded(e.ID, domain.IDPTypeZitadel, e.Aggregate()) } } return wm.WriteModel.Reduce() @@ -2177,6 +2183,7 @@ func (wm *IDPTypeWriteModel) Query() *eventstore.SearchQueryBuilder { instance.SAMLIDPAddedEventType, instance.OIDCIDPMigratedAzureADEventType, instance.OIDCIDPMigratedGoogleEventType, + instance.ZitadelIDPAddedEventType, instance.IDPRemovedEventType, ). EventData(map[string]interface{}{"id": wm.ID}). @@ -2197,6 +2204,7 @@ func (wm *IDPTypeWriteModel) Query() *eventstore.SearchQueryBuilder { org.SAMLIDPAddedEventType, org.OIDCIDPMigratedAzureADEventType, org.OIDCIDPMigratedGoogleEventType, + org.ZitadelIDPAddedEventType, org.IDPRemovedEventType, ). EventData(map[string]interface{}{"id": wm.ID}). diff --git a/internal/command/instance_idp_model.go b/internal/command/instance_idp_model.go index 5271212f36..3bac41be6a 100644 --- a/internal/command/instance_idp_model.go +++ b/internal/command/instance_idp_model.go @@ -998,6 +998,8 @@ func (wm *InstanceIDPRemoveWriteModel) AppendEvents(events ...eventstore.Event) wm.IDPRemoveWriteModel.AppendEvents(&e.IDPConfigAddedEvent) case *instance.IDPConfigRemovedEvent: wm.IDPRemoveWriteModel.AppendEvents(&e.IDPConfigRemovedEvent) + case *instance.ZitadelIDPAddedEvent: + wm.IDPRemoveWriteModel.AppendEvents(&e.ZitadelIDPAddedEvent) default: wm.IDPRemoveWriteModel.AppendEvents(e) } @@ -1023,6 +1025,7 @@ func (wm *InstanceIDPRemoveWriteModel) Query() *eventstore.SearchQueryBuilder { instance.LDAPIDPAddedEventType, instance.AppleIDPAddedEventType, instance.SAMLIDPAddedEventType, + instance.ZitadelIDPAddedEventType, instance.IDPRemovedEventType, ). EventData(map[string]interface{}{"id": wm.ID}). diff --git a/internal/command/org_idp_model.go b/internal/command/org_idp_model.go index c0d9fc4ea9..592dff9e86 100644 --- a/internal/command/org_idp_model.go +++ b/internal/command/org_idp_model.go @@ -1010,6 +1010,8 @@ func (wm *OrgIDPRemoveWriteModel) AppendEvents(events ...eventstore.Event) { wm.IDPRemoveWriteModel.AppendEvents(&e.IDPConfigAddedEvent) case *org.IDPConfigRemovedEvent: wm.IDPRemoveWriteModel.AppendEvents(&e.IDPConfigRemovedEvent) + case *org.ZitadelIDPAddedEvent: + wm.IDPRemoveWriteModel.AppendEvents(&e.ZitadelIDPAddedEvent) default: wm.IDPRemoveWriteModel.AppendEvents(e) } @@ -1035,6 +1037,7 @@ func (wm *OrgIDPRemoveWriteModel) Query() *eventstore.SearchQueryBuilder { org.LDAPIDPAddedEventType, org.AppleIDPAddedEventType, org.SAMLIDPAddedEventType, + org.ZitadelIDPAddedEventType, org.IDPRemovedEventType, ). EventData(map[string]interface{}{"id": wm.ID}). diff --git a/internal/static/i18n/ar.yaml b/internal/static/i18n/ar.yaml index 051c92db24..3dacf77f4c 100644 --- a/internal/static/i18n/ar.yaml +++ b/internal/static/i18n/ar.yaml @@ -283,6 +283,8 @@ Errors: LabelPolicy: NotFound: "سياسة العلامة الخاصة غير موجودة" NotChanged: "سياسة العلامة الخاصة لم تتغير" + IDPConfig: + NotExisting: "تكوين مزود الهوية غير موجود" Project: ProjectIDMissing: "معرف المشروع مفقود" AlreadyExists: "المشروع موجود بالفعل في المنظمة" diff --git a/internal/static/i18n/bg.yaml b/internal/static/i18n/bg.yaml index 934adbbdc6..c5927ec558 100644 --- a/internal/static/i18n/bg.yaml +++ b/internal/static/i18n/bg.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Правилата за лични етикети не са намерени" NotChanged: "Политиката на частния етикет не е променена" + IDPConfig: + NotExisting: "Конфигурацията на доставчик на самоличност не съществува" Project: ProjectIDMissing: "Липсва ID на проекта" AlreadyExists: "Проектът вече съществува в организацията" diff --git a/internal/static/i18n/cs.yaml b/internal/static/i18n/cs.yaml index 73f9badf1c..0abd3951dd 100644 --- a/internal/static/i18n/cs.yaml +++ b/internal/static/i18n/cs.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Politika privátních štítků nenalezena" NotChanged: "Politika privátních štítků nebyla změněna" + IDPConfig: + NotExisting: "Konfigurace poskytovatele identity neexistuje" Project: ProjectIDMissing: "Chybí ID projektu" AlreadyExists: "Projekt již v organizaci existuje" diff --git a/internal/static/i18n/de.yaml b/internal/static/i18n/de.yaml index 0ebb03ba8c..be2c128853 100644 --- a/internal/static/i18n/de.yaml +++ b/internal/static/i18n/de.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Private Label Policy konnte nicht gefunden" NotChanged: "Private Label Policy wurde nicht verändert" + IDPConfig: + NotExisting: "Identitätsprovider Konfiguration existiert nicht" Project: ProjectIDMissing: "Project ID fehlt" AlreadyExists: "Project existiert bereits auf der Organisation" diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index 699248ea02..bd0cb85c64 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -285,6 +285,8 @@ Errors: LabelPolicy: NotFound: "Private Label Policy not found" NotChanged: "Private Label Policy has not been changed" + IDPConfig: + NotExisting: "Identity Provider Configuration doesn't exist" Project: ProjectIDMissing: "Project Id missing" AlreadyExists: "Project already exists on organization" diff --git a/internal/static/i18n/es.yaml b/internal/static/i18n/es.yaml index a651d3795e..8f5ee64e3f 100644 --- a/internal/static/i18n/es.yaml +++ b/internal/static/i18n/es.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Política de etiqueta privada no encontrada" NotChanged: "La política de etiqueta privada no ha cambiado" + IDPConfig: + NotExisting: "La configuración de proveedor de identidad (IDP) no existe" Project: ProjectIDMissing: "Falta el Id del proyecto" AlreadyExists: "El proyecto ya existe en la organización" diff --git a/internal/static/i18n/fr.yaml b/internal/static/i18n/fr.yaml index 05408e237a..d24c8c959c 100644 --- a/internal/static/i18n/fr.yaml +++ b/internal/static/i18n/fr.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "La politique d'étiquetage privé n'a pas été trouvée" NotChanged: "La politique en matière de marques privées n'a pas été modifiée" + IDPConfig: + NotExisting: "La configuration du fournisseur d'identité n'existe pas" Project: ProjectIDMissing: "Id de projet manquant" AlreadyExists: "Le projet existe déjà dans l'organisation" diff --git a/internal/static/i18n/hu.yaml b/internal/static/i18n/hu.yaml index 816e4f9776..4059ebec80 100644 --- a/internal/static/i18n/hu.yaml +++ b/internal/static/i18n/hu.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "A Private Label Policy nem található" NotChanged: "A Private Label Policy nem lett megváltoztatva" + IDPConfig: + NotExisting: "Az identitásszolgáltató konfiguráció nem létezik" Project: ProjectIDMissing: "Hiányzó Project Id" AlreadyExists: "A projekt már létezik a szervezetben" diff --git a/internal/static/i18n/id.yaml b/internal/static/i18n/id.yaml index e7bba9e47f..a67bd6d180 100644 --- a/internal/static/i18n/id.yaml +++ b/internal/static/i18n/id.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Kebijakan Label Pribadi tidak ditemukan" NotChanged: "Kebijakan Label Pribadi belum diubah" + IDPConfig: + NotExisting: "Konfigurasi Penyedia Identitas tidak ada" Project: ProjectIDMissing: "Id Proyek tidak ada" AlreadyExists: "Proyek sudah ada di organisasi" diff --git a/internal/static/i18n/it.yaml b/internal/static/i18n/it.yaml index dc9affb951..f0ca69a968 100644 --- a/internal/static/i18n/it.yaml +++ b/internal/static/i18n/it.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Etichettatura privata non trovata" NotChanged: "Private Labelling non è stata cambiata" + IDPConfig: + NotExisting: "La configurazione del IDP non esiste" Project: ProjectIDMissing: "ID del progetto mancante" AlreadyExists: "Il progetto è già stato creato nell'organizzazione" diff --git a/internal/static/i18n/ja.yaml b/internal/static/i18n/ja.yaml index d0cd04d59f..fdf1d00206 100644 --- a/internal/static/i18n/ja.yaml +++ b/internal/static/i18n/ja.yaml @@ -283,6 +283,8 @@ Errors: LabelPolicy: NotFound: "プライベートラベルポリシーが見つかりません" NotChanged: "プライベートラベルポリシーが変更されていません" + IDPConfig: + NotExisting: "IDプロバイダーの構成は存在しません" Project: ProjectIDMissing: "プロジェクトIDがありません" AlreadyExists: "プロジェクトはすでに組織に存在しています" diff --git a/internal/static/i18n/ko.yaml b/internal/static/i18n/ko.yaml index b7f1c351b5..9306d416d4 100644 --- a/internal/static/i18n/ko.yaml +++ b/internal/static/i18n/ko.yaml @@ -283,6 +283,8 @@ Errors: LabelPolicy: NotFound: "개인 라벨 정책을 찾을 수 없습니다" NotChanged: "개인 라벨 정책이 변경되지 않았습니다" + IDPConfig: + NotExisting: "IDP 설정이 존재하지 않습니다" Project: ProjectIDMissing: "프로젝트 ID가 누락되었습니다" AlreadyExists: "조직에 프로젝트가 이미 존재합니다" diff --git a/internal/static/i18n/mk.yaml b/internal/static/i18n/mk.yaml index d12e8d73df..bd5ba9ef77 100644 --- a/internal/static/i18n/mk.yaml +++ b/internal/static/i18n/mk.yaml @@ -281,6 +281,8 @@ Errors: LabelPolicy: NotFound: "Приватната политика за ознаките не е пронајдена" NotChanged: "Приватната политика за ознаките не е променета" + IDPConfig: + NotExisting: "Конфигурацијата на IDP не постои" Project: ProjectIDMissing: "Недостасува ID на проектот" AlreadyExists: "Проектот веќе постои во организацијата" diff --git a/internal/static/i18n/nl.yaml b/internal/static/i18n/nl.yaml index 93ab9a63d7..7ffc5bc1ba 100644 --- a/internal/static/i18n/nl.yaml +++ b/internal/static/i18n/nl.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Privé Label Beleid niet gevonden" NotChanged: "Privé Label Beleid is niet veranderd" + IDPConfig: + NotExisting: "Identiteitsprovider-configuratie bestaat niet" Project: ProjectIDMissing: "Project ID ontbreekt" AlreadyExists: "Project bestaat al op organisatie" diff --git a/internal/static/i18n/pl.yaml b/internal/static/i18n/pl.yaml index 8472ec91ca..afcefb7fc9 100644 --- a/internal/static/i18n/pl.yaml +++ b/internal/static/i18n/pl.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Nie znaleziono polityki marki własnej" NotChanged: "Polityka dotycząca marek własnych nie została zmieniona" + IDPConfig: + NotExisting: "Konfiguracja dostawcy tożsamości nie istnieje" Project: ProjectIDMissing: "Identyfikator projektu brak" AlreadyExists: "Projekt już istnieje w organizacji" diff --git a/internal/static/i18n/pt.yaml b/internal/static/i18n/pt.yaml index 82edc83e6e..11dec9cdbd 100644 --- a/internal/static/i18n/pt.yaml +++ b/internal/static/i18n/pt.yaml @@ -281,6 +281,8 @@ Errors: LabelPolicy: NotFound: "Política de Rótulo Privado não encontrada" NotChanged: "Política de Rótulo Privado não foi alterada" + IDPConfig: + NotExisting: "A Configuração do Provedor de Identidade não existe" Project: ProjectIDMissing: "ID do Projeto ausente" AlreadyExists: "Projeto já existe na organização" diff --git a/internal/static/i18n/ro.yaml b/internal/static/i18n/ro.yaml index 1f939f050b..71e0509fef 100644 --- a/internal/static/i18n/ro.yaml +++ b/internal/static/i18n/ro.yaml @@ -283,6 +283,8 @@ Errors: LabelPolicy: NotFound: "Politica de etichete private nu a fost găsită" NotChanged: "Politica de etichete private nu a fost schimbată" + IDPConfig: + NotExisting: "Configurația furnizorului de identitate nu există" Project: ProjectIDMissing: "ID-ul proiectului lipsește" AlreadyExists: "Proiectul există deja în organizație" diff --git a/internal/static/i18n/ru.yaml b/internal/static/i18n/ru.yaml index f247d85b60..2acf7f87bf 100644 --- a/internal/static/i18n/ru.yaml +++ b/internal/static/i18n/ru.yaml @@ -276,6 +276,8 @@ Errors: LabelPolicy: NotFound: "Политика частных торговых марок не найдена" NotChanged: "Политика использования частных торговых марок не изменилась." + IDPConfig: + NotExisting: "Конфигурация поставщика идентификационных данных не существует" Project: ProjectIDMissing: "ID Проекта отсутствует" AlreadyExists: "Проект уже существует в организации" diff --git a/internal/static/i18n/sv.yaml b/internal/static/i18n/sv.yaml index 82d11512a5..f576830507 100644 --- a/internal/static/i18n/sv.yaml +++ b/internal/static/i18n/sv.yaml @@ -282,6 +282,8 @@ Errors: LabelPolicy: NotFound: "Privat etikettpolicy hittades inte" NotChanged: "Privat etikettpolicy har inte ändrats" + IDPConfig: + NotExisting: "Identitetsleverantörskonfigurationen existerar inte" Project: ProjectIDMissing: "Projekt-ID saknas" AlreadyExists: "Projekt finns redan på organisationen" diff --git a/internal/static/i18n/tr.yaml b/internal/static/i18n/tr.yaml index 2683546fcf..b6964e8a8e 100644 --- a/internal/static/i18n/tr.yaml +++ b/internal/static/i18n/tr.yaml @@ -283,6 +283,8 @@ Errors: LabelPolicy: NotFound: "Özel Etiket Politikası bulunamadı" NotChanged: "Özel Etiket Politikası değişmedi" + IDPConfig: + NotExisting: "Kimlik Sağlayıcısı Yapılandırması mevcut değil" Project: ProjectIDMissing: "Proje Id eksik" AlreadyExists: "Proje organizasyonda zaten mevcut" diff --git a/internal/static/i18n/uk.yaml b/internal/static/i18n/uk.yaml index 3911f6e729..cd510e1742 100644 --- a/internal/static/i18n/uk.yaml +++ b/internal/static/i18n/uk.yaml @@ -277,6 +277,8 @@ Errors: LabelPolicy: NotFound: "Політика приватного бренду не знайдена" NotChanged: "Політика приватного бренду не була змінена" + IDPConfig: + NotExisting: "Конфігурація провайдера ідентичності не існує" Project: ProjectIDMissing: "Відсутній ідентифікатор проекту" AlreadyExists: "Проект вже існує в організації" diff --git a/internal/static/i18n/zh.yaml b/internal/static/i18n/zh.yaml index 3a2c8dcfdd..37b54b5e04 100644 --- a/internal/static/i18n/zh.yaml +++ b/internal/static/i18n/zh.yaml @@ -283,6 +283,8 @@ Errors: LabelPolicy: NotFound: "不存在私人政策" NotChanged: "私人政策不改变" + IDPConfig: + NotExisting: "身份提供者配置不存在" Project: ProjectIDMissing: "P缺少项目 ID" AlreadyExists: "项目以存在于组织中"