diff --git a/internal/connector/pingfederate/pingfederate_connector.go b/internal/connector/pingfederate/pingfederate_connector.go index 1611c973..39d8632a 100644 --- a/internal/connector/pingfederate/pingfederate_connector.go +++ b/internal/connector/pingfederate/pingfederate_connector.go @@ -47,6 +47,7 @@ func (c *PingFederateConnector) Export(format, outputDir string, overwriteExport resources.AuthenticationPoliciesSettings(&c.clientInfo), resources.AuthenticationPolicyContract(&c.clientInfo), resources.AuthenticationSelector(&c.clientInfo), + resources.CaptchaProvider(&c.clientInfo), resources.CertificateCA(&c.clientInfo), resources.DataStore(&c.clientInfo), resources.DefaultURLs(&c.clientInfo), diff --git a/internal/connector/pingfederate/pingfederate_connector_test.go b/internal/connector/pingfederate/pingfederate_connector_test.go index 24535c86..a5396b05 100644 --- a/internal/connector/pingfederate/pingfederate_connector_test.go +++ b/internal/connector/pingfederate/pingfederate_connector_test.go @@ -35,11 +35,9 @@ func TestPingFederateTerraformPlan(t *testing.T) { ignoredErrors: nil, }, { - name: "PingFederateAuthenticationPoliciesFragment", - resource: resources.AuthenticationPoliciesFragment(PingFederateClientInfo), - ignoredErrors: []string{ - "Error: Reference to undeclared resource", - }, + name: "PingFederateAuthenticationPoliciesFragment", + resource: resources.AuthenticationPoliciesFragment(PingFederateClientInfo), + ignoredErrors: nil, }, { name: "PingFederateAuthenticationPoliciesSettings", @@ -56,6 +54,11 @@ func TestPingFederateTerraformPlan(t *testing.T) { resource: resources.AuthenticationSelector(PingFederateClientInfo), ignoredErrors: nil, }, + { + name: "PingFederateCaptchaProvider", + resource: resources.CaptchaProvider(PingFederateClientInfo), + ignoredErrors: nil, + }, { name: "PingFederateCertificateCA", resource: resources.CertificateCA(PingFederateClientInfo), @@ -64,11 +67,9 @@ func TestPingFederateTerraformPlan(t *testing.T) { }, }, { - name: "PingFederateDataStore", - resource: resources.DataStore(PingFederateClientInfo), - ignoredErrors: []string{ - "Error: Invalid attribute configuration", - }, + name: "PingFederateDataStore", + resource: resources.DataStore(PingFederateClientInfo), + ignoredErrors: nil, }, { name: "PingFederateDefaultURLs", @@ -81,12 +82,9 @@ func TestPingFederateTerraformPlan(t *testing.T) { ignoredErrors: nil, }, { - name: "PingFederateIDPAdapter", - resource: resources.IDPAdapter(PingFederateClientInfo), - ignoredErrors: []string{ - "Error: Missing Configuration for Required Attribute", - "Error: Reference to undeclared resource", - }, + name: "PingFederateIDPAdapter", + resource: resources.IDPAdapter(PingFederateClientInfo), + ignoredErrors: nil, }, { name: "PingFederateIDPSPConnection", @@ -99,11 +97,9 @@ func TestPingFederateTerraformPlan(t *testing.T) { ignoredErrors: nil, }, { - name: "PingFederateKerberosRealm", - resource: resources.KerberosRealm(PingFederateClientInfo), - ignoredErrors: []string{ - "Error: Invalid attribute configuration", - }, + name: "PingFederateKerberosRealm", + resource: resources.KerberosRealm(PingFederateClientInfo), + ignoredErrors: nil, }, { name: "PingFederateLocalIdentityProfile", @@ -131,11 +127,9 @@ func TestPingFederateTerraformPlan(t *testing.T) { ignoredErrors: nil, }, { - name: "PingFederateOAuthClient", - resource: resources.OAuthClient(PingFederateClientInfo), - ignoredErrors: []string{ - "Error: Invalid attribute configuration", - }, + name: "PingFederateOAuthClient", + resource: resources.OAuthClient(PingFederateClientInfo), + ignoredErrors: nil, }, { name: "PingFederateOAuthIssuer", @@ -158,18 +152,14 @@ func TestPingFederateTerraformPlan(t *testing.T) { ignoredErrors: nil, }, { - name: "PingFederatePasswordCredentialValidator", - resource: resources.PasswordCredentialValidator(PingFederateClientInfo), - ignoredErrors: []string{ - "Error: Missing Configuration for Required Attribute", - }, + name: "PingFederatePasswordCredentialValidator", + resource: resources.PasswordCredentialValidator(PingFederateClientInfo), + ignoredErrors: nil, }, { - name: "PingFederatePingOneConnection", - resource: resources.PingOneConnection(PingFederateClientInfo), - ignoredErrors: []string{ - "Error: Missing Configuration for Required Attribute", - }, + name: "PingFederatePingOneConnection", + resource: resources.PingOneConnection(PingFederateClientInfo), + ignoredErrors: nil, }, { name: "PingFederateRedirectValidation", diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_api_application.go b/internal/connector/pingfederate/resources/pingfederate_authentication_api_application.go index 98ac3827..b8555db6 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_api_application.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_api_application.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func AuthenticationApiApplication(clientInfo *connector.PingFederateClientInfo) } } +func (r *PingFederateAuthenticationApiApplicationResource) ResourceType() string { + return "pingfederate_authentication_api_application" +} + func (r *PingFederateAuthenticationApiApplicationResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + applicationData, err := r.getApplicationData() + if err != nil { + return nil, err + } + + 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(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: appName, + ResourceID: appId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.AuthenticationApiAPI.GetAuthenticationApiApplications(r.clientInfo.Context).Execute - apiFunctionName := "GetAuthenticationApiApplications" + importBlocks = append(importBlocks, importBlock) + } - authnApiApplications, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateAuthenticationApiApplicationResource) getApplicationData() (*map[string]string, error) { + applicationData := make(map[string]string) + + authnApiApplications, response, err := r.clientInfo.ApiClient.AuthenticationApiAPI.GetAuthenticationApiApplications(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetAuthenticationApiApplications", r.ResourceType()) if err != nil { return nil, err } if authnApiApplications == nil { - l.Error().Msgf("Returned %s() authnApiApplications is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - authnApiApplicationsItems, ok := authnApiApplications.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() authnApiApplications items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + authnApiApplicationsItems, authnApiApplicationsItemsOk := authnApiApplications.GetItemsOk() + if !authnApiApplicationsItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, authnApiApplication := range authnApiApplicationsItems { authnApiApplicationId, authnApiApplicationIdOk := authnApiApplication.GetIdOk() authnApiApplicationName, authnApiApplicationNameOk := authnApiApplication.GetNameOk() if authnApiApplicationIdOk && authnApiApplicationNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authentication API Application Resource ID": *authnApiApplicationId, - "Authentication API Application Resource Name": *authnApiApplicationName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authnApiApplicationName, - ResourceID: *authnApiApplicationId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + applicationData[*authnApiApplicationId] = *authnApiApplicationName } } - return &importBlocks, nil -} - -func (r *PingFederateAuthenticationApiApplicationResource) ResourceType() string { - return "pingfederate_authentication_api_application" + return &applicationData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_api_settings.go b/internal/connector/pingfederate/resources/pingfederate_authentication_api_settings.go index b1d932d2..4d983b97 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_api_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_api_settings.go @@ -22,13 +22,16 @@ func AuthenticationApiSettings(clientInfo *connector.PingFederateClientInfo) *Pi } } +func (r *PingFederateAuthenticationApiSettingsResource) ResourceType() string { + return "pingfederate_authentication_api_settings" +} + func (r *PingFederateAuthenticationApiSettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - authnApiSettingsId := "authentication_api_settings_singleton_id" authnApiSettingsName := "Authentication API Settings" @@ -37,16 +40,14 @@ func (r *PingFederateAuthenticationApiSettingsResource) ExportAll() (*[]connecto "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: authnApiSettingsName, ResourceID: authnApiSettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateAuthenticationApiSettingsResource) ResourceType() string { - return "pingfederate_authentication_api_settings" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_policies.go b/internal/connector/pingfederate/resources/pingfederate_authentication_policies.go index 9763c97f..9759f12f 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_policies.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_policies.go @@ -22,13 +22,16 @@ func AuthenticationPolicies(clientInfo *connector.PingFederateClientInfo) *PingF } } +func (r *PingFederateAuthenticationPoliciesResource) ResourceType() string { + return "pingfederate_authentication_policies" +} + func (r *PingFederateAuthenticationPoliciesResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - authnPoliciesId := "authentication_policies_singleton_id" authnPoliciesName := "Authentication Policies" @@ -37,16 +40,14 @@ func (r *PingFederateAuthenticationPoliciesResource) ExportAll() (*[]connector.I "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: authnPoliciesName, ResourceID: authnPoliciesId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateAuthenticationPoliciesResource) ResourceType() string { - return "pingfederate_authentication_policies" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_policies_fragment.go b/internal/connector/pingfederate/resources/pingfederate_authentication_policies_fragment.go index b83d5f3b..bb59aa65 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_policies_fragment.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_policies_fragment.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func AuthenticationPoliciesFragment(clientInfo *connector.PingFederateClientInfo } } +func (r *PingFederateAuthenticationPoliciesFragmentResource) ResourceType() string { + return "pingfederate_authentication_policies_fragment" +} + func (r *PingFederateAuthenticationPoliciesFragmentResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + fragmentData, err := r.getFragmentData() + if err != nil { + return nil, err + } + + 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(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fragmentName, + ResourceID: fragmentId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.AuthenticationPoliciesAPI.GetFragments(r.clientInfo.Context).Execute - apiFunctionName := "GetFragments" + importBlocks = append(importBlocks, importBlock) + } - authnPoliciesFragments, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateAuthenticationPoliciesFragmentResource) getFragmentData() (*map[string]string, error) { + fragmentData := make(map[string]string) + + authnPoliciesFragments, response, err := r.clientInfo.ApiClient.AuthenticationPoliciesAPI.GetFragments(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetFragments", r.ResourceType()) if err != nil { return nil, err } if authnPoliciesFragments == nil { - l.Error().Msgf("Returned %s() authnPoliciesFragments is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - authnPoliciesFragmentsItems, ok := authnPoliciesFragments.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() authnPoliciesFragment items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + authnPoliciesFragmentsItems, authnPoliciesFragmentsItemsOk := authnPoliciesFragments.GetItemsOk() + if !authnPoliciesFragmentsItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, authnPoliciesFragment := range authnPoliciesFragmentsItems { authnPoliciesFragmentId, authnPoliciesFragmentIdOk := authnPoliciesFragment.GetIdOk() authnPoliciesFragmentName, authnPoliciesFragmentNameOk := authnPoliciesFragment.GetNameOk() if authnPoliciesFragmentIdOk && authnPoliciesFragmentNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authentication Policies Fragment Resource ID": *authnPoliciesFragmentId, - "Authentication Policies Fragment Resource Name": *authnPoliciesFragmentName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authnPoliciesFragmentName, - ResourceID: *authnPoliciesFragmentId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + fragmentData[*authnPoliciesFragmentId] = *authnPoliciesFragmentName } } - return &importBlocks, nil -} - -func (r *PingFederateAuthenticationPoliciesFragmentResource) ResourceType() string { - return "pingfederate_authentication_policies_fragment" + return &fragmentData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_policies_settings.go b/internal/connector/pingfederate/resources/pingfederate_authentication_policies_settings.go index b85c3288..d551199b 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_policies_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_policies_settings.go @@ -22,13 +22,16 @@ func AuthenticationPoliciesSettings(clientInfo *connector.PingFederateClientInfo } } +func (r *PingFederateAuthenticationPoliciesSettingsResource) ResourceType() string { + return "pingfederate_authentication_policies_settings" +} + func (r *PingFederateAuthenticationPoliciesSettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - authnPoliciesSettingsId := "authentication_policies_settings_singleton_id" authnPoliciesSettingsName := "Authentication Policies Settings" @@ -37,16 +40,14 @@ func (r *PingFederateAuthenticationPoliciesSettingsResource) ExportAll() (*[]con "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: authnPoliciesSettingsName, ResourceID: authnPoliciesSettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateAuthenticationPoliciesSettingsResource) ResourceType() string { - return "pingfederate_authentication_policies_settings" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_policy_contract.go b/internal/connector/pingfederate/resources/pingfederate_authentication_policy_contract.go index a22af855..63fc547f 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_policy_contract.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_policy_contract.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func AuthenticationPolicyContract(clientInfo *connector.PingFederateClientInfo) } } +func (r *PingFederateAuthenticationPolicyContractResource) ResourceType() string { + return "pingfederate_authentication_policy_contract" +} + func (r *PingFederateAuthenticationPolicyContractResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + authenticationPolicyContractData, err := r.getAuthenticationPolicyContractData() + if err != nil { + return nil, err + } + + 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(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: authnPolicyContractName, + ResourceID: authnPolicyContractId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.AuthenticationPolicyContractsAPI.GetAuthenticationPolicyContracts(r.clientInfo.Context).Execute - apiFunctionName := "GetAuthenticationPolicyContracts" + importBlocks = append(importBlocks, importBlock) + } - authnPolicyContracts, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateAuthenticationPolicyContractResource) getAuthenticationPolicyContractData() (*map[string]string, error) { + authenticationPolicyContractData := make(map[string]string) + + authnPolicyContracts, response, err := r.clientInfo.ApiClient.AuthenticationPolicyContractsAPI.GetAuthenticationPolicyContracts(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetAuthenticationPolicyContracts", r.ResourceType()) if err != nil { return nil, err } if authnPolicyContracts == nil { - l.Error().Msgf("Returned %s() authnPolicyContracts is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - authnPolicyContractsItems, ok := authnPolicyContracts.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() authnPolicyContracts items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + authnPolicyContractsItems, authnPolicyContractsItemsOk := authnPolicyContracts.GetItemsOk() + if !authnPolicyContractsItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, authnPolicyContract := range authnPolicyContractsItems { authnPolicyContractId, authnPolicyContractIdOk := authnPolicyContract.GetIdOk() authnPolicyContractName, authnPolicyContractNameOk := authnPolicyContract.GetNameOk() if authnPolicyContractIdOk && authnPolicyContractNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authentication Policy Contract Resource ID": *authnPolicyContractId, - "Authentication Policy Contract Resource Name": *authnPolicyContractName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authnPolicyContractName, - ResourceID: *authnPolicyContractId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + authenticationPolicyContractData[*authnPolicyContractId] = *authnPolicyContractName } } - return &importBlocks, nil -} - -func (r *PingFederateAuthenticationPolicyContractResource) ResourceType() string { - return "pingfederate_authentication_policy_contract" + return &authenticationPolicyContractData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_authentication_selector.go b/internal/connector/pingfederate/resources/pingfederate_authentication_selector.go index e2a21500..8c135e1e 100644 --- a/internal/connector/pingfederate/resources/pingfederate_authentication_selector.go +++ b/internal/connector/pingfederate/resources/pingfederate_authentication_selector.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func AuthenticationSelector(clientInfo *connector.PingFederateClientInfo) *PingF } } +func (r *PingFederateAuthenticationSelectorResource) ResourceType() string { + return "pingfederate_authentication_selector" +} + func (r *PingFederateAuthenticationSelectorResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + authenticationSelectorData, err := r.getAuthenticationSelectorData() + if err != nil { + return nil, err + } + + for authnSelectorId, authnSelectorName := range *authenticationSelectorData { + commentData := map[string]string{ + "Authentication Selector Resource ID": authnSelectorId, + "Authentication Selector Resource Name": authnSelectorName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: authnSelectorName, + ResourceID: authnSelectorId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.AuthenticationSelectorsAPI.GetAuthenticationSelectors(r.clientInfo.Context).Execute - apiFunctionName := "GetAuthenticationSelectors" + importBlocks = append(importBlocks, importBlock) + } - authnSelectors, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateAuthenticationSelectorResource) getAuthenticationSelectorData() (*map[string]string, error) { + authenticationSelectorData := make(map[string]string) + + authnSelectors, response, err := r.clientInfo.ApiClient.AuthenticationSelectorsAPI.GetAuthenticationSelectors(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetAuthenticationSelectors", r.ResourceType()) if err != nil { return nil, err } if authnSelectors == nil { - l.Error().Msgf("Returned %s() authnSelectors is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - authnSelectorsItems, ok := authnSelectors.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() authnSelectors items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + authnSelectorsItems, authnSelectorsItemsOk := authnSelectors.GetItemsOk() + if !authnSelectorsItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, authnSelector := range authnSelectorsItems { authnSelectorId, authnSelectorIdOk := authnSelector.GetIdOk() authnSelectorName, authnSelectorNameOk := authnSelector.GetNameOk() if authnSelectorIdOk && authnSelectorNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authentication Selector Resource ID": *authnSelectorId, - "Authentication Selector Resource Name": *authnSelectorName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authnSelectorName, - ResourceID: *authnSelectorId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + authenticationSelectorData[*authnSelectorId] = *authnSelectorName } } - return &importBlocks, nil -} - -func (r *PingFederateAuthenticationSelectorResource) ResourceType() string { - return "pingfederate_authentication_selector" + return &authenticationSelectorData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_captcha_provider.go b/internal/connector/pingfederate/resources/pingfederate_captcha_provider.go new file mode 100644 index 00000000..3774e56d --- /dev/null +++ b/internal/connector/pingfederate/resources/pingfederate_captcha_provider.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 = &PingFederateCaptchaProviderResource{} +) + +type PingFederateCaptchaProviderResource struct { + clientInfo *connector.PingFederateClientInfo +} + +// Utility method for creating a PingFederateCaptchaProviderResource +func CaptchaProvider(clientInfo *connector.PingFederateClientInfo) *PingFederateCaptchaProviderResource { + return &PingFederateCaptchaProviderResource{ + clientInfo: clientInfo, + } +} + +func (r *PingFederateCaptchaProviderResource) ResourceType() string { + return "pingfederate_captcha_provider" +} + +func (r *PingFederateCaptchaProviderResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + captchaProviderData, err := r.getCaptchaProviderData() + if err != nil { + return nil, err + } + + for captchaProviderId, captchaProviderName := range *captchaProviderData { + commentData := map[string]string{ + "Captcha Provider Resource ID": captchaProviderId, + "Captcha Provider Resource Name": captchaProviderId, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: captchaProviderName, + ResourceID: captchaProviderId, + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } + + return &importBlocks, nil +} + +func (r *PingFederateCaptchaProviderResource) getCaptchaProviderData() (*map[string]string, error) { + captchaProviderData := make(map[string]string) + + captchaProviders, response, err := r.clientInfo.ApiClient.CaptchaProvidersAPI.GetCaptchaProviders(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetCaptchaProviders", r.ResourceType()) + if err != nil { + return nil, err + } + + if captchaProviders == nil { + return nil, common.DataNilError(r.ResourceType(), response) + } + + captchaProvidersItems, captchaProvidersItemsOk := captchaProviders.GetItemsOk() + if !captchaProvidersItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) + } + + for _, captchaProvider := range captchaProvidersItems { + captchaProviderId, captchaProviderIdOk := captchaProvider.GetIdOk() + captchaProviderName, captchaProviderNameOk := captchaProvider.GetNameOk() + + if captchaProviderIdOk && captchaProviderNameOk { + captchaProviderData[*captchaProviderId] = *captchaProviderName + } + } + + return &captchaProviderData, nil +} diff --git a/internal/connector/pingfederate/resources/pingfederate_captcha_provider_test.go b/internal/connector/pingfederate/resources/pingfederate_captcha_provider_test.go new file mode 100644 index 00000000..55d9b6ee --- /dev/null +++ b/internal/connector/pingfederate/resources/pingfederate_captcha_provider_test.go @@ -0,0 +1,31 @@ +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 TestPingFederateCaptchaProviderExport(t *testing.T) { + // Get initialized apiClient and resource + PingFederateClientInfo := testutils.GetPingFederateClientInfo(t) + resource := resources.CaptchaProvider(PingFederateClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingfederate_captcha_provider", + ResourceName: "exampleCaptchaProviderV2", + ResourceID: "exampleCaptchaProviderV2", + }, + { + ResourceType: "pingfederate_captcha_provider", + ResourceName: "exampleCaptchaProvider", + ResourceID: "exampleCaptchaProvider", + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingfederate/resources/pingfederate_certificate_ca.go b/internal/connector/pingfederate/resources/pingfederate_certificate_ca.go index e8ed4ee4..16280cb1 100644 --- a/internal/connector/pingfederate/resources/pingfederate_certificate_ca.go +++ b/internal/connector/pingfederate/resources/pingfederate_certificate_ca.go @@ -24,63 +24,72 @@ func CertificateCA(clientInfo *connector.PingFederateClientInfo) *PingFederateCe } } +func (r *PingFederateCertificateCAResource) ResourceType() string { + return "pingfederate_certificate_ca" +} + func (r *PingFederateCertificateCAResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + trustedCAData, err := r.getTrustedCAData() + if err != nil { + return nil, err + } + + for certViewId, certViewInfo := range *trustedCAData { + certViewIssuerDN := certViewInfo[0] + certViewSerialNumber := certViewInfo[1] + + commentData := map[string]string{ + "Certificate CA Issuer DN": certViewIssuerDN, + "Certificate CA Resource ID": certViewId, + "Certificate CA Serial Number": certViewSerialNumber, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", certViewIssuerDN, certViewSerialNumber), + ResourceID: certViewId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.CertificatesCaAPI.GetTrustedCAs(r.clientInfo.Context).Execute - apiFunctionName := "GetTrustedCAs" + importBlocks = append(importBlocks, importBlock) + } - certViews, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateCertificateCAResource) getTrustedCAData() (*map[string][]string, error) { + trustedCAData := make(map[string][]string) + + certViews, response, err := r.clientInfo.ApiClient.CertificatesCaAPI.GetTrustedCAs(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetTrustedCAs", r.ResourceType()) if err != nil { return nil, err } if certViews == nil { - l.Error().Msgf("Returned %s() certViews is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } certViewsItems, ok := certViews.GetItemsOk() if !ok { - l.Error().Msgf("Failed to get %s() certViews items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, certView := range certViewsItems { certViewId, certViewIdOk := certView.GetIdOk() certViewIssuerDN, certViewIssuerDNOk := certView.GetIssuerDNOk() certViewSerialNumber, certViewSerialNumberOk := certView.GetSerialNumberOk() if certViewIdOk && certViewIssuerDNOk && certViewSerialNumberOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Certificate CA Resource ID": *certViewId, - "Certificate CA Issuer DN": *certViewIssuerDN, - "Certificate CA Serial Number": *certViewSerialNumber, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_%s", *certViewIssuerDN, *certViewSerialNumber), - ResourceID: *certViewId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + trustedCAData[*certViewId] = []string{*certViewIssuerDN, *certViewSerialNumber} } } - return &importBlocks, nil -} - -func (r *PingFederateCertificateCAResource) ResourceType() string { - return "pingfederate_certificate_ca" + return &trustedCAData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_data_store.go b/internal/connector/pingfederate/resources/pingfederate_data_store.go index fb984520..3a45507c 100644 --- a/internal/connector/pingfederate/resources/pingfederate_data_store.go +++ b/internal/connector/pingfederate/resources/pingfederate_data_store.go @@ -24,61 +24,67 @@ func DataStore(clientInfo *connector.PingFederateClientInfo) *PingFederateDataSt } } +func (r *PingFederateDataStoreResource) ResourceType() string { + return "pingfederate_data_store" +} + func (r *PingFederateDataStoreResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlocks := []connector.ImportBlock{} - apiExecuteFunc := r.clientInfo.ApiClient.DataStoresAPI.GetDataStores(r.clientInfo.Context).Execute - apiFunctionName := "GetDataStores" + dataStoreData, err := r.getDataStoreData() + if err != nil { + return nil, err + } + + for dataStoreId, dataStoreType := range *dataStoreData { + commentData := map[string]string{ + "Data Store Resource ID": dataStoreId, + "Data Store Type": dataStoreType, + "Resource Type": r.ResourceType(), + } - dataStores, response, err := apiExecuteFunc() + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", dataStoreId, dataStoreType), + ResourceID: dataStoreId, + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) + return &importBlocks, nil +} + +func (r *PingFederateDataStoreResource) getDataStoreData() (*map[string]string, error) { + dataStoreData := make(map[string]string) + + dataStores, response, err := r.clientInfo.ApiClient.DataStoresAPI.GetDataStores(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetDataStores", r.ResourceType()) if err != nil { return nil, err } if dataStores == nil { - l.Error().Msgf("Returned %s() dataStores is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } dataStoresItems, ok := dataStores.GetItemsOk() if !ok { - l.Error().Msgf("Failed to get %s() dataStores items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, dataStore := range dataStoresItems { dataStoreId, dataStoreIdOk := dataStore.GetIdOk() dataStoreType, dataStoreTypeOk := dataStore.GetTypeOk() if dataStoreIdOk && dataStoreTypeOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Data Store Resource ID": *dataStoreId, - "Data Store Type": *dataStoreType, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_%s", *dataStoreId, *dataStoreType), - ResourceID: *dataStoreId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + dataStoreData[*dataStoreId] = *dataStoreType } } - return &importBlocks, nil -} - -func (r *PingFederateDataStoreResource) ResourceType() string { - return "pingfederate_data_store" + return &dataStoreData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_default_urls.go b/internal/connector/pingfederate/resources/pingfederate_default_urls.go index 7cc1bf71..44577828 100644 --- a/internal/connector/pingfederate/resources/pingfederate_default_urls.go +++ b/internal/connector/pingfederate/resources/pingfederate_default_urls.go @@ -22,13 +22,16 @@ func DefaultURLs(clientInfo *connector.PingFederateClientInfo) *PingFederateDefa } } +func (r *PingFederateDefaultURLsResource) ResourceType() string { + return "pingfederate_default_urls" +} + func (r *PingFederateDefaultURLsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - defaultURLsId := "default_urls_singleton_id" defaultURLsName := "Default URLs" @@ -37,16 +40,14 @@ func (r *PingFederateDefaultURLsResource) ExportAll() (*[]connector.ImportBlock, "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: defaultURLsName, ResourceID: defaultURLsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateDefaultURLsResource) ResourceType() string { - return "pingfederate_default_urls" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_extended_properties.go b/internal/connector/pingfederate/resources/pingfederate_extended_properties.go index f95d1cda..8e7b8f2a 100644 --- a/internal/connector/pingfederate/resources/pingfederate_extended_properties.go +++ b/internal/connector/pingfederate/resources/pingfederate_extended_properties.go @@ -22,13 +22,16 @@ func ExtendedProperties(clientInfo *connector.PingFederateClientInfo) *PingFeder } } +func (r *PingFederateExtendedPropertiesResource) ResourceType() string { + return "pingfederate_extended_properties" +} + func (r *PingFederateExtendedPropertiesResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - extendedPropertiesId := "extended_properties_singleton_id" extendedPropertiesName := "Extended Properties" @@ -37,16 +40,14 @@ func (r *PingFederateExtendedPropertiesResource) ExportAll() (*[]connector.Impor "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: extendedPropertiesName, ResourceID: extendedPropertiesId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateExtendedPropertiesResource) ResourceType() string { - return "pingfederate_extended_properties" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_idp_adapter.go b/internal/connector/pingfederate/resources/pingfederate_idp_adapter.go index baf1ba56..89d984b1 100644 --- a/internal/connector/pingfederate/resources/pingfederate_idp_adapter.go +++ b/internal/connector/pingfederate/resources/pingfederate_idp_adapter.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func IDPAdapter(clientInfo *connector.PingFederateClientInfo) *PingFederateIDPAd } } +func (r *PingFederateIDPAdapterResource) ResourceType() string { + return "pingfederate_idp_adapter" +} + func (r *PingFederateIDPAdapterResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + idpAdapterData, err := r.getIDPAdapterData() + if err != nil { + return nil, err + } + + for idpAdapterId, idpAdapterName := range *idpAdapterData { + commentData := map[string]string{ + "IDP Adapter Resource ID": idpAdapterId, + "IDP Adapter Resource Name": idpAdapterName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: idpAdapterName, + ResourceID: idpAdapterId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.IdpAdaptersAPI.GetIdpAdapters(r.clientInfo.Context).Execute - apiFunctionName := "GetIdpAdapters" + importBlocks = append(importBlocks, importBlock) + } - idpAdapters, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateIDPAdapterResource) getIDPAdapterData() (*map[string]string, error) { + idpAdapterData := make(map[string]string) + + idpAdapters, response, err := r.clientInfo.ApiClient.IdpAdaptersAPI.GetIdpAdapters(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetIdpAdapters", r.ResourceType()) if err != nil { return nil, err } if idpAdapters == nil { - l.Error().Msgf("Returned %s() idpAdapters is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - idpAdaptersItems, ok := idpAdapters.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() idpAdapters items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + idpAdaptersItems, idpAdaptersItemsOk := idpAdapters.GetItemsOk() + if !idpAdaptersItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, idpAdapter := range idpAdaptersItems { idpAdapterId, idpAdapterIdOk := idpAdapter.GetIdOk() idpAdapterName, idpAdapterNameOk := idpAdapter.GetNameOk() if idpAdapterIdOk && idpAdapterNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "IDP Adapter Resource ID": *idpAdapterId, - "IDP Adapter Resource Name": *idpAdapterName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *idpAdapterName, - ResourceID: *idpAdapterId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + idpAdapterData[*idpAdapterId] = *idpAdapterName } } - return &importBlocks, nil -} - -func (r *PingFederateIDPAdapterResource) ResourceType() string { - return "pingfederate_idp_adapter" + return &idpAdapterData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_idp_sp_connection.go b/internal/connector/pingfederate/resources/pingfederate_idp_sp_connection.go index 11dbd1c3..145a56b9 100644 --- a/internal/connector/pingfederate/resources/pingfederate_idp_sp_connection.go +++ b/internal/connector/pingfederate/resources/pingfederate_idp_sp_connection.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func IDPSPConnection(clientInfo *connector.PingFederateClientInfo) *PingFederate } } +func (r *PingFederateIDPSPConnectionResource) ResourceType() string { + return "pingfederate_idp_sp_connection" +} + func (r *PingFederateIDPSPConnectionResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + spConnectionData, err := r.getSpConnectionData() + if err != nil { + return nil, err + } + + 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(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: spConnectionName, + ResourceID: spConnectionId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.IdpSpConnectionsAPI.GetSpConnections(r.clientInfo.Context).Execute - apiFunctionName := "GetSpConnections" + importBlocks = append(importBlocks, importBlock) + } - spConnections, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateIDPSPConnectionResource) getSpConnectionData() (*map[string]string, error) { + spConnectionData := make(map[string]string) + + spConnections, response, err := r.clientInfo.ApiClient.IdpSpConnectionsAPI.GetSpConnections(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetSpConnections", r.ResourceType()) if err != nil { return nil, err } if spConnections == nil { - l.Error().Msgf("Returned %s() spConnections is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - spConnectionsItems, ok := spConnections.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() spConnections items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + spConnectionsItems, spConnectionsItemsOk := spConnections.GetItemsOk() + if !spConnectionsItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, spConnection := range spConnectionsItems { spConnectionId, spConnectionIdOk := spConnection.GetIdOk() spConnectionName, spConnectionNameOk := spConnection.GetNameOk() if spConnectionIdOk && spConnectionNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "IDP SP Connection Resource ID": *spConnectionId, - "IDP SP Connection Resource Name": *spConnectionName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *spConnectionName, - ResourceID: *spConnectionId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + spConnectionData[*spConnectionId] = *spConnectionName } } - return &importBlocks, nil -} - -func (r *PingFederateIDPSPConnectionResource) ResourceType() string { - return "pingfederate_idp_sp_connection" + return &spConnectionData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_incoming_proxy_settings.go b/internal/connector/pingfederate/resources/pingfederate_incoming_proxy_settings.go index 02a12055..bfe59bf1 100644 --- a/internal/connector/pingfederate/resources/pingfederate_incoming_proxy_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_incoming_proxy_settings.go @@ -22,13 +22,16 @@ func IncomingProxySettings(clientInfo *connector.PingFederateClientInfo) *PingFe } } +func (r *PingFederateIncomingProxySettingsResource) ResourceType() string { + return "pingfederate_incoming_proxy_settings" +} + func (r *PingFederateIncomingProxySettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - incomingProxySettingsId := "incoming_proxy_settings_singleton_id" incomingProxySettingsName := "Incoming Proxy Settings" @@ -37,16 +40,14 @@ func (r *PingFederateIncomingProxySettingsResource) ExportAll() (*[]connector.Im "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: incomingProxySettingsName, ResourceID: incomingProxySettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateIncomingProxySettingsResource) ResourceType() string { - return "pingfederate_incoming_proxy_settings" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_kerberos_realm.go b/internal/connector/pingfederate/resources/pingfederate_kerberos_realm.go index b90e689d..f48b3db1 100644 --- a/internal/connector/pingfederate/resources/pingfederate_kerberos_realm.go +++ b/internal/connector/pingfederate/resources/pingfederate_kerberos_realm.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func KerberosRealm(clientInfo *connector.PingFederateClientInfo) *PingFederateKe } } +func (r *PingFederateKerberosRealmResource) ResourceType() string { + return "pingfederate_kerberos_realm" +} + func (r *PingFederateKerberosRealmResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + kerberosRealmData, err := r.getKerberosRealmData() + if err != nil { + return nil, err + } + + for kerberosRealmId, kerberosRealmName := range *kerberosRealmData { + commentData := map[string]string{ + "Kerberos Realm Resource ID": kerberosRealmId, + "Kerberos Realm Resource Name": kerberosRealmName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: kerberosRealmName, + ResourceID: kerberosRealmId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.KerberosRealmsAPI.GetKerberosRealms(r.clientInfo.Context).Execute - apiFunctionName := "GetKerberosRealms" + importBlocks = append(importBlocks, importBlock) + } - kerberosRealms, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateKerberosRealmResource) getKerberosRealmData() (*map[string]string, error) { + kerberosRealmData := make(map[string]string) + + kerberosRealms, response, err := r.clientInfo.ApiClient.KerberosRealmsAPI.GetKerberosRealms(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetKerberosRealms", r.ResourceType()) if err != nil { return nil, err } if kerberosRealms == nil { - l.Error().Msgf("Returned %s() kerberosRealms is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } kerberosRealmsItems, ok := kerberosRealms.GetItemsOk() if !ok { - l.Error().Msgf("Failed to get %s() kerberosRealms items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, kerberosRealm := range kerberosRealmsItems { kerberosRealmId, kerberosRealmIdOk := kerberosRealm.GetIdOk() kerberosRealmName, kerberosRealmNameOk := kerberosRealm.GetKerberosRealmNameOk() if kerberosRealmIdOk && kerberosRealmNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Kerberos Realm Resource ID": *kerberosRealmId, - "Kerberos Realm Resource Name": *kerberosRealmName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *kerberosRealmName, - ResourceID: *kerberosRealmId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + kerberosRealmData[*kerberosRealmId] = *kerberosRealmName } } - return &importBlocks, nil -} - -func (r *PingFederateKerberosRealmResource) ResourceType() string { - return "pingfederate_kerberos_realm" + return &kerberosRealmData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_local_identity_profile.go b/internal/connector/pingfederate/resources/pingfederate_local_identity_profile.go index ec0797ff..252179e8 100644 --- a/internal/connector/pingfederate/resources/pingfederate_local_identity_profile.go +++ b/internal/connector/pingfederate/resources/pingfederate_local_identity_profile.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func LocalIdentityProfile(clientInfo *connector.PingFederateClientInfo) *PingFed } } +func (r *PingFederateLocalIdentityProfileResource) ResourceType() string { + return "pingfederate_local_identity_profile" +} + func (r *PingFederateLocalIdentityProfileResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + identityProfileData, err := r.getIdentityProfileData() + if err != nil { + return nil, err + } + + 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(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: identityProfileName, + ResourceID: identityProfileId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlocks = append(importBlocks, importBlock) + } - apiExecuteFunc := r.clientInfo.ApiClient.LocalIdentityIdentityProfilesAPI.GetIdentityProfiles(r.clientInfo.Context).Execute - apiFunctionName := "GetIdentityProfiles" + return &importBlocks, nil +} - localIdentityProfiles, response, err := apiExecuteFunc() +func (r *PingFederateLocalIdentityProfileResource) getIdentityProfileData() (*map[string]string, error) { + identityProfileData := make(map[string]string) - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) + identityProfiles, response, err := r.clientInfo.ApiClient.LocalIdentityIdentityProfilesAPI.GetIdentityProfiles(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetIdentityProfiles", r.ResourceType()) if err != nil { return nil, err } - if localIdentityProfiles == nil { - l.Error().Msgf("Returned %s() localIdentityProfiles is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + if identityProfiles == nil { + return nil, common.DataNilError(r.ResourceType(), response) } - localIdentityProfilesItems, ok := localIdentityProfiles.GetItemsOk() + identityProfilesItems, ok := identityProfiles.GetItemsOk() if !ok { - l.Error().Msgf("Failed to get %s() localIdentityProfiles items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} + for _, identityProfile := range identityProfilesItems { + identityProfileId, identityProfileIdOk := identityProfile.GetIdOk() + identityProfileName, identityProfileNameOk := identityProfile.GetNameOk() - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, localIdentityProfile := range localIdentityProfilesItems { - localIdentityProfileId, localIdentityProfileIdOk := localIdentityProfile.GetIdOk() - localIdentityProfileName, localIdentityProfileNameOk := localIdentityProfile.GetNameOk() - - if localIdentityProfileIdOk && localIdentityProfileNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Local Identity Profile Resource ID": *localIdentityProfileId, - "Local Identity Profile Resource Name": *localIdentityProfileName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *localIdentityProfileName, - ResourceID: *localIdentityProfileId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + if identityProfileIdOk && identityProfileNameOk { + identityProfileData[*identityProfileId] = *identityProfileName } } - return &importBlocks, nil -} - -func (r *PingFederateLocalIdentityProfileResource) ResourceType() string { - return "pingfederate_local_identity_profile" + return &identityProfileData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_notification_publisher_settings.go b/internal/connector/pingfederate/resources/pingfederate_notification_publisher_settings.go index 043192c5..ed899fbb 100644 --- a/internal/connector/pingfederate/resources/pingfederate_notification_publisher_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_notification_publisher_settings.go @@ -22,13 +22,16 @@ func NotificationPublisherSettings(clientInfo *connector.PingFederateClientInfo) } } +func (r *PingFederateNotificationPublisherSettingsResource) ResourceType() string { + return "pingfederate_notification_publisher_settings" +} + func (r *PingFederateNotificationPublisherSettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - notificationPublisherSettingsId := "notification_publisher_settings_singleton_id" notificationPublisherSettingsName := "Notification Publisher Settings" @@ -37,16 +40,14 @@ func (r *PingFederateNotificationPublisherSettingsResource) ExportAll() (*[]conn "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: notificationPublisherSettingsName, ResourceID: notificationPublisherSettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateNotificationPublisherSettingsResource) ResourceType() string { - return "pingfederate_notification_publisher_settings" + return &importBlocks, nil } 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 c3f0eee2..add169f0 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_manager.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_manager.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func OAuthAccessTokenManager(clientInfo *connector.PingFederateClientInfo) *Ping } } +func (r *PingFederateOAuthAccessTokenManagerResource) ResourceType() string { + return "pingfederate_oauth_access_token_manager" +} + func (r *PingFederateOAuthAccessTokenManagerResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + tokenManagerData, err := r.getTokenManagerData() + if err != nil { + return nil, err + } + + 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(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: tokenManagerName, + ResourceID: tokenManagerId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlocks = append(importBlocks, importBlock) + } - apiExecuteFunc := r.clientInfo.ApiClient.OauthAccessTokenManagersAPI.GetTokenManagers(r.clientInfo.Context).Execute - apiFunctionName := "GetTokenManagers" + return &importBlocks, nil +} - accessTokenManagers, response, err := apiExecuteFunc() +func (r *PingFederateOAuthAccessTokenManagerResource) getTokenManagerData() (*map[string]string, error) { + tokenManagerData := make(map[string]string) - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) + tokenManagers, response, err := r.clientInfo.ApiClient.OauthAccessTokenManagersAPI.GetTokenManagers(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetTokenManagers", r.ResourceType()) if err != nil { return nil, err } - if accessTokenManagers == nil { - l.Error().Msgf("Returned %s() accessTokenManagers is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + if tokenManagers == nil { + return nil, common.DataNilError(r.ResourceType(), response) } - accessTokenManagersItems, ok := accessTokenManagers.GetItemsOk() + tokenManagersItems, ok := tokenManagers.GetItemsOk() if !ok { - l.Error().Msgf("Failed to get %s() accessTokenManagers items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} + for _, tokenManager := range tokenManagersItems { + tokenManagerId, tokenManagerIdOk := tokenManager.GetIdOk() + tokenManagerName, tokenManagerNameOk := tokenManager.GetNameOk() - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, accessTokenManager := range accessTokenManagersItems { - accessTokenManagerId, accessTokenManagerIdOk := accessTokenManager.GetIdOk() - accessTokenManagerName, accessTokenManagerNameOk := accessTokenManager.GetNameOk() - - if accessTokenManagerIdOk && accessTokenManagerNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "OAuth Access Token Manager Resource ID": *accessTokenManagerId, - "OAuth Access Token Manager Resource Name": *accessTokenManagerName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *accessTokenManagerName, - ResourceID: *accessTokenManagerId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + if tokenManagerIdOk && tokenManagerNameOk { + tokenManagerData[*tokenManagerId] = *tokenManagerName } } - return &importBlocks, nil -} - -func (r *PingFederateOAuthAccessTokenManagerResource) ResourceType() string { - return "pingfederate_oauth_access_token_manager" + return &tokenManagerData, nil } 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 f71f6208..ea512d0c 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_mapping.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_access_token_mapping.go @@ -24,61 +24,62 @@ func OAuthAccessTokenMapping(clientInfo *connector.PingFederateClientInfo) *Ping } } +func (r *PingFederateOAuthAccessTokenMappingResource) ResourceType() string { + return "pingfederate_oauth_access_token_mapping" +} + func (r *PingFederateOAuthAccessTokenMappingResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) - - apiExecuteFunc := r.clientInfo.ApiClient.OauthAccessTokenMappingsAPI.GetMappings(r.clientInfo.Context).Execute - apiFunctionName := "GetMappings" - - accessTokenMappings, response, err := apiExecuteFunc() + importBlocks := []connector.ImportBlock{} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) + mappingData, err := r.getMappingData() if err != nil { return nil, err } - if accessTokenMappings == nil { - l.Error().Msgf("Returned %s() accessTokenMappings is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) - } - - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, accessTokenMapping := range accessTokenMappings { - accessTokenMappingId, accessTokenMappingIdOk := accessTokenMapping.GetIdOk() - accessTokenMappingContext, accessTokenMappingContextOk := accessTokenMapping.GetContextOk() - var ( - accessTokenMappingContextType *string - accessTokenMappingContextTypeOk bool - ) - if accessTokenMappingContextOk { - accessTokenMappingContextType, accessTokenMappingContextTypeOk = accessTokenMappingContext.GetTypeOk() + for mappingId, mappingContextType := range *mappingData { + commentData := map[string]string{ + "OAuth Access Token Mapping Resource ID": mappingId, + "OAuth Access Token Mapping Context Type": mappingContextType, + "Resource Type": r.ResourceType(), } - if accessTokenMappingIdOk && accessTokenMappingContextOk && accessTokenMappingContextTypeOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "OAuth Access Token Mapping Resource ID": *accessTokenMappingId, - "OAuth Access Token Mapping Context Type": *accessTokenMappingContextType, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_%s", *accessTokenMappingId, *accessTokenMappingContextType), - ResourceID: *accessTokenMappingId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", mappingId, mappingContextType), + ResourceID: mappingId, + CommentInformation: common.GenerateCommentInformation(commentData), } + + importBlocks = append(importBlocks, importBlock) } return &importBlocks, nil } -func (r *PingFederateOAuthAccessTokenMappingResource) ResourceType() string { - return "pingfederate_oauth_access_token_mapping" +func (r *PingFederateOAuthAccessTokenMappingResource) getMappingData() (*map[string]string, error) { + mappingData := make(map[string]string) + + mappings, response, err := r.clientInfo.ApiClient.OauthAccessTokenMappingsAPI.GetMappings(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetMappings", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, mapping := range mappings { + mappingId, mappingIdOk := mapping.GetIdOk() + mappingContext, mappingContextOk := mapping.GetContextOk() + + if mappingIdOk && mappingContextOk { + mappingContextType, mappingContextTypeOk := mappingContext.GetTypeOk() + + if mappingContextTypeOk { + mappingData[*mappingId] = *mappingContextType + } + } + } + + return &mappingData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_oauth_ciba_server_policy_settings.go b/internal/connector/pingfederate/resources/pingfederate_oauth_ciba_server_policy_settings.go index 5acbfe67..93d373c5 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_ciba_server_policy_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_ciba_server_policy_settings.go @@ -22,13 +22,16 @@ func OAuthCIBAServerPolicySettings(clientInfo *connector.PingFederateClientInfo) } } +func (r *PingFederateOAuthCIBAServerPolicySettingsResource) ResourceType() string { + return "pingfederate_oauth_ciba_server_policy_settings" +} + func (r *PingFederateOAuthCIBAServerPolicySettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - oAuthCIBAServerPolicySettingsId := "oauth_ciba_server_policy_settings_singleton_id" oAuthCIBAServerPolicySettingsName := "OAuth CIBA Server Policy Settings" @@ -37,16 +40,14 @@ func (r *PingFederateOAuthCIBAServerPolicySettingsResource) ExportAll() (*[]conn "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: oAuthCIBAServerPolicySettingsName, ResourceID: oAuthCIBAServerPolicySettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateOAuthCIBAServerPolicySettingsResource) ResourceType() string { - return "pingfederate_oauth_ciba_server_policy_settings" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_oauth_client.go b/internal/connector/pingfederate/resources/pingfederate_oauth_client.go index 752080ec..7ebf4847 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_client.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_client.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func OAuthClient(clientInfo *connector.PingFederateClientInfo) *PingFederateOAut } } +func (r *PingFederateOAuthClientResource) ResourceType() string { + return "pingfederate_oauth_client" +} + func (r *PingFederateOAuthClientResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + oauthClientData, err := r.getOAuthClientData() + if err != nil { + return nil, err + } + + for oauthClientId, oauthClientName := range *oauthClientData { + commentData := map[string]string{ + "OAuth Client Resource ID": oauthClientId, + "OAuth Client Resource Name": oauthClientName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: oauthClientName, + ResourceID: oauthClientId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.OauthClientsAPI.GetOauthClients(r.clientInfo.Context).Execute - apiFunctionName := "GetOauthClients" + importBlocks = append(importBlocks, importBlock) + } - clients, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateOAuthClientResource) getOAuthClientData() (*map[string]string, error) { + oauthClientData := make(map[string]string) + + clients, response, err := r.clientInfo.ApiClient.OauthClientsAPI.GetOauthClients(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetOauthClients", r.ResourceType()) if err != nil { return nil, err } if clients == nil { - l.Error().Msgf("Returned %s() clients is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } clientsItems, ok := clients.GetItemsOk() if !ok { - l.Error().Msgf("Failed to get %s() clients items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, client := range clientsItems { clientId, clientIdOk := client.GetClientIdOk() clientName, clientNameOk := client.GetNameOk() if clientIdOk && clientNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "OAuth Client Resource ID": *clientId, - "OAuth Client Resource Name": *clientName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *clientName, - ResourceID: *clientId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + oauthClientData[*clientId] = *clientName } } - return &importBlocks, nil -} - -func (r *PingFederateOAuthClientResource) ResourceType() string { - return "pingfederate_oauth_client" + return &oauthClientData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_oauth_issuer.go b/internal/connector/pingfederate/resources/pingfederate_oauth_issuer.go index 79d51236..97127cca 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_issuer.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_issuer.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func OAuthIssuer(clientInfo *connector.PingFederateClientInfo) *PingFederateOAut } } +func (r *PingFederateOAuthIssuerResource) ResourceType() string { + return "pingfederate_oauth_issuer" +} + func (r *PingFederateOAuthIssuerResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + oauthIssuerData, err := r.getOAuthIssuerData() + if err != nil { + return nil, err + } + + for oauthIssuerId, oauthIssuerName := range *oauthIssuerData { + commentData := map[string]string{ + "OAuth Issuer Resource ID": oauthIssuerId, + "OAuth Issuer Resource Name": oauthIssuerName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: oauthIssuerName, + ResourceID: oauthIssuerId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.OauthIssuersAPI.GetOauthIssuers(r.clientInfo.Context).Execute - apiFunctionName := "GetOauthIssuers" + importBlocks = append(importBlocks, importBlock) + } - issuers, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateOAuthIssuerResource) getOAuthIssuerData() (*map[string]string, error) { + issuerData := make(map[string]string) + + issuers, response, err := r.clientInfo.ApiClient.OauthIssuersAPI.GetOauthIssuers(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetOauthIssuers", r.ResourceType()) if err != nil { return nil, err } if issuers == nil { - l.Error().Msgf("Returned %s() issuers is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - issuersItems, ok := issuers.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() issuers items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + issuersItems, issuersItemsOk := issuers.GetItemsOk() + if !issuersItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, issuer := range issuersItems { issuerId, issuerIdOk := issuer.GetIdOk() issuerName, issuerNameOk := issuer.GetNameOk() if issuerIdOk && issuerNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "OAuth Issuer Resource ID": *issuerId, - "OAuth Issuer Resource Name": *issuerName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *issuerName, - ResourceID: *issuerId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + issuerData[*issuerId] = *issuerName } } - return &importBlocks, nil -} - -func (r *PingFederateOAuthIssuerResource) ResourceType() string { - return "pingfederate_oauth_issuer" + return &issuerData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_oauth_server_settings.go b/internal/connector/pingfederate/resources/pingfederate_oauth_server_settings.go index b42b146a..ee46cf1e 100644 --- a/internal/connector/pingfederate/resources/pingfederate_oauth_server_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_oauth_server_settings.go @@ -22,13 +22,16 @@ func OAuthServerSettings(clientInfo *connector.PingFederateClientInfo) *PingFede } } +func (r *PingFederateOAuthServerSettingsResource) ResourceType() string { + return "pingfederate_oauth_server_settings" +} + func (r *PingFederateOAuthServerSettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - oAuthServerSettingsId := "oauth_server_settings_singleton_id" oAuthServerSettingsName := "OAuth Server Settings" @@ -37,16 +40,14 @@ func (r *PingFederateOAuthServerSettingsResource) ExportAll() (*[]connector.Impo "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: oAuthServerSettingsName, ResourceID: oAuthServerSettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateOAuthServerSettingsResource) ResourceType() string { - return "pingfederate_oauth_server_settings" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_openid_connect_policy.go b/internal/connector/pingfederate/resources/pingfederate_openid_connect_policy.go index 149c618e..d6a3231d 100644 --- a/internal/connector/pingfederate/resources/pingfederate_openid_connect_policy.go +++ b/internal/connector/pingfederate/resources/pingfederate_openid_connect_policy.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func OpenIDConnectPolicy(clientInfo *connector.PingFederateClientInfo) *PingFede } } +func (r *PingFederateOpenIDConnectPolicyResource) ResourceType() string { + return "pingfederate_openid_connect_policy" +} + func (r *PingFederateOpenIDConnectPolicyResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + oidcPolicyData, err := r.getOIDCPolicyData() + if err != nil { + return nil, err + } + + 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(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: oidcPolicyName, + ResourceID: oidcPolicyId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlocks = append(importBlocks, importBlock) + } - apiExecuteFunc := r.clientInfo.ApiClient.OauthOpenIdConnectAPI.GetOIDCPolicies(r.clientInfo.Context).Execute - apiFunctionName := "GetOIDCPolicies" + return &importBlocks, nil +} - openIDConnectPolicies, response, err := apiExecuteFunc() +func (r *PingFederateOpenIDConnectPolicyResource) getOIDCPolicyData() (*map[string]string, error) { + oidcPolicyData := make(map[string]string) - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) + oidcPolicies, response, err := r.clientInfo.ApiClient.OauthOpenIdConnectAPI.GetOIDCPolicies(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetOIDCPolicies", r.ResourceType()) if err != nil { return nil, err } - if openIDConnectPolicies == nil { - l.Error().Msgf("Returned %s() openIDConnectPolicies is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + if oidcPolicies == nil { + return nil, common.DataNilError(r.ResourceType(), response) } - openIDConnectPoliciesItems, ok := openIDConnectPolicies.GetItemsOk() + oidcPoliciesItems, ok := oidcPolicies.GetItemsOk() if !ok { - l.Error().Msgf("Failed to get %s() openIDConnectPolicies items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} + for _, oidcPolicy := range oidcPoliciesItems { + oidcPolicyId, oidcPolicyIdOk := oidcPolicy.GetIdOk() + oidcPolicyName, oidcPolicyNameOk := oidcPolicy.GetNameOk() - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, openIDConnectPolicy := range openIDConnectPoliciesItems { - openIDConnectPolicyId, openIDConnectPolicyIdOk := openIDConnectPolicy.GetIdOk() - openIDConnectPolicyName, openIDConnectPolicyNameOk := openIDConnectPolicy.GetNameOk() - - if openIDConnectPolicyIdOk && openIDConnectPolicyNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "OpenID Connect Policy Resource ID": *openIDConnectPolicyId, - "OpenID Connect Policy Resource Name": *openIDConnectPolicyName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *openIDConnectPolicyName, - ResourceID: *openIDConnectPolicyId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + if oidcPolicyIdOk && oidcPolicyNameOk { + oidcPolicyData[*oidcPolicyId] = *oidcPolicyName } } - return &importBlocks, nil -} - -func (r *PingFederateOpenIDConnectPolicyResource) ResourceType() string { - return "pingfederate_openid_connect_policy" + return &oidcPolicyData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_openid_connect_settings.go b/internal/connector/pingfederate/resources/pingfederate_openid_connect_settings.go index 05b01c65..22f4fa0c 100644 --- a/internal/connector/pingfederate/resources/pingfederate_openid_connect_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_openid_connect_settings.go @@ -22,13 +22,16 @@ func OpenIDConnectSettings(clientInfo *connector.PingFederateClientInfo) *PingFe } } +func (r *PingFederateOpenIDConnectSettingsResource) ResourceType() string { + return "pingfederate_openid_connect_settings" +} + func (r *PingFederateOpenIDConnectSettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - openIDConnectSettingsId := "openid_connect_settings_singleton_id" openIDConnectSettingsName := "OpenID Connect Settings" @@ -37,16 +40,14 @@ func (r *PingFederateOpenIDConnectSettingsResource) ExportAll() (*[]connector.Im "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: openIDConnectSettingsName, ResourceID: openIDConnectSettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateOpenIDConnectSettingsResource) ResourceType() string { - return "pingfederate_openid_connect_settings" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_password_credential_validator.go b/internal/connector/pingfederate/resources/pingfederate_password_credential_validator.go index 6814b2f3..7f557bcb 100644 --- a/internal/connector/pingfederate/resources/pingfederate_password_credential_validator.go +++ b/internal/connector/pingfederate/resources/pingfederate_password_credential_validator.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func PasswordCredentialValidator(clientInfo *connector.PingFederateClientInfo) * } } +func (r *PingFederatePasswordCredentialValidatorResource) ResourceType() string { + return "pingfederate_password_credential_validator" +} + func (r *PingFederatePasswordCredentialValidatorResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + passwordCredentialValidatorData, err := r.getPasswordCredentialValidatorData() + if err != nil { + return nil, err + } + + 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(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: passwordCredentialValidatorName, + ResourceID: passwordCredentialValidatorId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.PasswordCredentialValidatorsAPI.GetPasswordCredentialValidators(r.clientInfo.Context).Execute - apiFunctionName := "GetPasswordCredentialValidators" + importBlocks = append(importBlocks, importBlock) + } - passwordCredentialValidators, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederatePasswordCredentialValidatorResource) getPasswordCredentialValidatorData() (*map[string]string, error) { + passwordCredentialValidatorData := make(map[string]string) + + passwordCredentialValidators, response, err := r.clientInfo.ApiClient.PasswordCredentialValidatorsAPI.GetPasswordCredentialValidators(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetPasswordCredentialValidators", r.ResourceType()) if err != nil { return nil, err } if passwordCredentialValidators == nil { - l.Error().Msgf("Returned %s() passwordCredentialValidators is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } passwordCredentialValidatorsItems, ok := passwordCredentialValidators.GetItemsOk() if !ok { - l.Error().Msgf("Failed to get %s() passwordCredentialValidators items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, passwordCredentialValidator := range passwordCredentialValidatorsItems { passwordCredentialValidatorId, passwordCredentialValidatorIdOk := passwordCredentialValidator.GetIdOk() passwordCredentialValidatorName, passwordCredentialValidatorNameOk := passwordCredentialValidator.GetNameOk() if passwordCredentialValidatorIdOk && passwordCredentialValidatorNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Password Credential Validator Resource ID": *passwordCredentialValidatorId, - "Password Credential Validator Resource Name": *passwordCredentialValidatorName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *passwordCredentialValidatorName, - ResourceID: *passwordCredentialValidatorId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + passwordCredentialValidatorData[*passwordCredentialValidatorId] = *passwordCredentialValidatorName } } - return &importBlocks, nil -} - -func (r *PingFederatePasswordCredentialValidatorResource) ResourceType() string { - return "pingfederate_password_credential_validator" + return &passwordCredentialValidatorData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_pingone_connection.go b/internal/connector/pingfederate/resources/pingfederate_pingone_connection.go index c751e7a1..9e10e444 100644 --- a/internal/connector/pingfederate/resources/pingfederate_pingone_connection.go +++ b/internal/connector/pingfederate/resources/pingfederate_pingone_connection.go @@ -1,8 +1,6 @@ package resources import ( - "fmt" - "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/logger" @@ -24,61 +22,67 @@ func PingOneConnection(clientInfo *connector.PingFederateClientInfo) *PingFedera } } +func (r *PingFederatePingOneConnectionResource) ResourceType() string { + return "pingfederate_pingone_connection" +} + func (r *PingFederatePingOneConnectionResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + pingoneConnectionData, err := r.getPingOneConnectionData() + if err != nil { + return nil, err + } + + for pingoneConnectionId, pingoneConnectionName := range *pingoneConnectionData { + commentData := map[string]string{ + "PingOne Connection Resource ID": pingoneConnectionId, + "PingOne Connection Resource Name": pingoneConnectionName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: pingoneConnectionName, + ResourceID: pingoneConnectionId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.PingOneConnectionsAPI.GetPingOneConnections(r.clientInfo.Context).Execute - apiFunctionName := "GetPingOneConnections" + importBlocks = append(importBlocks, importBlock) + } - pingoneConnections, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederatePingOneConnectionResource) getPingOneConnectionData() (*map[string]string, error) { + pingoneConnectionData := make(map[string]string) + + pingoneConnections, response, err := r.clientInfo.ApiClient.PingOneConnectionsAPI.GetPingOneConnections(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetPingOneConnections", r.ResourceType()) if err != nil { return nil, err } if pingoneConnections == nil { - l.Error().Msgf("Returned %s() pingoneConnections is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - pingoneConnectionsItems, ok := pingoneConnections.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() pingoneConnections items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + pingoneConnectionsItems, pingoneConnectionsItemsOk := pingoneConnections.GetItemsOk() + if !pingoneConnectionsItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, pingoneConnection := range pingoneConnectionsItems { pingoneConnectionId, pingoneConnectionIdOk := pingoneConnection.GetIdOk() pingoneConnectionName, pingoneConnectionNameOk := pingoneConnection.GetNameOk() if pingoneConnectionIdOk && pingoneConnectionNameOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "PingOne Connection Resource ID": *pingoneConnectionId, - "PingOne Connection Resource Name": *pingoneConnectionName, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *pingoneConnectionName, - ResourceID: *pingoneConnectionId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + pingoneConnectionData[*pingoneConnectionId] = *pingoneConnectionName } } - return &importBlocks, nil -} - -func (r *PingFederatePingOneConnectionResource) ResourceType() string { - return "pingfederate_pingone_connection" + return &pingoneConnectionData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_redirect_validation.go b/internal/connector/pingfederate/resources/pingfederate_redirect_validation.go index ae160566..e562bfdc 100644 --- a/internal/connector/pingfederate/resources/pingfederate_redirect_validation.go +++ b/internal/connector/pingfederate/resources/pingfederate_redirect_validation.go @@ -22,13 +22,16 @@ func RedirectValidation(clientInfo *connector.PingFederateClientInfo) *PingFeder } } +func (r *PingFederateRedirectValidationResource) ResourceType() string { + return "pingfederate_redirect_validation" +} + func (r *PingFederateRedirectValidationResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - redirectValidationId := "redirect_validation_singleton_id" redirectValidationName := "Redirect Validation" @@ -37,16 +40,14 @@ func (r *PingFederateRedirectValidationResource) ExportAll() (*[]connector.Impor "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: redirectValidationName, ResourceID: redirectValidationId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateRedirectValidationResource) ResourceType() string { - return "pingfederate_redirect_validation" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_server_settings.go b/internal/connector/pingfederate/resources/pingfederate_server_settings.go index 445349c1..e4a951ed 100644 --- a/internal/connector/pingfederate/resources/pingfederate_server_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_server_settings.go @@ -22,14 +22,17 @@ func ServerSettings(clientInfo *connector.PingFederateClientInfo) *PingFederateS } } +func (r *PingFederateServerSettingsResource) ResourceType() string { + return "pingfederate_server_settings" +} + func (r *PingFederateServerSettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - serverSettingsId := "server_settings_singleton_id" + serverSettingsId := "pingfederate_server_settings_singleton_id" serverSettingsName := "Server Settings" commentData := map[string]string{ @@ -37,16 +40,14 @@ func (r *PingFederateServerSettingsResource) ExportAll() (*[]connector.ImportBlo "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: serverSettingsName, ResourceID: serverSettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateServerSettingsResource) ResourceType() string { - return "pingfederate_server_settings" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_server_settings_general.go b/internal/connector/pingfederate/resources/pingfederate_server_settings_general.go index 8c71e672..0304318e 100644 --- a/internal/connector/pingfederate/resources/pingfederate_server_settings_general.go +++ b/internal/connector/pingfederate/resources/pingfederate_server_settings_general.go @@ -22,13 +22,16 @@ func ServerSettingsGeneral(clientInfo *connector.PingFederateClientInfo) *PingFe } } +func (r *PingFederateServerSettingsGeneralResource) ResourceType() string { + return "pingfederate_server_settings_general" +} + func (r *PingFederateServerSettingsGeneralResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - serverSettingsGeneralId := "pingfederate_server_settings_general_singleton_id" serverSettingsGeneralName := "Server Settings General" @@ -37,16 +40,14 @@ func (r *PingFederateServerSettingsGeneralResource) ExportAll() (*[]connector.Im "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: serverSettingsGeneralName, ResourceID: serverSettingsGeneralId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateServerSettingsGeneralResource) ResourceType() string { - return "pingfederate_server_settings_general" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_server_settings_system_keys_rotate.go b/internal/connector/pingfederate/resources/pingfederate_server_settings_system_keys_rotate.go index a35b30de..77e264bc 100644 --- a/internal/connector/pingfederate/resources/pingfederate_server_settings_system_keys_rotate.go +++ b/internal/connector/pingfederate/resources/pingfederate_server_settings_system_keys_rotate.go @@ -22,13 +22,16 @@ func ServerSettingsSystemKeysRotate(clientInfo *connector.PingFederateClientInfo } } +func (r *PingFederateServerSettingsSystemKeysRotateResource) ResourceType() string { + return "pingfederate_server_settings_system_keys_rotate" +} + func (r *PingFederateServerSettingsSystemKeysRotateResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - serverSettingsSystemKeysRotateId := "server_settings_system_keys_rotate_singleton_id" serverSettingsSystemKeysRotateName := "Server Settings System Keys Rotate" @@ -37,16 +40,14 @@ func (r *PingFederateServerSettingsSystemKeysRotateResource) ExportAll() (*[]con "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: serverSettingsSystemKeysRotateName, ResourceID: serverSettingsSystemKeysRotateId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateServerSettingsSystemKeysRotateResource) ResourceType() string { - return "pingfederate_server_settings_system_keys_rotate" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_server_settings_test.go b/internal/connector/pingfederate/resources/pingfederate_server_settings_test.go index dca0856d..de1f2d82 100644 --- a/internal/connector/pingfederate/resources/pingfederate_server_settings_test.go +++ b/internal/connector/pingfederate/resources/pingfederate_server_settings_test.go @@ -18,7 +18,7 @@ func TestPingFederateServerSettingsExport(t *testing.T) { { ResourceType: "pingfederate_server_settings", ResourceName: "Server Settings", - ResourceID: "server_settings_singleton_id", + ResourceID: "pingfederate_server_settings_singleton_id", }, } diff --git a/internal/connector/pingfederate/resources/pingfederate_session_application_policy.go b/internal/connector/pingfederate/resources/pingfederate_session_application_policy.go index 37839d7a..3769d8f0 100644 --- a/internal/connector/pingfederate/resources/pingfederate_session_application_policy.go +++ b/internal/connector/pingfederate/resources/pingfederate_session_application_policy.go @@ -22,13 +22,16 @@ func SessionApplicationPolicy(clientInfo *connector.PingFederateClientInfo) *Pin } } +func (r *PingFederateSessionApplicationPolicyResource) ResourceType() string { + return "pingfederate_session_application_policy" +} + func (r *PingFederateSessionApplicationPolicyResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - sessionApplicationPolicyId := "pingfederate_session_application_policy_singleton_id" sessionApplicationPolicyName := "Session Application Policy" @@ -37,16 +40,14 @@ func (r *PingFederateSessionApplicationPolicyResource) ExportAll() (*[]connector "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: sessionApplicationPolicyName, ResourceID: sessionApplicationPolicyId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateSessionApplicationPolicyResource) ResourceType() string { - return "pingfederate_session_application_policy" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_session_authentication_policies_global.go b/internal/connector/pingfederate/resources/pingfederate_session_authentication_policies_global.go index 7094ada9..3e4d8dea 100644 --- a/internal/connector/pingfederate/resources/pingfederate_session_authentication_policies_global.go +++ b/internal/connector/pingfederate/resources/pingfederate_session_authentication_policies_global.go @@ -22,13 +22,16 @@ func SessionAuthenticationPoliciesGlobal(clientInfo *connector.PingFederateClien } } +func (r *PingFederateSessionAuthenticationPoliciesGlobalResource) ResourceType() string { + return "pingfederate_session_authentication_policies_global" +} + func (r *PingFederateSessionAuthenticationPoliciesGlobalResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - sessionAuthenticationPoliciesGlobalId := "pingfederate_session_authentication_policies_global_singleton_id" sessionAuthenticationPoliciesGlobalName := "Session Authentication Policies Global" @@ -37,16 +40,14 @@ func (r *PingFederateSessionAuthenticationPoliciesGlobalResource) ExportAll() (* "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: sessionAuthenticationPoliciesGlobalName, ResourceID: sessionAuthenticationPoliciesGlobalId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateSessionAuthenticationPoliciesGlobalResource) ResourceType() string { - return "pingfederate_session_authentication_policies_global" + return &importBlocks, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_session_settings.go b/internal/connector/pingfederate/resources/pingfederate_session_settings.go index 5fc993ed..23283a30 100644 --- a/internal/connector/pingfederate/resources/pingfederate_session_settings.go +++ b/internal/connector/pingfederate/resources/pingfederate_session_settings.go @@ -22,13 +22,16 @@ func SessionSettings(clientInfo *connector.PingFederateClientInfo) *PingFederate } } +func (r *PingFederateSessionSettingsResource) ResourceType() string { + return "pingfederate_session_settings" +} + func (r *PingFederateSessionSettingsResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - sessionSettingsId := "session_settings_singleton_id" sessionSettingsName := "Session Settings" @@ -37,16 +40,14 @@ func (r *PingFederateSessionSettingsResource) ExportAll() (*[]connector.ImportBl "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: sessionSettingsName, ResourceID: sessionSettingsId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateSessionSettingsResource) ResourceType() string { - return "pingfederate_session_settings" + return &importBlocks, nil } 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 a70ab7f8..8a090def 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 @@ -24,63 +24,72 @@ func SPAuthenticationPolicyContractMapping(clientInfo *connector.PingFederateCli } } +func (r *PingFederateSPAuthenticationPolicyContractMappingResource) ResourceType() string { + return "pingfederate_sp_authentication_policy_contract_mapping" +} + func (r *PingFederateSPAuthenticationPolicyContractMappingResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + apcToSpAdapterMappingData, err := r.getApcToSpAdapterMappingData() + if err != nil { + return nil, err + } + + for apcToSpAdapterMappingId, apcToSpAdapterMappingInfo := range *apcToSpAdapterMappingData { + apcToSpAdapterMappingSourceID := apcToSpAdapterMappingInfo[0] + apcToSpAdapterMappingTargetID := apcToSpAdapterMappingInfo[1] + + 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, + } - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_to_%s", apcToSpAdapterMappingSourceID, apcToSpAdapterMappingTargetID), + ResourceID: apcToSpAdapterMappingId, + CommentInformation: common.GenerateCommentInformation(commentData), + } - apiExecuteFunc := r.clientInfo.ApiClient.SpAuthenticationPolicyContractMappingsAPI.GetApcToSpAdapterMappings(r.clientInfo.Context).Execute - apiFunctionName := "GetApcToSpAdapterMappings" + importBlocks = append(importBlocks, importBlock) + } - apcToSpAdapterMappings, response, err := apiExecuteFunc() + return &importBlocks, nil +} - err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType()) +func (r *PingFederateSPAuthenticationPolicyContractMappingResource) getApcToSpAdapterMappingData() (*map[string][]string, error) { + apcToSpAdapterMappingData := make(map[string][]string) + + apcToSpAdapterMappings, response, err := r.clientInfo.ApiClient.SpAuthenticationPolicyContractMappingsAPI.GetApcToSpAdapterMappings(r.clientInfo.Context).Execute() + err = common.HandleClientResponse(response, err, "GetApcToSpAdapterMappings", r.ResourceType()) if err != nil { return nil, err } if apcToSpAdapterMappings == nil { - l.Error().Msgf("Returned %s() apcToSpAdapterMappings is nil.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + return nil, common.DataNilError(r.ResourceType(), response) } - apcToSpAdapterMappingsItems, ok := apcToSpAdapterMappings.GetItemsOk() - if !ok { - l.Error().Msgf("Failed to get %s() apcToSpAdapterMappings items.", apiFunctionName) - l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body) - return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName) + apcToSpAdapterMappingsItems, apcToSpAdapterMappingsItemsOk := apcToSpAdapterMappings.GetItemsOk() + if !apcToSpAdapterMappingsItemsOk { + return nil, common.DataNilError(r.ResourceType(), response) } - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - for _, apcToSpAdapterMapping := range apcToSpAdapterMappingsItems { apcToSpAdapterMappingId, apcToSpAdapterMappingIdOk := apcToSpAdapterMapping.GetIdOk() apcToSpAdapterMappingSourceID, apcToSpAdapterMappingSourceIDOk := apcToSpAdapterMapping.GetSourceIdOk() apcToSpAdapterMappingTargetID, apcToSpAdapterMappingTargetIDOk := apcToSpAdapterMapping.GetTargetIdOk() if apcToSpAdapterMappingIdOk && apcToSpAdapterMappingSourceIDOk && apcToSpAdapterMappingTargetIDOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "SP Authentication Policy Contract Mapping Resource ID": *apcToSpAdapterMappingId, - "Source Authentication Policy Contract Resource ID": *apcToSpAdapterMappingSourceID, - "Target SP Adapter Resource ID": *apcToSpAdapterMappingTargetID, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_to_%s", *apcToSpAdapterMappingSourceID, *apcToSpAdapterMappingTargetID), - ResourceID: *apcToSpAdapterMappingId, - CommentInformation: common.GenerateCommentInformation(commentData), - }) + apcToSpAdapterMappingData[*apcToSpAdapterMappingId] = []string{*apcToSpAdapterMappingSourceID, *apcToSpAdapterMappingTargetID} } } - return &importBlocks, nil -} - -func (r *PingFederateSPAuthenticationPolicyContractMappingResource) ResourceType() string { - return "pingfederate_sp_authentication_policy_contract_mapping" + return &apcToSpAdapterMappingData, nil } diff --git a/internal/connector/pingfederate/resources/pingfederate_virtual_host_names.go b/internal/connector/pingfederate/resources/pingfederate_virtual_host_names.go index 51f1ecd1..d20069a2 100644 --- a/internal/connector/pingfederate/resources/pingfederate_virtual_host_names.go +++ b/internal/connector/pingfederate/resources/pingfederate_virtual_host_names.go @@ -22,13 +22,16 @@ func VirtualHostNames(clientInfo *connector.PingFederateClientInfo) *PingFederat } } +func (r *PingFederateVirtualHostNamesResource) ResourceType() string { + return "pingfederate_virtual_host_names" +} + func (r *PingFederateVirtualHostNamesResource) ExportAll() (*[]connector.ImportBlock, error) { l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) importBlocks := []connector.ImportBlock{} - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - virtualHostNamesId := "virtual_host_names_singleton_id" virtualHostNamesName := "Virtual Host Names" @@ -37,16 +40,14 @@ func (r *PingFederateVirtualHostNamesResource) ExportAll() (*[]connector.ImportB "Singleton ID": common.SINGLETON_ID_COMMENT_DATA, } - importBlocks = append(importBlocks, connector.ImportBlock{ + importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), ResourceName: virtualHostNamesName, ResourceID: virtualHostNamesId, CommentInformation: common.GenerateCommentInformation(commentData), - }) + } - return &importBlocks, nil -} + importBlocks = append(importBlocks, importBlock) -func (r *PingFederateVirtualHostNamesResource) ResourceType() string { - return "pingfederate_virtual_host_names" + return &importBlocks, nil }