diff --git a/internal/connector/pingfederate/pingfederate_connector.go b/internal/connector/pingfederate/pingfederate_connector.go index c55901f4..fdcf058d 100644 --- a/internal/connector/pingfederate/pingfederate_connector.go +++ b/internal/connector/pingfederate/pingfederate_connector.go @@ -53,11 +53,14 @@ func (c *PingFederateConnector) Export(format, outputDir string, overwriteExport resources.CertificatesRevocationOCSPCertificate(&c.clientInfo), resources.CertificatesRevocationSettings(&c.clientInfo), resources.ClusterSettings(&c.clientInfo), + resources.ConfigurationEncryptionKeysRotate(&c.clientInfo), resources.DataStore(&c.clientInfo), resources.DefaultURLs(&c.clientInfo), resources.ExtendedProperties(&c.clientInfo), + resources.IdentityStoreProvisioner(&c.clientInfo), resources.IDPAdapter(&c.clientInfo), resources.IDPSPConnection(&c.clientInfo), + resources.IdpStsRequestParametersContract(&c.clientInfo), resources.IncomingProxySettings(&c.clientInfo), resources.KerberosRealm(&c.clientInfo), resources.LocalIdentityProfile(&c.clientInfo), diff --git a/internal/connector/pingfederate/pingfederate_connector_test.go b/internal/connector/pingfederate/pingfederate_connector_test.go index 25f0a3da..17dd5f8e 100644 --- a/internal/connector/pingfederate/pingfederate_connector_test.go +++ b/internal/connector/pingfederate/pingfederate_connector_test.go @@ -90,6 +90,11 @@ func TestPingFederateTerraformPlan(t *testing.T) { "Error: PingFederate API error", }, }, + { + name: "PingFederateConfigurationEncryptionKeysRotate", + resource: resources.ConfigurationEncryptionKeysRotate(PingFederateClientInfo), + ignoredErrors: nil, + }, { name: "PingFederateDataStore", resource: resources.DataStore(PingFederateClientInfo), @@ -105,6 +110,11 @@ func TestPingFederateTerraformPlan(t *testing.T) { resource: resources.ExtendedProperties(PingFederateClientInfo), ignoredErrors: nil, }, + { + name: "PingFederateIdentityStoreProvisioner", + resource: resources.IdentityStoreProvisioner(PingFederateClientInfo), + ignoredErrors: nil, + }, { name: "PingFederateIDPAdapter", resource: resources.IDPAdapter(PingFederateClientInfo), @@ -115,6 +125,11 @@ func TestPingFederateTerraformPlan(t *testing.T) { resource: resources.IDPSPConnection(PingFederateClientInfo), ignoredErrors: nil, }, + { + name: "PingFederateIdpStsRequestParametersContract", + resource: resources.IdpStsRequestParametersContract(PingFederateClientInfo), + ignoredErrors: nil, + }, { name: "PingFederateIncomingProxySettings", resource: resources.IncomingProxySettings(PingFederateClientInfo), diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_api_application.go b/internal/connector/pingfederate/resources/pingfederate_authentication_api_application.go index b8555db6..49ab9b5e 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_api_application.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_api_application.go @@ -39,9 +39,9 @@ func (r *PingFederateAuthenticationApiApplicationResource) ExportAll() (*[]conne for appId, appName := range *applicationData { commentData := map[string]string{ - "Authentication API Application Resource ID": appId, - "Authentication API Application Resource Name": appName, - "Resource Type": r.ResourceType(), + "Authentication API Application ID": appId, + "Authentication API Application Name": appName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_policies_fragment.go b/internal/connector/pingfederate/resources/pingfederate_authentication_policies_fragment.go index bb59aa65..89ab1416 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_policies_fragment.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_policies_fragment.go @@ -39,9 +39,9 @@ func (r *PingFederateAuthenticationPoliciesFragmentResource) ExportAll() (*[]con for fragmentId, fragmentName := range *fragmentData { commentData := map[string]string{ - "Authentication Policies Fragment Resource ID": fragmentId, - "Authentication Policies Fragment Resource Name": fragmentName, - "Resource Type": r.ResourceType(), + "Authentication Policies Fragment ID": fragmentId, + "Authentication Policies Fragment Name": fragmentName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_policy_contract.go b/internal/connector/pingfederate/resources/pingfederate_authentication_policy_contract.go index 63fc547f..819f0f08 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_policy_contract.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_policy_contract.go @@ -39,9 +39,9 @@ func (r *PingFederateAuthenticationPolicyContractResource) ExportAll() (*[]conne for authnPolicyContractId, authnPolicyContractName := range *authenticationPolicyContractData { commentData := map[string]string{ - "Authentication Policy Contract Resource ID": authnPolicyContractId, - "Authentication Policy Contract Resource Name": authnPolicyContractName, - "Resource Type": r.ResourceType(), + "Authentication Policy Contract ID": authnPolicyContractId, + "Authentication Policy Contract Name": authnPolicyContractName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_selector.go b/internal/connector/pingfederate/resources/pingfederate_authentication_selector.go index 8c135e1e..9fb02cd5 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_selector.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_selector.go @@ -39,9 +39,9 @@ func (r *PingFederateAuthenticationSelectorResource) ExportAll() (*[]connector.I for authnSelectorId, authnSelectorName := range *authenticationSelectorData { commentData := map[string]string{ - "Authentication Selector Resource ID": authnSelectorId, - "Authentication Selector Resource Name": authnSelectorName, - "Resource Type": r.ResourceType(), + "Authentication Selector ID": authnSelectorId, + "Authentication Selector Name": authnSelectorName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_captcha_provider.go b/internal/connector/pingfederate/resources/pingfederate_captcha_provider.go index 3774e56d..2c355d63 100644 --- a/internal/connector/pingfederate/resources/pingfederate_captcha_provider.go +++ b/internal/connector/pingfederate/resources/pingfederate_captcha_provider.go @@ -39,9 +39,9 @@ func (r *PingFederateCaptchaProviderResource) ExportAll() (*[]connector.ImportBl for captchaProviderId, captchaProviderName := range *captchaProviderData { commentData := map[string]string{ - "Captcha Provider Resource ID": captchaProviderId, - "Captcha Provider Resource Name": captchaProviderId, - "Resource Type": r.ResourceType(), + "Captcha Provider ID": captchaProviderId, + "Captcha Provider Name": captchaProviderId, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_certificate_ca.go b/internal/connector/pingfederate/resources/pingfederate_certificate_ca.go index 16280cb1..27c6329b 100644 --- a/internal/connector/pingfederate/resources/pingfederate_certificate_ca.go +++ b/internal/connector/pingfederate/resources/pingfederate_certificate_ca.go @@ -45,7 +45,7 @@ func (r *PingFederateCertificateCAResource) ExportAll() (*[]connector.ImportBloc commentData := map[string]string{ "Certificate CA Issuer DN": certViewIssuerDN, - "Certificate CA Resource ID": certViewId, + "Certificate CA ID": certViewId, "Certificate CA Serial Number": certViewSerialNumber, "Resource Type": r.ResourceType(), } @@ -76,8 +76,8 @@ func (r *PingFederateCertificateCAResource) getTrustedCAData() (*map[string][]st return nil, common.DataNilError(r.ResourceType(), response) } - certViewsItems, ok := certViews.GetItemsOk() - if !ok { + certViewsItems, certViewsItemsOk := certViews.GetItemsOk() + if !certViewsItemsOk { return nil, common.DataNilError(r.ResourceType(), response) } diff --git a/internal/connector/pingfederate/resources/pingfederate_configuration_encryption_keys_rotate.go b/internal/connector/pingfederate/resources/pingfederate_configuration_encryption_keys_rotate.go new file mode 100644 index 00000000..af038dfd --- /dev/null +++ b/internal/connector/pingfederate/resources/pingfederate_configuration_encryption_keys_rotate.go @@ -0,0 +1,53 @@ +package resources + +import ( + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingFederateConfigurationEncryptionKeysRotateResource{} +) + +type PingFederateConfigurationEncryptionKeysRotateResource struct { + clientInfo *connector.PingFederateClientInfo +} + +// Utility method for creating a PingFederateConfigurationEncryptionKeysRotateResource +func ConfigurationEncryptionKeysRotate(clientInfo *connector.PingFederateClientInfo) *PingFederateConfigurationEncryptionKeysRotateResource { + return &PingFederateConfigurationEncryptionKeysRotateResource{ + clientInfo: clientInfo, + } +} + +func (r *PingFederateConfigurationEncryptionKeysRotateResource) ResourceType() string { + return "pingfederate_configuration_encryption_keys_rotate" +} + +func (r *PingFederateConfigurationEncryptionKeysRotateResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + configurationEncryptionKeysRotateId := "configuration_encryption_keys_rotate_singleton_id" + configurationEncryptionKeysRotateName := "Configuration Encryption Keys Rotate" + + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: configurationEncryptionKeysRotateName, + ResourceID: configurationEncryptionKeysRotateId, + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + + return &importBlocks, nil +} diff --git a/internal/connector/pingfederate/resources/pingfederate_configuration_encryption_keys_rotate_test.go b/internal/connector/pingfederate/resources/pingfederate_configuration_encryption_keys_rotate_test.go new file mode 100644 index 00000000..67e0a389 --- /dev/null +++ b/internal/connector/pingfederate/resources/pingfederate_configuration_encryption_keys_rotate_test.go @@ -0,0 +1,26 @@ +package resources_test + +import ( + "testing" + + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingfederate/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" +) + +func TestPingFederateConfigurationEncryptionKeysRotateExport(t *testing.T) { + // Get initialized apiClient and resource + PingFederateClientInfo := testutils.GetPingFederateClientInfo(t) + resource := resources.ConfigurationEncryptionKeysRotate(PingFederateClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingfederate_configuration_encryption_keys_rotate", + ResourceName: "Configuration Encryption Keys Rotate", + ResourceID: "configuration_encryption_keys_rotate_singleton_id", + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingfederate/resources/pingfederate_data_store.go b/internal/connector/pingfederate/resources/pingfederate_data_store.go index ed3e0eec..2de8e196 100644 --- a/internal/connector/pingfederate/resources/pingfederate_data_store.go +++ b/internal/connector/pingfederate/resources/pingfederate_data_store.go @@ -41,9 +41,9 @@ func (r *PingFederateDataStoreResource) ExportAll() (*[]connector.ImportBlock, e for dataStoreId, dataStoreType := range *dataStoreData { commentData := map[string]string{ - "Data Store Resource ID": dataStoreId, - "Data Store Type": dataStoreType, - "Resource Type": r.ResourceType(), + "Data Store ID": dataStoreId, + "Data Store Type": dataStoreType, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_identity_store_provisioner.go b/internal/connector/pingfederate/resources/pingfederate_identity_store_provisioner.go new file mode 100644 index 00000000..0552db4e --- /dev/null +++ b/internal/connector/pingfederate/resources/pingfederate_identity_store_provisioner.go @@ -0,0 +1,88 @@ +package resources + +import ( + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingFederateIdentityStoreProvisionerResource{} +) + +type PingFederateIdentityStoreProvisionerResource struct { + clientInfo *connector.PingFederateClientInfo +} + +// Utility method for creating a PingFederateIdentityStoreProvisionerResource +func IdentityStoreProvisioner(clientInfo *connector.PingFederateClientInfo) *PingFederateIdentityStoreProvisionerResource { + return &PingFederateIdentityStoreProvisionerResource{ + clientInfo: clientInfo, + } +} + +func (r *PingFederateIdentityStoreProvisionerResource) ResourceType() string { + return "pingfederate_identity_store_provisioner" +} + +func (r *PingFederateIdentityStoreProvisionerResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + identityStoreProvisionerData, err := r.getIdentityStoreProvisionerData() + if err != nil { + return nil, err + } + + for identityStoreProvisionerId, identityStoreProvisionerName := range *identityStoreProvisionerData { + commentData := map[string]string{ + "Identity Store Provisioner ID": identityStoreProvisionerId, + "Identity Store Provisioner Name": identityStoreProvisionerName, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: identityStoreProvisionerName, + ResourceID: identityStoreProvisionerId, + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } + + return &importBlocks, nil +} + +func (r *PingFederateIdentityStoreProvisionerResource) getIdentityStoreProvisionerData() (*map[string]string, error) { + identityStoreProvisionerData := make(map[string]string) + + identityStoreProvisioners, response, err := r.clientInfo.ApiClient.IdentityStoreProvisionersAPI.GetIdentityStoreProvisioners(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetIdentityStoreProvisioners", r.ResourceType()) + if err != nil { + return nil, err + } + + if identityStoreProvisioners == nil { + return nil, common.DataNilError(r.ResourceType(), response) + } + + identityStoreProvisionersItems, identityStoreProvisionersItemsOk := identityStoreProvisioners.GetItemsOk() + if !identityStoreProvisionersItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) + } + + for _, identityStoreProvisioner := range identityStoreProvisionersItems { + identityStoreProvisionerId, identityStoreProvisionerIdOk := identityStoreProvisioner.GetIdOk() + identityStoreProvisionerName, identityStoreProvisionerNameOk := identityStoreProvisioner.GetNameOk() + + if identityStoreProvisionerIdOk && identityStoreProvisionerNameOk { + identityStoreProvisionerData[*identityStoreProvisionerId] = *identityStoreProvisionerName + } + } + + return &identityStoreProvisionerData, nil +} diff --git a/internal/connector/pingfederate/resources/pingfederate_identity_store_provisioner_test.go b/internal/connector/pingfederate/resources/pingfederate_identity_store_provisioner_test.go new file mode 100644 index 00000000..362420d5 --- /dev/null +++ b/internal/connector/pingfederate/resources/pingfederate_identity_store_provisioner_test.go @@ -0,0 +1,25 @@ +package resources_test + +import ( + "testing" + + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingfederate/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" +) + +func TestPingFederateIdentityStoreProvisionerExport(t *testing.T) { + // Get initialized apiClient and resource + PingFederateClientInfo := testutils.GetPingFederateClientInfo(t) + resource := resources.IdentityStoreProvisioner(PingFederateClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingfederate_identity_store_provisioner", + ResourceName: "ISP TestName", + ResourceID: "ISPTestID", + }, + } + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingfederate/resources/pingfederate_idp_adapter.go b/internal/connector/pingfederate/resources/pingfederate_idp_adapter.go index 89d984b1..92799094 100644 --- a/internal/connector/pingfederate/resources/pingfederate_idp_adapter.go +++ b/internal/connector/pingfederate/resources/pingfederate_idp_adapter.go @@ -39,9 +39,9 @@ func (r *PingFederateIDPAdapterResource) ExportAll() (*[]connector.ImportBlock, for idpAdapterId, idpAdapterName := range *idpAdapterData { commentData := map[string]string{ - "IDP Adapter Resource ID": idpAdapterId, - "IDP Adapter Resource Name": idpAdapterName, - "Resource Type": r.ResourceType(), + "IDP Adapter ID": idpAdapterId, + "IDP Adapter Name": idpAdapterName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_idp_sp_connection.go b/internal/connector/pingfederate/resources/pingfederate_idp_sp_connection.go index 145a56b9..eca20af7 100644 --- a/internal/connector/pingfederate/resources/pingfederate_idp_sp_connection.go +++ b/internal/connector/pingfederate/resources/pingfederate_idp_sp_connection.go @@ -39,9 +39,9 @@ func (r *PingFederateIDPSPConnectionResource) ExportAll() (*[]connector.ImportBl for spConnectionId, spConnectionName := range *spConnectionData { commentData := map[string]string{ - "IDP SP Connection Resource ID": spConnectionId, - "IDP SP Connection Resource Name": spConnectionName, - "Resource Type": r.ResourceType(), + "IDP SP Connection ID": spConnectionId, + "IDP SP Connection Name": spConnectionName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_idp_sts_request_parameters_contract.go b/internal/connector/pingfederate/resources/pingfederate_idp_sts_request_parameters_contract.go new file mode 100644 index 00000000..512c8d97 --- /dev/null +++ b/internal/connector/pingfederate/resources/pingfederate_idp_sts_request_parameters_contract.go @@ -0,0 +1,88 @@ +package resources + +import ( + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingFederateIdpStsRequestParametersContractResource{} +) + +type PingFederateIdpStsRequestParametersContractResource struct { + clientInfo *connector.PingFederateClientInfo +} + +// Utility method for creating a PingFederateIdpStsRequestParametersContractResource +func IdpStsRequestParametersContract(clientInfo *connector.PingFederateClientInfo) *PingFederateIdpStsRequestParametersContractResource { + return &PingFederateIdpStsRequestParametersContractResource{ + clientInfo: clientInfo, + } +} + +func (r *PingFederateIdpStsRequestParametersContractResource) ResourceType() string { + return "pingfederate_idp_sts_request_parameters_contract" +} + +func (r *PingFederateIdpStsRequestParametersContractResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + stsRequestParamContractData, err := r.getStsRequestParamContractData() + if err != nil { + return nil, err + } + + for stsRequestParamContractId, stsRequestParamContractName := range *stsRequestParamContractData { + commentData := map[string]string{ + "IDP STS Request Parameters Contract ID": stsRequestParamContractId, + "IDP STS Request Parameters Contract Name": stsRequestParamContractName, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: stsRequestParamContractName, + ResourceID: stsRequestParamContractId, + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } + + return &importBlocks, nil +} + +func (r *PingFederateIdpStsRequestParametersContractResource) getStsRequestParamContractData() (*map[string]string, error) { + stsRequestParamContractData := make(map[string]string) + + stsRequestParamContracts, response, err := r.clientInfo.ApiClient.IdpStsRequestParametersContractsAPI.GetStsRequestParamContracts(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetStsRequestParamContracts", r.ResourceType()) + if err != nil { + return nil, err + } + + if stsRequestParamContracts == nil { + return nil, common.DataNilError(r.ResourceType(), response) + } + + stsRequestParamContractsItems, stsRequestParamContractsOk := stsRequestParamContracts.GetItemsOk() + if !stsRequestParamContractsOk { + return nil, common.DataNilError(r.ResourceType(), response) + } + + for _, stsRequestParamContract := range stsRequestParamContractsItems { + stsRequestParamContractId, stsRequestParamContractIdOk := stsRequestParamContract.GetIdOk() + stsRequestParamContractName, stsRequestParamContractNameOk := stsRequestParamContract.GetNameOk() + + if stsRequestParamContractIdOk && stsRequestParamContractNameOk { + stsRequestParamContractData[*stsRequestParamContractId] = *stsRequestParamContractName + } + } + + return &stsRequestParamContractData, nil +} diff --git a/internal/connector/pingfederate/resources/pingfederate_idp_sts_request_parameters_contract_test.go b/internal/connector/pingfederate/resources/pingfederate_idp_sts_request_parameters_contract_test.go new file mode 100644 index 00000000..c1796e9d --- /dev/null +++ b/internal/connector/pingfederate/resources/pingfederate_idp_sts_request_parameters_contract_test.go @@ -0,0 +1,25 @@ +package resources_test + +import ( + "testing" + + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingfederate/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" +) + +func TestPingFederateIdpStsRequestParametersContractExport(t *testing.T) { + // Get initialized apiClient and resource + PingFederateClientInfo := testutils.GetPingFederateClientInfo(t) + resource := resources.IdpStsRequestParametersContract(PingFederateClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingfederate_idp_sts_request_parameters_contract", + ResourceName: "STS TestName", + ResourceID: "STSTestID", + }, + } + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingfederate/resources/pingfederate_kerberos_realm.go b/internal/connector/pingfederate/resources/pingfederate_kerberos_realm.go index f48b3db1..e5218c09 100644 --- a/internal/connector/pingfederate/resources/pingfederate_kerberos_realm.go +++ b/internal/connector/pingfederate/resources/pingfederate_kerberos_realm.go @@ -39,9 +39,9 @@ func (r *PingFederateKerberosRealmResource) ExportAll() (*[]connector.ImportBloc for kerberosRealmId, kerberosRealmName := range *kerberosRealmData { commentData := map[string]string{ - "Kerberos Realm Resource ID": kerberosRealmId, - "Kerberos Realm Resource Name": kerberosRealmName, - "Resource Type": r.ResourceType(), + "Kerberos Realm ID": kerberosRealmId, + "Kerberos Realm Name": kerberosRealmName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ @@ -70,8 +70,8 @@ func (r *PingFederateKerberosRealmResource) getKerberosRealmData() (*map[string] return nil, common.DataNilError(r.ResourceType(), response) } - kerberosRealmsItems, ok := kerberosRealms.GetItemsOk() - if !ok { + kerberosRealmsItems, kerberosRealmsItemsOk := kerberosRealms.GetItemsOk() + if !kerberosRealmsItemsOk { return nil, common.DataNilError(r.ResourceType(), response) } diff --git a/internal/connector/pingfederate/resources/pingfederate_local_identity_profile.go b/internal/connector/pingfederate/resources/pingfederate_local_identity_profile.go index 252179e8..d0ebe8ae 100644 --- a/internal/connector/pingfederate/resources/pingfederate_local_identity_profile.go +++ b/internal/connector/pingfederate/resources/pingfederate_local_identity_profile.go @@ -39,9 +39,9 @@ func (r *PingFederateLocalIdentityProfileResource) ExportAll() (*[]connector.Imp for identityProfileId, identityProfileName := range *identityProfileData { commentData := map[string]string{ - "Local Identity Profile Resource ID": identityProfileId, - "Local Identity Profile Resource Name": identityProfileName, - "Resource Type": r.ResourceType(), + "Local Identity Profile ID": identityProfileId, + "Local Identity Profile Name": identityProfileName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ @@ -70,8 +70,8 @@ func (r *PingFederateLocalIdentityProfileResource) getIdentityProfileData() (*ma return nil, common.DataNilError(r.ResourceType(), response) } - identityProfilesItems, ok := identityProfiles.GetItemsOk() - if !ok { + identityProfilesItems, identityProfilesItemsOk := identityProfiles.GetItemsOk() + if !identityProfilesItemsOk { return nil, common.DataNilError(r.ResourceType(), response) } diff --git a/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_manager.go b/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_manager.go index add169f0..e3eeec22 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_manager.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_manager.go @@ -39,9 +39,9 @@ func (r *PingFederateOAuthAccessTokenManagerResource) ExportAll() (*[]connector. for tokenManagerId, tokenManagerName := range *tokenManagerData { commentData := map[string]string{ - "OAuth Access Token Manager Resource ID": tokenManagerId, - "OAuth Access Token Manager Resource Name": tokenManagerName, - "Resource Type": r.ResourceType(), + "OAuth Access Token Manager ID": tokenManagerId, + "OAuth Access Token Manager Name": tokenManagerName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ @@ -70,8 +70,8 @@ func (r *PingFederateOAuthAccessTokenManagerResource) getTokenManagerData() (*ma return nil, common.DataNilError(r.ResourceType(), response) } - tokenManagersItems, ok := tokenManagers.GetItemsOk() - if !ok { + tokenManagersItems, tokenManagersItemsOk := tokenManagers.GetItemsOk() + if !tokenManagersItemsOk { return nil, common.DataNilError(r.ResourceType(), response) } diff --git a/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_mapping.go b/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_mapping.go index ea512d0c..efe6b9a7 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_mapping.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_mapping.go @@ -41,9 +41,9 @@ func (r *PingFederateOAuthAccessTokenMappingResource) ExportAll() (*[]connector. for mappingId, mappingContextType := range *mappingData { commentData := map[string]string{ - "OAuth Access Token Mapping Resource ID": mappingId, + "OAuth Access Token Mapping ID": mappingId, "OAuth Access Token Mapping Context Type": mappingContextType, - "Resource Type": r.ResourceType(), + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_oauth_client.go b/internal/connector/pingfederate/resources/pingfederate_oauth_client.go index 7ebf4847..93390a07 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_client.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_client.go @@ -39,9 +39,9 @@ func (r *PingFederateOAuthClientResource) ExportAll() (*[]connector.ImportBlock, for oauthClientId, oauthClientName := range *oauthClientData { commentData := map[string]string{ - "OAuth Client Resource ID": oauthClientId, - "OAuth Client Resource Name": oauthClientName, - "Resource Type": r.ResourceType(), + "OAuth Client ID": oauthClientId, + "OAuth Client Name": oauthClientName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ @@ -70,8 +70,8 @@ func (r *PingFederateOAuthClientResource) getOAuthClientData() (*map[string]stri return nil, common.DataNilError(r.ResourceType(), response) } - clientsItems, ok := clients.GetItemsOk() - if !ok { + clientsItems, clientsItemsOk := clients.GetItemsOk() + if !clientsItemsOk { return nil, common.DataNilError(r.ResourceType(), response) } diff --git a/internal/connector/pingfederate/resources/pingfederate_oauth_issuer.go b/internal/connector/pingfederate/resources/pingfederate_oauth_issuer.go index 97127cca..5b99c889 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_issuer.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_issuer.go @@ -39,9 +39,9 @@ func (r *PingFederateOAuthIssuerResource) ExportAll() (*[]connector.ImportBlock, for oauthIssuerId, oauthIssuerName := range *oauthIssuerData { commentData := map[string]string{ - "OAuth Issuer Resource ID": oauthIssuerId, - "OAuth Issuer Resource Name": oauthIssuerName, - "Resource Type": r.ResourceType(), + "OAuth Issuer ID": oauthIssuerId, + "OAuth Issuer Name": oauthIssuerName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_openid_connect_policy.go b/internal/connector/pingfederate/resources/pingfederate_openid_connect_policy.go index d6a3231d..b4855664 100644 --- a/internal/connector/pingfederate/resources/pingfederate_openid_connect_policy.go +++ b/internal/connector/pingfederate/resources/pingfederate_openid_connect_policy.go @@ -39,9 +39,9 @@ func (r *PingFederateOpenIDConnectPolicyResource) ExportAll() (*[]connector.Impo for oidcPolicyId, oidcPolicyName := range *oidcPolicyData { commentData := map[string]string{ - "OpenID Connect Policy Resource ID": oidcPolicyId, - "OpenID Connect Policy Resource Name": oidcPolicyName, - "Resource Type": r.ResourceType(), + "OpenID Connect Policy ID": oidcPolicyId, + "OpenID Connect Policy Name": oidcPolicyName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ @@ -70,8 +70,8 @@ func (r *PingFederateOpenIDConnectPolicyResource) getOIDCPolicyData() (*map[stri return nil, common.DataNilError(r.ResourceType(), response) } - oidcPoliciesItems, ok := oidcPolicies.GetItemsOk() - if !ok { + oidcPoliciesItems, oidcPoliciesItemsOk := oidcPolicies.GetItemsOk() + if !oidcPoliciesItemsOk { return nil, common.DataNilError(r.ResourceType(), response) } diff --git a/internal/connector/pingfederate/resources/pingfederate_password_credential_validator.go b/internal/connector/pingfederate/resources/pingfederate_password_credential_validator.go index 7f557bcb..806841e1 100644 --- a/internal/connector/pingfederate/resources/pingfederate_password_credential_validator.go +++ b/internal/connector/pingfederate/resources/pingfederate_password_credential_validator.go @@ -39,9 +39,9 @@ func (r *PingFederatePasswordCredentialValidatorResource) ExportAll() (*[]connec for passwordCredentialValidatorId, passwordCredentialValidatorName := range *passwordCredentialValidatorData { commentData := map[string]string{ - "Password Credential Validator Resource ID": passwordCredentialValidatorId, - "Password Credential Validator Resource Name": passwordCredentialValidatorName, - "Resource Type": r.ResourceType(), + "Password Credential Validator ID": passwordCredentialValidatorId, + "Password Credential Validator Name": passwordCredentialValidatorName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ @@ -70,8 +70,8 @@ func (r *PingFederatePasswordCredentialValidatorResource) getPasswordCredentialV return nil, common.DataNilError(r.ResourceType(), response) } - passwordCredentialValidatorsItems, ok := passwordCredentialValidators.GetItemsOk() - if !ok { + passwordCredentialValidatorsItems, passwordCredentialValidatorsItemsOk := passwordCredentialValidators.GetItemsOk() + if !passwordCredentialValidatorsItemsOk { return nil, common.DataNilError(r.ResourceType(), response) } diff --git a/internal/connector/pingfederate/resources/pingfederate_pingone_connection.go b/internal/connector/pingfederate/resources/pingfederate_pingone_connection.go index 9e10e444..b88888eb 100644 --- a/internal/connector/pingfederate/resources/pingfederate_pingone_connection.go +++ b/internal/connector/pingfederate/resources/pingfederate_pingone_connection.go @@ -39,9 +39,9 @@ func (r *PingFederatePingOneConnectionResource) ExportAll() (*[]connector.Import for pingoneConnectionId, pingoneConnectionName := range *pingoneConnectionData { commentData := map[string]string{ - "PingOne Connection Resource ID": pingoneConnectionId, - "PingOne Connection Resource Name": pingoneConnectionName, - "Resource Type": r.ResourceType(), + "PingOne Connection ID": pingoneConnectionId, + "PingOne Connection Name": pingoneConnectionName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ diff --git a/internal/connector/pingfederate/resources/pingfederate_sp_authentication_policy_contract_mapping.go b/internal/connector/pingfederate/resources/pingfederate_sp_authentication_policy_contract_mapping.go index 8a090def..dc39afce 100644 --- a/internal/connector/pingfederate/resources/pingfederate_sp_authentication_policy_contract_mapping.go +++ b/internal/connector/pingfederate/resources/pingfederate_sp_authentication_policy_contract_mapping.go @@ -45,9 +45,9 @@ func (r *PingFederateSPAuthenticationPolicyContractMappingResource) ExportAll() commentData := map[string]string{ "Resource Type": r.ResourceType(), - "Source Authentication Policy Contract Resource ID": apcToSpAdapterMappingSourceID, - "SP Authentication Policy Contract Mapping Resource ID": apcToSpAdapterMappingId, - "Target SP Adapter Resource ID": apcToSpAdapterMappingTargetID, + "Source Authentication Policy Contract ID": apcToSpAdapterMappingSourceID, + "SP Authentication Policy Contract Mapping ID": apcToSpAdapterMappingId, + "Target SP Adapter ID": apcToSpAdapterMappingTargetID, } importBlock := connector.ImportBlock{ diff --git a/server-profiles/12.1/data.json.subst b/server-profiles/12.1/data.json.subst index 42ac9b15..992f5242 100644 --- a/server-profiles/12.1/data.json.subst +++ b/server-profiles/12.1/data.json.subst @@ -3916,6 +3916,60 @@ } } ] + }, + { + "resourceType": "/identityStoreProvisioners", + "operationType": "SAVE", + "items": [ + { + "id": "ISPTestID", + "name": "ISP TestName", + "pluginDescriptorRef": { + "id": "com.pingidentity.identitystoreprovisioners.sample.SampleIdentityStoreProvisioner", + "location": "https://localhost:9999/pf-admin-api/v1/identityStoreProvisioners/descriptors/com.pingidentity.identitystoreprovisioners.sample.SampleIdentityStoreProvisioner" + }, + "configuration": { + "tables": [], + "fields": [ + { + "name": "Delete user behavior", + "value": "Disable User" + } + ] + }, + "lastModified": "2024-12-13T18:45:28.156Z", + "attributeContract": { + "coreAttributes": [ + { + "name": "username" + } + ], + "inherited": false + }, + "groupAttributeContract": { + "coreAttributes": [ + { + "name": "groupname" + } + ], + "inherited": false + } + } + ] + }, + { + "resourceType": "/idp/stsRequestParametersContracts", + "operationType": "SAVE", + "items": [ + { + "id": "STSTestID", + "name": "STS TestName", + "parameters": [ + "test" + ], + "lastModified": "2024-12-13T18:59:29.324Z" + } + ] } ] } diff --git a/server-profiles/shared-profile/instance/server/default/deploy/pf-sdk-example-identity-store-provisioner-12.2.0.4-SNAPSHOT.jar b/server-profiles/shared-profile/instance/server/default/deploy/pf-sdk-example-identity-store-provisioner-12.2.0.4-SNAPSHOT.jar new file mode 100644 index 00000000..39a86386 Binary files /dev/null and b/server-profiles/shared-profile/instance/server/default/deploy/pf-sdk-example-identity-store-provisioner-12.2.0.4-SNAPSHOT.jar differ