From 728440e1a570e59a06f15da8684da95065c048fc Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Tue, 8 Oct 2024 18:39:24 +0100 Subject: [PATCH 01/29] begin draft for `authorize` service Terraform export --- internal/connector/common/resources_common.go | 31 ++++++ .../authorize/pingone_authorize_connector.go | 73 ++++++++++++++ .../pingone_authorize_connector_test.go | 94 +++++++++++++++++++ .../pingone_authorize_api_service.go | 70 ++++++++++++++ .../pingone_authorize_api_service_test.go | 27 ++++++ 5 files changed, 295 insertions(+) create mode 100644 internal/connector/pingone/authorize/pingone_authorize_connector.go create mode 100644 internal/connector/pingone/authorize/pingone_authorize_connector_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go diff --git a/internal/connector/common/resources_common.go b/internal/connector/common/resources_common.go index c3c1c9e3..e67f6582 100644 --- a/internal/connector/common/resources_common.go +++ b/internal/connector/common/resources_common.go @@ -4,6 +4,7 @@ import ( "fmt" "net/http" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/patrickcping/pingone-go-sdk-v2/management" "github.com/patrickcping/pingone-go-sdk-v2/mfa" "github.com/patrickcping/pingone-go-sdk-v2/risk" @@ -32,6 +33,36 @@ func HandleClientResponse(response *http.Response, err error, apiFunctionName st return nil } +// Executes the function apiExecuteFunc for the AuthorizeAPIClient +// Handles err and response if Client call failed +// Returns embedded data if not nil +// Treats nil embedded data as an error +func GetAuthorizeEmbedded(apiExecuteFunc func() (*authorize.EntityArray, *http.Response, error), apiFunctionName string, resourceType string) (*authorize.EntityArrayEmbedded, error) { + l := logger.Get() + + entityArray, response, err := apiExecuteFunc() + + err = HandleClientResponse(response, err, apiFunctionName, resourceType) + if err != nil { + return nil, err + } + + if entityArray == nil { + l.Error().Msgf("Returned %s() entityArray 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()", resourceType, apiFunctionName) + } + + embedded, embeddedOk := entityArray.GetEmbeddedOk() + if !embeddedOk { + l.Error().Msgf("Returned %s() embedded data 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()", resourceType, apiFunctionName) + } + + return embedded, nil +} + // Executes the function apiExecuteFunc for the ManagementAPIClient // Handles err and response if Client call failed // Returns embedded data if not nil diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector.go b/internal/connector/pingone/authorize/pingone_authorize_connector.go new file mode 100644 index 00000000..e4829bf2 --- /dev/null +++ b/internal/connector/pingone/authorize/pingone_authorize_connector.go @@ -0,0 +1,73 @@ +package authorize + +import ( + "context" + + pingoneGoClient "github.com/patrickcping/pingone-go-sdk-v2/pingone" + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/logger" +) + +const ( + serviceName = "pingone-authorize" +) + +// Verify that the connector satisfies the expected interfaces +var ( + _ connector.Exportable = &PingoneAuthorizeConnector{} + _ connector.Authenticatable = &PingoneAuthorizeConnector{} +) + +type PingoneAuthorizeConnector struct { + clientInfo connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeConnector +func AuthorizeConnector(ctx context.Context, apiClient *pingoneGoClient.Client, apiClientId *string, exportEnvironmentID string) *PingoneAuthorizeConnector { + return &PingoneAuthorizeConnector{ + clientInfo: connector.PingOneClientInfo{ + Context: ctx, + ApiClient: apiClient, + ApiClientId: apiClientId, + ExportEnvironmentID: exportEnvironmentID, + }, + } +} + +func (c *PingoneAuthorizeConnector) Export(format, outputDir string, overwriteExport bool) error { + l := logger.Get() + + l.Debug().Msgf("Exporting all PingOne Authorize Resources...") + + exportableResources := []connector.ExportableResource{ + resources.AuthorizeAPIService(&c.clientInfo), + resources.AuthorizeAPIServiceDeployment(&c.clientInfo), + resources.AuthorizeAPIServiceOperation(&c.clientInfo), + resources.AuthorizeApplicationRole(&c.clientInfo), + resources.AuthorizeApplicationRolePermission(&c.clientInfo), + resources.AuthorizeDecisionEndpoint(&c.clientInfo), + resources.AuthorizePolicyManagementPolicy(&c.clientInfo), + resources.AuthorizePolicyManagementRule(&c.clientInfo), + resources.AuthorizePolicyManagementStatement(&c.clientInfo), + resources.AuthorizeTrustFrameworkAttribute(&c.clientInfo), + resources.AuthorizeTrustFrameworkCondition(&c.clientInfo), + resources.AuthorizeTrustFrameworkProcessor(&c.clientInfo), + resources.AuthorizeTrustFrameworkService(&c.clientInfo), + } + + return common.WriteFiles(exportableResources, format, outputDir, overwriteExport) +} + +func (c *PingoneAuthorizeConnector) ConnectorServiceName() string { + return serviceName +} + +func (c *PingoneAuthorizeConnector) Login() error { + return nil +} + +func (c *PingoneAuthorizeConnector) Logout() error { + return nil +} diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go new file mode 100644 index 00000000..922ed50e --- /dev/null +++ b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go @@ -0,0 +1,94 @@ +package authorize_test + +import ( + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingctl/internal/testing/testutils_terraform" +) + +func TestAuthorizeTerraformPlan(t *testing.T) { + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + + testutils_terraform.InitPingOneTerraform(t) + + testCases := []struct { + name string + resource connector.ExportableResource + ignoredErrors []string + }{ + { + name: "AuthorizeAPIService", + resource: resources.AuthorizeAPIService(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeAPIServiceDeployment", + resource: resources.AuthorizeAPIServiceDeployment(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeAPIServiceOperation", + resource: resources.AuthorizeAPIServiceOperation(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeApplicationRole", + resource: resources.AuthorizeApplicationRole(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeApplicationRolePermission", + resource: resources.AuthorizeApplicationRolePermission(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeDecisionEndpoint", + resource: resources.AuthorizeDecisionEndpoint(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizePolicyManagementPolicy", + resource: resources.AuthorizePolicyManagementPolicy(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizePolicyManagementRule", + resource: resources.AuthorizePolicyManagementRule(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizePolicyManagementStatement", + resource: resources.AuthorizePolicyManagementStatement(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeTrustFrameworkAttribute", + resource: resources.AuthorizeTrustFrameworkAttribute(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeTrustFrameworkCondition", + resource: resources.AuthorizeTrustFrameworkCondition(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeTrustFrameworkProcessor", + resource: resources.AuthorizeTrustFrameworkProcessor(PingOneClientInfo), + ignoredErrors: nil, + }, + { + name: "AuthorizeTrustFrameworkService", + resource: resources.AuthorizeTrustFrameworkService(PingOneClientInfo), + ignoredErrors: nil, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + testutils_terraform.ValidateTerraformPlan(t, tc.resource, tc.ignoredErrors) + }) + } +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go new file mode 100644 index 00000000..725da4e3 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeAPIServiceResource{} +) + +type PingoneAuthorizeAPIServiceResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeAPIServiceResource +func AuthorizeAPIService(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeAPIServiceResource { + return &PingoneAuthorizeAPIServiceResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeAPIServiceResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ReadAllAPIServers" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, apiServer := range embedded.GetApiServers() { + apiServerName, apiServerNameOk := apiServer.GetNameOk() + apiServerId, apiServerIdOk := apiServer.GetIdOk() + + if apiServerNameOk && apiServerIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize API Service Name": *apiServerName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize API Service ID": *apiServerId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *apiServerName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *apiServerId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeAPIServiceResource) ResourceType() string { + return "pingone_authorize_api_service" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go new file mode 100644 index 00000000..c71e636f --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeAPIServiceExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeAPIService(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_api_service", + ResourceName: "Test Authorize API Service", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} From ef7b359dbee040e9e76408b0b6a3361710c3a26e Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 10 Oct 2024 18:27:12 +0100 Subject: [PATCH 02/29] development updates --- ...ingone_authorize_api_service_deployment.go | 95 ++++++++++++++++++ ...e_authorize_api_service_deployment_test.go | 27 ++++++ ...pingone_authorize_api_service_operation.go | 96 +++++++++++++++++++ ...ne_authorize_api_service_operation_test.go | 27 ++++++ .../pingone_authorize_application_role.go | 70 ++++++++++++++ ...e_authorize_application_role_permission.go | 95 ++++++++++++++++++ ...horize_application_role_permission_test.go | 27 ++++++ ...pingone_authorize_application_role_test.go | 27 ++++++ .../pingone_authorize_decision_endpoint.go | 70 ++++++++++++++ ...ingone_authorize_decision_endpoint_test.go | 27 ++++++ ...authorize_policy_management_policy_test.go | 27 ++++++ ...e_authorize_policy_management_rule_test.go | 27 ++++++ ...horize_policy_management_statement_test.go | 27 ++++++ ...uthorize_trust_framework_attribute_test.go | 27 ++++++ ...uthorize_trust_framework_condition_test.go | 27 ++++++ ...uthorize_trust_framework_processor_test.go | 27 ++++++ ..._authorize_trust_framework_service_test.go | 27 ++++++ 17 files changed, 750 insertions(+) create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go new file mode 100644 index 00000000..e06a6fec --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go @@ -0,0 +1,95 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeAPIServiceDeploymentResource{} +) + +type PingoneAuthorizeAPIServiceDeploymentResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeAPIServiceDeploymentResource +func AuthorizeAPIServiceDeployment(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeAPIServiceDeploymentResource { + return &PingoneAuthorizeAPIServiceDeploymentResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeAPIServiceDeploymentResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ReadAllAPIServers" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, apiServer := range embedded.GetApiServers() { + var ( + apiServerId *string + apiServerIdOk bool + apiServerName *string + apiServerNameOk bool + ) + + apiServerId, apiServerIdOk = apiServer.GetIdOk() + apiServerName, apiServerNameOk = apiServer.GetNameOk() + + if apiServerIdOk && apiServerNameOk { + + _, response, err := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServerDeploymentApi.ReadDeploymentStatus(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *apiServerId).Execute() + err = common.HandleClientResponse(response, err, "ReadDeploymentStatus", r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + if response.StatusCode == 204 { + l.Debug().Msgf("No exportable %s resource found", r.ResourceType()) + return &importBlocks, nil + } + + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize API Service Name": *apiServerName, + "Authorize API Service ID": *apiServerId, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *apiServerName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *apiServerId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + + return &importBlocks, nil + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeAPIServiceDeploymentResource) ResourceType() string { + return "pingone_authorize_api_service_deployment" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go new file mode 100644 index 00000000..d5e28a5a --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeAPIServiceDeploymentExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeAPIServiceDeployment(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_api_service_deployment", + ResourceName: "Test Authorize API Service Deployment", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go new file mode 100644 index 00000000..084cded5 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go @@ -0,0 +1,96 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeAPIServiceOperationResource{} +) + +type PingoneAuthorizeAPIServiceOperationResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeAPIServiceOperationResource +func AuthorizeAPIServiceOperation(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeAPIServiceOperationResource { + return &PingoneAuthorizeAPIServiceOperationResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeAPIServiceOperationResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteAPIServersFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiAPIServersFunctionName := "ReadAllAPIServers" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteAPIServersFunc, apiAPIServersFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, apiServer := range embedded.GetApiServers() { + var ( + apiServerId *string + apiServerIdOk bool + apiServerName *string + apiServerNameOk bool + ) + + apiServerId, apiServerIdOk = apiServer.GetIdOk() + apiServerName, apiServerNameOk = apiServer.GetNameOk() + + if apiServerIdOk && apiServerNameOk { + apiExecuteOperationsFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServerOperationsApi.ReadAllAPIServerOperations(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *apiServerId).Execute + apiOperationsFunctionName := "ReadAllAPIServerOperations" + + operationsEmbedded, err := common.GetAuthorizeEmbedded(apiExecuteOperationsFunc, apiOperationsFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + for _, apiServerOperation := range operationsEmbedded.GetOperations() { + apiServerOperationId, apiServerOperationIdOk := apiServerOperation.GetIdOk() + apiServerOperationName, apiServerOperationNameOk := apiServerOperation.GetNameOk() + + if apiServerOperationNameOk && apiServerOperationIdOk { + + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize API Service Name": *apiServerName, + "Authorize API Service ID": *apiServerId, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize API Service Operation Name": *apiServerOperationName, + "Authorize API Service Operation ID": *apiServerOperationId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", *apiServerName, *apiServerOperationName), + ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, *apiServerId, *apiServerOperationId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + + } + } + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeAPIServiceOperationResource) ResourceType() string { + return "pingone_authorize_api_service_operation" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go new file mode 100644 index 00000000..49337619 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeAPIServiceOperationExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeAPIServiceOperation(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_api_service_operation", + ResourceName: "Example API Service Operation", + ResourceID: fmt.Sprintf("%s/2a7c1b5d-415b-4fb5-a6c0-1e290f776785/056ed696-f2e9-44b1-8d2c-68e690cd1f24", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go new file mode 100644 index 00000000..5bc3a964 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeApplicationRoleResource{} +) + +type PingoneAuthorizeApplicationRoleResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeApplicationRoleResource +func AuthorizeApplicationRole(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeApplicationRoleResource { + return &PingoneAuthorizeApplicationRoleResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeApplicationRoleResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolesApi.ReadApplicationRoles(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ReadApplicationRoles" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, appRole := range embedded.GetRoles() { + appRoleName, appRoleNameOk := appRole.GetNameOk() + appRoleId, appRoleIdOk := appRole.GetIdOk() + + if appRoleNameOk && appRoleIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Application Role Name": *appRoleName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Application Role ID": *appRoleId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *appRoleName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *appRoleId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeApplicationRoleResource) ResourceType() string { + return "pingone_authorize_application_role" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go new file mode 100644 index 00000000..2d4cf55a --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go @@ -0,0 +1,95 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeApplicationRolePermissionResource{} +) + +type PingoneAuthorizeApplicationRolePermissionResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeApplicationRolePermissionResource +func AuthorizeApplicationRolePermission(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeApplicationRolePermissionResource { + return &PingoneAuthorizeApplicationRolePermissionResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeApplicationRolePermissionResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteApplicationRoleFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolesApi.ReadApplicationRoles(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiApplicationRoleFunctionName := "ReadApplicationRoles" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteApplicationRoleFunc, apiApplicationRoleFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, applicationRole := range embedded.GetRoles() { + var ( + applicationRoleId *string + applicationRoleIdOk bool + applicationRoleName *string + applicationRoleNameOk bool + ) + + applicationRoleId, applicationRoleIdOk = applicationRole.GetIdOk() + applicationRoleName, applicationRoleNameOk = applicationRole.GetNameOk() + + if applicationRoleIdOk && applicationRoleNameOk { + apiExecutePermissionsFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationResourcePermissionsApi.ReadApplicationPermissions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *applicationRoleId).Execute + apiPermissionsFunctionName := "ReadApplicationPermissions" + + permissionsEmbedded, err := common.GetAuthorizeEmbedded(apiExecutePermissionsFunc, apiPermissionsFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + for _, applicationRolePermission := range permissionsEmbedded.GetPermissions() { + if v := applicationRolePermission.ApplicationRolePermission; v != nil { + applicationRolePermissionId, applicationRolePermissionIdOk := v.GetIdOk() + + if applicationRolePermissionIdOk { + + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Application Role Name": *applicationRoleName, + "Authorize Application Role ID": *applicationRoleId, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Application Role Permission ID": *applicationRolePermissionId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", *applicationRoleName, *applicationRolePermissionId), + ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, *applicationRoleId, *applicationRolePermissionId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + } + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeApplicationRolePermissionResource) ResourceType() string { + return "pingone_authorize_api_service_operation" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go new file mode 100644 index 00000000..770a2420 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeApplicationRolePermissionExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeApplicationRolePermission(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_application_role_permission", + ResourceName: "Test Authorize Application Role Permission", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go new file mode 100644 index 00000000..eed239e1 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeApplicationRoleExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeApplicationRole(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_application_role", + ResourceName: "Test Authorize Application Role", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go new file mode 100644 index 00000000..be1df95c --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeDecisionEndpointResource{} +) + +type PingoneAuthorizeDecisionEndpointResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeDecisionEndpointResource +func AuthorizeDecisionEndpoint(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeDecisionEndpointResource { + return &PingoneAuthorizeDecisionEndpointResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeDecisionEndpointResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.PolicyDecisionManagementApi.ReadAllDecisionEndpoints(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ReadAllDecisionEndpoints" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, decisionEndpoint := range embedded.GetDecisionEndpoints() { + decisionEndpointName, decisionEndpointNameOk := decisionEndpoint.GetNameOk() + decisionEndpointId, decisionEndpointIdOk := decisionEndpoint.GetIdOk() + + if decisionEndpointNameOk && decisionEndpointIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Decision Endpoint Name": *decisionEndpointName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Decision Endpoint ID": *decisionEndpointId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *decisionEndpointName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *decisionEndpointId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeDecisionEndpointResource) ResourceType() string { + return "pingone_authorize_decision_endpoint" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go new file mode 100644 index 00000000..397e7fd7 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeDecisionEndpointExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeDecisionEndpoint(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_decision_endpoint", + ResourceName: "Test Authorize Decision Endpoint", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go new file mode 100644 index 00000000..6bd925c8 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizePolicyManagementPolicyExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizePolicyManagementPolicy(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_policy_management_policy", + ResourceName: "Test Authorize Policy Management Policy", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go new file mode 100644 index 00000000..7c72ba79 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizePolicyManagementRuleExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizePolicyManagementRule(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_policy_management_rule", + ResourceName: "Test Authorize Policy Management Rule", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go new file mode 100644 index 00000000..dc856e26 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizePolicyManagementStatementExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizePolicyManagementStatement(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_policy_management_statement", + ResourceName: "Test Authorize Policy Management Statement", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go new file mode 100644 index 00000000..cae121df --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeTrustFrameworkAttributeExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeTrustFrameworkAttribute(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_trust_framework_attribute", + ResourceName: "Test Authorize Trust Framework Attribute", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go new file mode 100644 index 00000000..ccecfa19 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeTrustFrameworkConditionExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeTrustFrameworkCondition(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_trust_framework_condition", + ResourceName: "Test Authorize Trust Framework Condition", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go new file mode 100644 index 00000000..08e58005 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeTrustFrameworkProcessorExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeTrustFrameworkProcessor(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_trust_framework_processor", + ResourceName: "Test Authorize Trust Framework Processor", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go new file mode 100644 index 00000000..2502c24d --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingctl/internal/testing/testutils" +) + +func TestAuthorizeTrustFrameworkServiceExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeTrustFrameworkService(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_trust_framework_service", + ResourceName: "Test Authorize Trust Framework Service", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} From b5b0357cfba288019013fe8862f090d54dd10ed8 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 11 Oct 2024 10:51:44 +0100 Subject: [PATCH 03/29] full authorize draft (pre-testing) --- ...gone_authorize_policy_management_policy.go | 70 +++++++++++++++ ...ingone_authorize_policy_management_rule.go | 70 +++++++++++++++ ...e_authorize_policy_management_statement.go | 70 +++++++++++++++ ...one_authorize_trust_framework_attribute.go | 70 +++++++++++++++ ...one_authorize_trust_framework_condition.go | 70 +++++++++++++++ ...one_authorize_trust_framework_processor.go | 70 +++++++++++++++ ...ngone_authorize_trust_framework_service.go | 90 +++++++++++++++++++ 7 files changed, 510 insertions(+) create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go new file mode 100644 index 00000000..b4d75ae5 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizePolicyManagementPolicyResource{} +) + +type PingoneAuthorizePolicyManagementPolicyResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizePolicyManagementPolicyResource +func AuthorizePolicyManagementPolicy(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizePolicyManagementPolicyResource { + return &PingoneAuthorizePolicyManagementPolicyResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizePolicyManagementPolicyResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorPoliciesApi.ListRootPolicies(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ListRootPolicies" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, authorizationPolicy := range embedded.GetAuthorizationPolicies() { + authorizationPolicyName, authorizationPolicyNameOk := authorizationPolicy.GetNameOk() + authorizationPolicyId, authorizationPolicyIdOk := authorizationPolicy.GetIdOk() + + if authorizationPolicyNameOk && authorizationPolicyIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Policy Management Authorization Policy Name": *authorizationPolicyName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Policy Management Authorization Policy ID": *authorizationPolicyId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *authorizationPolicyName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationPolicyId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizePolicyManagementPolicyResource) ResourceType() string { + return "pingone_authorize_policy_management_policy" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go new file mode 100644 index 00000000..c940c665 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizePolicyManagementRuleResource{} +) + +type PingoneAuthorizePolicyManagementRuleResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizePolicyManagementRuleResource +func AuthorizePolicyManagementRule(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizePolicyManagementRuleResource { + return &PingoneAuthorizePolicyManagementRuleResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizePolicyManagementRuleResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorRulesApi.ListRules(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ListRules" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, authorizationRule := range embedded.GetAuthorizationRules() { + authorizationRuleName, authorizationRuleNameOk := authorizationRule.GetNameOk() + authorizationRuleId, authorizationRuleIdOk := authorizationRule.GetIdOk() + + if authorizationRuleNameOk && authorizationRuleIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Policy Management Authorization Rule Name": *authorizationRuleName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Policy Management Authorization Rule ID": *authorizationRuleId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *authorizationRuleName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationRuleId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizePolicyManagementRuleResource) ResourceType() string { + return "pingone_authorize_policy_management_rule" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go new file mode 100644 index 00000000..72314e0a --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizePolicyManagementStatementResource{} +) + +type PingoneAuthorizePolicyManagementStatementResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizePolicyManagementStatementResource +func AuthorizePolicyManagementStatement(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizePolicyManagementStatementResource { + return &PingoneAuthorizePolicyManagementStatementResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizePolicyManagementStatementResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorStatementsApi.ListStatements(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ListStatements" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, authorizationStatement := range embedded.GetAuthorizationStatements() { + authorizationStatementName, authorizationStatementNameOk := authorizationStatement.GetNameOk() + authorizationStatementId, authorizationStatementIdOk := authorizationStatement.GetIdOk() + + if authorizationStatementNameOk && authorizationStatementIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Policy Management Authorization Statement Name": *authorizationStatementName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Policy Management Authorization Statement ID": *authorizationStatementId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *authorizationStatementName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationStatementId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizePolicyManagementStatementResource) ResourceType() string { + return "pingone_authorize_policy_management_statement" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go new file mode 100644 index 00000000..a29c9712 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeTrustFrameworkAttributeResource{} +) + +type PingoneAuthorizeTrustFrameworkAttributeResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeTrustFrameworkAttributeResource +func AuthorizeTrustFrameworkAttribute(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeTrustFrameworkAttributeResource { + return &PingoneAuthorizeTrustFrameworkAttributeResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeTrustFrameworkAttributeResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorAttributesApi.ListAttributes(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ListAttributes" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, authorizationAttribute := range embedded.GetAuthorizationAttributes() { + authorizationAttributeName, authorizationAttributeNameOk := authorizationAttribute.GetNameOk() + authorizationAttributeId, authorizationAttributeIdOk := authorizationAttribute.GetIdOk() + + if authorizationAttributeNameOk && authorizationAttributeIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Trust Framework Attribute Name": *authorizationAttributeName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Trust Framework Attribute ID": *authorizationAttributeId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *authorizationAttributeName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationAttributeId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeTrustFrameworkAttributeResource) ResourceType() string { + return "pingone_authorize_trust_framework_attribute" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go new file mode 100644 index 00000000..18dee829 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeTrustFrameworkConditionResource{} +) + +type PingoneAuthorizeTrustFrameworkConditionResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeTrustFrameworkConditionResource +func AuthorizeTrustFrameworkCondition(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeTrustFrameworkConditionResource { + return &PingoneAuthorizeTrustFrameworkConditionResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeTrustFrameworkConditionResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorConditionsApi.ListConditions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ListConditions" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, authorizationCondition := range embedded.GetAuthorizationConditions() { + authorizationConditionName, authorizationConditionNameOk := authorizationCondition.GetNameOk() + authorizationConditionId, authorizationConditionIdOk := authorizationCondition.GetIdOk() + + if authorizationConditionNameOk && authorizationConditionIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Trust Framework Condition Name": *authorizationConditionName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Trust Framework Condition ID": *authorizationConditionId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *authorizationConditionName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationConditionId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeTrustFrameworkConditionResource) ResourceType() string { + return "pingone_authorize_trust_framework_condition" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go new file mode 100644 index 00000000..90f6ec5f --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go @@ -0,0 +1,70 @@ +package resources + +import ( + "fmt" + + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeTrustFrameworkProcessorResource{} +) + +type PingoneAuthorizeTrustFrameworkProcessorResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeTrustFrameworkProcessorResource +func AuthorizeTrustFrameworkProcessor(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeTrustFrameworkProcessorResource { + return &PingoneAuthorizeTrustFrameworkProcessorResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeTrustFrameworkProcessorResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorProcessorsApi.ListProcessors(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ListProcessors" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, authorizationProcessor := range embedded.GetAuthorizationProcessors() { + authorizationProcessorName, authorizationProcessorNameOk := authorizationProcessor.GetNameOk() + authorizationProcessorId, authorizationProcessorIdOk := authorizationProcessor.GetIdOk() + + if authorizationProcessorNameOk && authorizationProcessorIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Trust Framework Processor Name": *authorizationProcessorName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Trust Framework Processor ID": *authorizationProcessorId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *authorizationProcessorName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationProcessorId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeTrustFrameworkProcessorResource) ResourceType() string { + return "pingone_authorize_trust_framework_processor" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go new file mode 100644 index 00000000..e7a3d31e --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go @@ -0,0 +1,90 @@ +package resources + +import ( + "fmt" + + "github.com/patrickcping/pingone-go-sdk-v2/authorize" + "github.com/pingidentity/pingctl/internal/connector" + "github.com/pingidentity/pingctl/internal/connector/common" + "github.com/pingidentity/pingctl/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeTrustFrameworkServiceResource{} +) + +type PingoneAuthorizeTrustFrameworkServiceResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeTrustFrameworkServiceResource +func AuthorizeTrustFrameworkService(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeTrustFrameworkServiceResource { + return &PingoneAuthorizeTrustFrameworkServiceResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeTrustFrameworkServiceResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + + l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) + + apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorServicesApi.ListServices(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute + apiFunctionName := "ListServices" + + embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + if err != nil { + return nil, err + } + + importBlocks := []connector.ImportBlock{} + + l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + + for _, authorizationService := range embedded.GetAuthorizationServices() { + + var ( + authorizationServiceId *string + authorizationServiceIdOk bool + authorizationServiceName *string + authorizationServiceNameOk bool + ) + + switch t := authorizationService.GetActualInstance().(type) { + case *authorize.AuthorizeEditorDataServicesConnectorServiceDefinitionDTO: + authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() + authorizationServiceName, authorizationServiceNameOk = t.GetNameOk() + case *authorize.AuthorizeEditorDataServicesHttpServiceDefinitionDTO: + authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() + authorizationServiceName, authorizationServiceNameOk = t.GetNameOk() + case *authorize.AuthorizeEditorDataServicesNoneServiceDefinitionDTO: + authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() + authorizationServiceName, authorizationServiceNameOk = t.GetNameOk() + default: + continue + } + + if authorizationServiceNameOk && authorizationServiceIdOk { + commentData := map[string]string{ + "Resource Type": r.ResourceType(), + "Authorize Trust Framework Service Name": *authorizationServiceName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Authorize Trust Framework Service ID": *authorizationServiceId, + } + + importBlocks = append(importBlocks, connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: *authorizationServiceName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationServiceId), + CommentInformation: common.GenerateCommentInformation(commentData), + }) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeTrustFrameworkServiceResource) ResourceType() string { + return "pingone_authorize_trust_framework_service" +} From 64ae3195fff1df7fb4d7615f86efff39446c67b8 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Tue, 15 Oct 2024 18:52:25 +0100 Subject: [PATCH 04/29] update imports --- .../pingone/authorize/pingone_authorize_connector.go | 8 ++++---- .../pingone/authorize/pingone_authorize_connector_test.go | 8 ++++---- .../authorize/resources/pingone_authorize_api_service.go | 6 +++--- .../resources/pingone_authorize_api_service_deployment.go | 6 +++--- .../pingone_authorize_api_service_deployment_test.go | 6 +++--- .../resources/pingone_authorize_api_service_operation.go | 6 +++--- .../pingone_authorize_api_service_operation_test.go | 6 +++--- .../resources/pingone_authorize_api_service_test.go | 6 +++--- .../resources/pingone_authorize_application_role.go | 6 +++--- .../pingone_authorize_application_role_permission.go | 6 +++--- .../pingone_authorize_application_role_permission_test.go | 6 +++--- .../resources/pingone_authorize_application_role_test.go | 6 +++--- .../resources/pingone_authorize_decision_endpoint.go | 6 +++--- .../resources/pingone_authorize_decision_endpoint_test.go | 6 +++--- .../pingone_authorize_policy_management_policy.go | 6 +++--- .../pingone_authorize_policy_management_policy_test.go | 6 +++--- .../resources/pingone_authorize_policy_management_rule.go | 6 +++--- .../pingone_authorize_policy_management_rule_test.go | 6 +++--- .../pingone_authorize_policy_management_statement.go | 6 +++--- .../pingone_authorize_policy_management_statement_test.go | 6 +++--- .../pingone_authorize_trust_framework_attribute.go | 6 +++--- .../pingone_authorize_trust_framework_attribute_test.go | 6 +++--- .../pingone_authorize_trust_framework_condition.go | 6 +++--- .../pingone_authorize_trust_framework_condition_test.go | 6 +++--- .../pingone_authorize_trust_framework_processor.go | 6 +++--- .../pingone_authorize_trust_framework_processor_test.go | 6 +++--- .../pingone_authorize_trust_framework_service.go | 6 +++--- .../pingone_authorize_trust_framework_service_test.go | 6 +++--- 28 files changed, 86 insertions(+), 86 deletions(-) diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector.go b/internal/connector/pingone/authorize/pingone_authorize_connector.go index e4829bf2..55f7bf69 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector.go @@ -4,10 +4,10 @@ import ( "context" pingoneGoClient "github.com/patrickcping/pingone-go-sdk-v2/pingone" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/logger" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/logger" ) const ( diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go index 922ed50e..42f518df 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go @@ -3,10 +3,10 @@ package authorize_test import ( "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" - "github.com/pingidentity/pingctl/internal/testing/testutils_terraform" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/testing/testutils_terraform" ) func TestAuthorizeTerraformPlan(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go index 725da4e3..1fbeb55b 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go index e06a6fec..2a2eb30e 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go index d5e28a5a..cc31d9f6 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeAPIServiceDeploymentExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go index 084cded5..5c0008b2 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go index 49337619..b982f63c 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeAPIServiceOperationExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go index c71e636f..b28a2fd1 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeAPIServiceExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go index 5bc3a964..d0107a7b 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go index 2d4cf55a..0c5d0948 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go index 770a2420..36f12ca1 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeApplicationRolePermissionExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go index eed239e1..640c8d88 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeApplicationRoleExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go index be1df95c..295f5d74 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go index 397e7fd7..bb02d7ce 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeDecisionEndpointExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go index b4d75ae5..88ba6526 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go index 6bd925c8..98845816 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizePolicyManagementPolicyExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go index c940c665..ce45b34a 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go index 7c72ba79..1e7744f3 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizePolicyManagementRuleExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go index 72314e0a..0f5d53a7 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go index dc856e26..392be624 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizePolicyManagementStatementExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go index a29c9712..e4c3dc85 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go index cae121df..1bb70756 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeTrustFrameworkAttributeExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go index 18dee829..0ef7ec0a 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go index ccecfa19..9e7f6f1a 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeTrustFrameworkConditionExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go index 90f6ec5f..ccf990f7 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go @@ -3,9 +3,9 @@ package resources import ( "fmt" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go index 08e58005..c2f96c5c 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeTrustFrameworkProcessorExport(t *testing.T) { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go index e7a3d31e..1bbc3370 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go @@ -4,9 +4,9 @@ import ( "fmt" "github.com/patrickcping/pingone-go-sdk-v2/authorize" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/common" - "github.com/pingidentity/pingctl/internal/logger" + "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 diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go index 2502c24d..639bdd43 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/pingidentity/pingctl/internal/connector" - "github.com/pingidentity/pingctl/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingctl/internal/testing/testutils" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" ) func TestAuthorizeTrustFrameworkServiceExport(t *testing.T) { From 512695f62071e40491386ba3b629406e87f66341 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 7 Nov 2024 17:04:12 +0000 Subject: [PATCH 05/29] add authorize to available exportable services --- internal/commands/platform/export_internal.go | 3 +++ internal/customtypes/export_services.go | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/commands/platform/export_internal.go b/internal/commands/platform/export_internal.go index 67ddae83..6f7c8d5f 100644 --- a/internal/commands/platform/export_internal.go +++ b/internal/commands/platform/export_internal.go @@ -17,6 +17,7 @@ import ( "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" "github.com/pingidentity/pingcli/internal/connector/pingfederate" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize" "github.com/pingidentity/pingcli/internal/connector/pingone/mfa" "github.com/pingidentity/pingcli/internal/connector/pingone/platform" "github.com/pingidentity/pingcli/internal/connector/pingone/protect" @@ -465,6 +466,8 @@ func getExportableConnectors(exportServices *customtypes.ExportServices) (export switch service { case customtypes.ENUM_EXPORT_SERVICE_PINGONE_PLATFORM: connectors = append(connectors, platform.PlatformConnector(pingoneContext, pingoneApiClient, &pingoneApiClientId, pingoneExportEnvID)) + case customtypes.ENUM_EXPORT_SERVICE_PINGONE_AUTHORIZE: + connectors = append(connectors, authorize.AuthorizeConnector(pingoneContext, pingoneApiClient, &pingoneApiClientId, pingoneExportEnvID)) case customtypes.ENUM_EXPORT_SERVICE_PINGONE_SSO: connectors = append(connectors, sso.SSOConnector(pingoneContext, pingoneApiClient, &pingoneApiClientId, pingoneExportEnvID)) case customtypes.ENUM_EXPORT_SERVICE_PINGONE_MFA: diff --git a/internal/customtypes/export_services.go b/internal/customtypes/export_services.go index b5f1badc..41be1159 100644 --- a/internal/customtypes/export_services.go +++ b/internal/customtypes/export_services.go @@ -9,11 +9,12 @@ import ( ) const ( - ENUM_EXPORT_SERVICE_PINGONE_PLATFORM string = "pingone-platform" - ENUM_EXPORT_SERVICE_PINGONE_SSO string = "pingone-sso" - ENUM_EXPORT_SERVICE_PINGONE_MFA string = "pingone-mfa" - ENUM_EXPORT_SERVICE_PINGONE_PROTECT string = "pingone-protect" - ENUM_EXPORT_SERVICE_PINGFEDERATE string = "pingfederate" + ENUM_EXPORT_SERVICE_PINGONE_PLATFORM string = "pingone-platform" + ENUM_EXPORT_SERVICE_PINGONE_AUTHORIZE string = "pingone-authorize" + ENUM_EXPORT_SERVICE_PINGONE_SSO string = "pingone-sso" + ENUM_EXPORT_SERVICE_PINGONE_MFA string = "pingone-mfa" + ENUM_EXPORT_SERVICE_PINGONE_PROTECT string = "pingone-protect" + ENUM_EXPORT_SERVICE_PINGFEDERATE string = "pingfederate" ) type ExportServices []string @@ -64,6 +65,7 @@ func (es ExportServices) ContainsPingOneService() bool { pingoneServices := []string{ ENUM_EXPORT_SERVICE_PINGONE_PLATFORM, + ENUM_EXPORT_SERVICE_PINGONE_AUTHORIZE, ENUM_EXPORT_SERVICE_PINGONE_SSO, ENUM_EXPORT_SERVICE_PINGONE_MFA, ENUM_EXPORT_SERVICE_PINGONE_PROTECT, @@ -100,6 +102,7 @@ func ExportServicesValidValues() []string { allServices := []string{ ENUM_EXPORT_SERVICE_PINGFEDERATE, ENUM_EXPORT_SERVICE_PINGONE_PLATFORM, + ENUM_EXPORT_SERVICE_PINGONE_AUTHORIZE, ENUM_EXPORT_SERVICE_PINGONE_SSO, ENUM_EXPORT_SERVICE_PINGONE_MFA, ENUM_EXPORT_SERVICE_PINGONE_PROTECT, From ac7f66d08fe53d0e1b62ae32bfceac72a70a20e2 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 7 Nov 2024 17:04:39 +0000 Subject: [PATCH 06/29] change name to full name, filter on managed entity --- .../pingone_authorize_policy_management_policy.go | 12 +++++++++++- .../pingone_authorize_trust_framework_attribute.go | 14 ++++++++++++-- .../pingone_authorize_trust_framework_condition.go | 2 +- .../pingone_authorize_trust_framework_processor.go | 2 +- .../pingone_authorize_trust_framework_service.go | 6 +++--- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go index 88ba6526..4cf644b4 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go @@ -45,7 +45,17 @@ func (r *PingoneAuthorizePolicyManagementPolicyResource) ExportAll() (*[]connect authorizationPolicyName, authorizationPolicyNameOk := authorizationPolicy.GetNameOk() authorizationPolicyId, authorizationPolicyIdOk := authorizationPolicy.GetIdOk() - if authorizationPolicyNameOk && authorizationPolicyIdOk { + exportableEntity := true + + if managedEntity, ok := authorizationPolicy.GetManagedEntityOk(); ok { + if restrictions, ok := managedEntity.GetRestrictionsOk(); ok { + if restrictions.GetReadOnly() { + exportableEntity = false + } + } + } + + if authorizationPolicyNameOk && authorizationPolicyIdOk && exportableEntity { commentData := map[string]string{ "Resource Type": r.ResourceType(), "Authorize Policy Management Authorization Policy Name": *authorizationPolicyName, diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go index e4c3dc85..a9d9e6ea 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go @@ -42,10 +42,20 @@ func (r *PingoneAuthorizeTrustFrameworkAttributeResource) ExportAll() (*[]connec l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) for _, authorizationAttribute := range embedded.GetAuthorizationAttributes() { - authorizationAttributeName, authorizationAttributeNameOk := authorizationAttribute.GetNameOk() + authorizationAttributeName, authorizationAttributeNameOk := authorizationAttribute.GetFullNameOk() authorizationAttributeId, authorizationAttributeIdOk := authorizationAttribute.GetIdOk() - if authorizationAttributeNameOk && authorizationAttributeIdOk { + exportableEntity := true + + if managedEntity, ok := authorizationAttribute.GetManagedEntityOk(); ok { + if restrictions, ok := managedEntity.GetRestrictionsOk(); ok { + if restrictions.GetReadOnly() { + exportableEntity = false + } + } + } + + if authorizationAttributeNameOk && authorizationAttributeIdOk && exportableEntity { commentData := map[string]string{ "Resource Type": r.ResourceType(), "Authorize Trust Framework Attribute Name": *authorizationAttributeName, diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go index 0ef7ec0a..4fc3af4c 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go @@ -42,7 +42,7 @@ func (r *PingoneAuthorizeTrustFrameworkConditionResource) ExportAll() (*[]connec l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) for _, authorizationCondition := range embedded.GetAuthorizationConditions() { - authorizationConditionName, authorizationConditionNameOk := authorizationCondition.GetNameOk() + authorizationConditionName, authorizationConditionNameOk := authorizationCondition.GetFullNameOk() authorizationConditionId, authorizationConditionIdOk := authorizationCondition.GetIdOk() if authorizationConditionNameOk && authorizationConditionIdOk { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go index ccf990f7..01325ca3 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go @@ -42,7 +42,7 @@ func (r *PingoneAuthorizeTrustFrameworkProcessorResource) ExportAll() (*[]connec l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) for _, authorizationProcessor := range embedded.GetAuthorizationProcessors() { - authorizationProcessorName, authorizationProcessorNameOk := authorizationProcessor.GetNameOk() + authorizationProcessorName, authorizationProcessorNameOk := authorizationProcessor.GetFullNameOk() authorizationProcessorId, authorizationProcessorIdOk := authorizationProcessor.GetIdOk() if authorizationProcessorNameOk && authorizationProcessorIdOk { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go index 1bbc3370..38458aa5 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go @@ -54,13 +54,13 @@ func (r *PingoneAuthorizeTrustFrameworkServiceResource) ExportAll() (*[]connecto switch t := authorizationService.GetActualInstance().(type) { case *authorize.AuthorizeEditorDataServicesConnectorServiceDefinitionDTO: authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() - authorizationServiceName, authorizationServiceNameOk = t.GetNameOk() + authorizationServiceName, authorizationServiceNameOk = t.GetFullNameOk() case *authorize.AuthorizeEditorDataServicesHttpServiceDefinitionDTO: authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() - authorizationServiceName, authorizationServiceNameOk = t.GetNameOk() + authorizationServiceName, authorizationServiceNameOk = t.GetFullNameOk() case *authorize.AuthorizeEditorDataServicesNoneServiceDefinitionDTO: authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() - authorizationServiceName, authorizationServiceNameOk = t.GetNameOk() + authorizationServiceName, authorizationServiceNameOk = t.GetFullNameOk() default: continue } From 506994e8e33d6dd8adf9739527d21ee8d828e5ca Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Wed, 26 Feb 2025 15:07:47 +0000 Subject: [PATCH 07/29] update authorize for EA --- go.mod | 4 +- go.sum | 4 +- .../authorize/pingone_authorize_connector.go | 2 +- .../pingone_authorize_connector_test.go | 10 +- .../pingone_authorize_api_service.go | 62 ++++-- ...ingone_authorize_api_service_deployment.go | 205 ++++++++++-------- ...e_authorize_api_service_deployment_test.go | 42 ++-- ...pingone_authorize_api_service_operation.go | 112 ++++++---- .../pingone_authorize_application_role.go | 66 +++--- ...e_authorize_application_role_permission.go | 111 ++++++---- .../pingone_authorize_decision_endpoint.go | 62 ++++-- ...gone_authorize_policy_management_policy.go | 75 ++++--- ...ingone_authorize_policy_management_rule.go | 67 +++--- ...e_authorize_policy_management_statement.go | 66 +++--- ...one_authorize_trust_framework_attribute.go | 73 ++++--- ...one_authorize_trust_framework_condition.go | 67 +++--- ...one_authorize_trust_framework_processor.go | 67 +++--- ...ngone_authorize_trust_framework_service.go | 81 ++++--- internal/connector/pingone/common.go | 36 +++ 19 files changed, 724 insertions(+), 488 deletions(-) diff --git a/go.mod b/go.mod index d76aef6d..3a27d438 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,14 @@ tool ( github.com/pavius/impi ) +replace github.com/patrickcping/pingone-go-sdk-v2/authorize => github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.1-0.20250218183914-e9ec95e476b9 + require ( github.com/fatih/color v1.18.0 github.com/hashicorp/go-uuid v1.0.3 github.com/manifoldco/promptui v0.9.0 github.com/patrickcping/pingone-go-sdk-v2 v0.12.9 + github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.0 github.com/patrickcping/pingone-go-sdk-v2/management v0.49.0 github.com/patrickcping/pingone-go-sdk-v2/mfa v0.23.0 github.com/patrickcping/pingone-go-sdk-v2/risk v0.19.0 @@ -137,7 +140,6 @@ require ( github.com/nishanths/predeclared v0.2.2 // indirect github.com/nunnatsa/ginkgolinter v0.19.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.0 // indirect github.com/patrickcping/pingone-go-sdk-v2/credentials v0.11.0 // indirect github.com/patrickcping/pingone-go-sdk-v2/verify v0.9.0 // indirect github.com/pavius/impi v0.0.3 // indirect diff --git a/go.sum b/go.sum index 24d08f5c..6f81aad9 100644 --- a/go.sum +++ b/go.sum @@ -431,8 +431,8 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/patrickcping/pingone-go-sdk-v2 v0.12.9 h1:EznRTRLzpgHeqkBtXHBrwjIMlfLamqOurODgIKNyoBY= github.com/patrickcping/pingone-go-sdk-v2 v0.12.9/go.mod h1:ZA09d5Rw6Mp7MBT7iJageVfzU1k6yjEjsQCLpIlFyRQ= -github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.0 h1:gEPzZToJlBcJh2Ft12dP1GCSGzsNFQFEHS7Bql86RQk= -github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.0/go.mod h1:2PDrgC1ufXk2IDIk4JQHx6r34r2xpkbnzKIpXFv8gYs= +github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.1-0.20250218183914-e9ec95e476b9 h1:O+LMmb6pH7VKVRV3nZbWadMuBoAq7FhEAi/9s09dhEw= +github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.1-0.20250218183914-e9ec95e476b9/go.mod h1:2PDrgC1ufXk2IDIk4JQHx6r34r2xpkbnzKIpXFv8gYs= github.com/patrickcping/pingone-go-sdk-v2/credentials v0.11.0 h1:pLiiBkROks/40vhFWJEcr/tiIEqqYdP4FWsHtfCLdIs= github.com/patrickcping/pingone-go-sdk-v2/credentials v0.11.0/go.mod h1:yRGf7+tsB3/AQYsNjIIs4ScJhR885mvDYMgwHiQeMl0= github.com/patrickcping/pingone-go-sdk-v2/management v0.49.0 h1:F1zE2PhxgZCu08TObPylcnXzKqdbaAXkDODWegTE7WM= diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector.go b/internal/connector/pingone/authorize/pingone_authorize_connector.go index 55f7bf69..f2de6344 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector.go @@ -43,7 +43,7 @@ func (c *PingoneAuthorizeConnector) Export(format, outputDir string, overwriteEx exportableResources := []connector.ExportableResource{ resources.AuthorizeAPIService(&c.clientInfo), - resources.AuthorizeAPIServiceDeployment(&c.clientInfo), + // resources.AuthorizeAPIServiceDeployment(&c.clientInfo), resources.AuthorizeAPIServiceOperation(&c.clientInfo), resources.AuthorizeApplicationRole(&c.clientInfo), resources.AuthorizeApplicationRolePermission(&c.clientInfo), diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go index 42f518df..8c2216e9 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go @@ -24,11 +24,11 @@ func TestAuthorizeTerraformPlan(t *testing.T) { resource: resources.AuthorizeAPIService(PingOneClientInfo), ignoredErrors: nil, }, - { - name: "AuthorizeAPIServiceDeployment", - resource: resources.AuthorizeAPIServiceDeployment(PingOneClientInfo), - ignoredErrors: nil, - }, + // { + // name: "AuthorizeAPIServiceDeployment", + // resource: resources.AuthorizeAPIServiceDeployment(PingOneClientInfo), + // ignoredErrors: nil, + // }, { name: "AuthorizeAPIServiceOperation", resource: resources.AuthorizeAPIServiceOperation(PingOneClientInfo), diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go index 1fbeb55b..3af7aab0 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,43 +28,55 @@ func AuthorizeAPIService(clientInfo *connector.PingOneClientInfo) *PingoneAuthor func (r *PingoneAuthorizeAPIServiceResource) 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.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ReadAllAPIServers" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + APIServerData, err := r.getAPIServerData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for apiServerId, apiServerName := range APIServerData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "API Server ID": apiServerId, + "API Server Name": apiServerName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: apiServerName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, apiServerId), + CommentInformation: common.GenerateCommentInformation(commentData), + } - for _, apiServer := range embedded.GetApiServers() { - apiServerName, apiServerNameOk := apiServer.GetNameOk() + importBlocks = append(importBlocks, importBlock) + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeAPIServiceResource) getAPIServerData() (map[string]string, error) { + apiServerData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + apiServers, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.APIServer](iter, "ReadAllAPIServers", "GetApiServers", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, apiServer := range apiServers { apiServerId, apiServerIdOk := apiServer.GetIdOk() + apiServerName, apiServerNameOk := apiServer.GetNameOk() - if apiServerNameOk && apiServerIdOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize API Service Name": *apiServerName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize API Service ID": *apiServerId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *apiServerName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *apiServerId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + if apiServerIdOk && apiServerNameOk { + apiServerData[*apiServerId] = *apiServerName } } - return &importBlocks, nil + return apiServerData, nil } func (r *PingoneAuthorizeAPIServiceResource) ResourceType() string { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go index 2a2eb30e..1e7af6f8 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go @@ -1,95 +1,114 @@ package resources -import ( - "fmt" - - "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 = &PingoneAuthorizeAPIServiceDeploymentResource{} -) - -type PingoneAuthorizeAPIServiceDeploymentResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingoneAuthorizeAPIServiceDeploymentResource -func AuthorizeAPIServiceDeployment(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeAPIServiceDeploymentResource { - return &PingoneAuthorizeAPIServiceDeploymentResource{ - clientInfo: clientInfo, - } -} - -func (r *PingoneAuthorizeAPIServiceDeploymentResource) ExportAll() (*[]connector.ImportBlock, error) { - l := logger.Get() - - l.Debug().Msgf("Fetching all %s resources...", r.ResourceType()) - - apiExecuteFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ReadAllAPIServers" - - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) - if err != nil { - return nil, err - } - - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, apiServer := range embedded.GetApiServers() { - var ( - apiServerId *string - apiServerIdOk bool - apiServerName *string - apiServerNameOk bool - ) - - apiServerId, apiServerIdOk = apiServer.GetIdOk() - apiServerName, apiServerNameOk = apiServer.GetNameOk() - - if apiServerIdOk && apiServerNameOk { - - _, response, err := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServerDeploymentApi.ReadDeploymentStatus(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *apiServerId).Execute() - err = common.HandleClientResponse(response, err, "ReadDeploymentStatus", r.ResourceType()) - if err != nil { - return nil, err - } - - importBlocks := []connector.ImportBlock{} - - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - if response.StatusCode == 204 { - l.Debug().Msgf("No exportable %s resource found", r.ResourceType()) - return &importBlocks, nil - } - - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize API Service Name": *apiServerName, - "Authorize API Service ID": *apiServerId, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *apiServerName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *apiServerId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) - - return &importBlocks, nil - } - } - - return &importBlocks, nil -} - -func (r *PingoneAuthorizeAPIServiceDeploymentResource) ResourceType() string { - return "pingone_authorize_api_service_deployment" -} +// import ( +// "fmt" + +// "github.com/patrickcping/pingone-go-sdk-v2/authorize" +// "github.com/pingidentity/pingcli/internal/connector" +// "github.com/pingidentity/pingcli/internal/connector/common" +// "github.com/pingidentity/pingcli/internal/connector/pingone" +// "github.com/pingidentity/pingcli/internal/logger" +// ) + +// // Verify that the resource satisfies the exportable resource interface +// var ( +// _ connector.ExportableResource = &PingoneAuthorizeAPIServiceDeploymentResource{} +// ) + +// type PingoneAuthorizeAPIServiceDeploymentResource struct { +// clientInfo *connector.PingOneClientInfo +// } + +// // Utility method for creating a PingoneAuthorizeAPIServiceDeploymentResource +// func AuthorizeAPIServiceDeployment(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeAPIServiceDeploymentResource { +// return &PingoneAuthorizeAPIServiceDeploymentResource{ +// clientInfo: clientInfo, +// } +// } + +// func (r *PingoneAuthorizeAPIServiceDeploymentResource) ExportAll() (*[]connector.ImportBlock, error) { +// l := logger.Get() +// l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + +// importBlocks := []connector.ImportBlock{} + +// apiServiceData, err := r.getAPIServiceData() +// if err != nil { +// return nil, err +// } + +// for apiServiceId, apiServiceName := range apiServiceData { +// apiServiceDeploymentData, err := r.getAPIServiceDeploymentData(apiServiceId) +// if err != nil { +// return nil, err +// } + +// for apiServiceDeploymentId, apiServiceDeploymentName := range apiServiceDeploymentData { +// commentData := map[string]string{ +// "API Service ID": apiServiceId, +// "API Service Name": apiServiceName, +// "API Service Deployment ID": apiServiceDeploymentId, +// "API Service Deployment Name": apiServiceDeploymentName, +// "Export Environment ID": r.clientInfo.ExportEnvironmentID, +// "Resource Type": r.ResourceType(), +// } + +// importBlock := connector.ImportBlock{ +// ResourceType: r.ResourceType(), +// ResourceName: fmt.Sprintf("%s_%s", apiServiceName, apiServiceDeploymentId), +// ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, apiServiceId, apiServiceDeploymentId), +// CommentInformation: common.GenerateCommentInformation(commentData), +// } + +// importBlocks = append(importBlocks, importBlock) +// } +// } + +// return &importBlocks, nil +// } + +// func (r *PingoneAuthorizeAPIServiceDeploymentResource) getAPIServiceData() (map[string]string, error) { +// apiServiceData := make(map[string]string) + +// iter := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() +// apiServices, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.APIServer](iter, "ReadAllAPIServers", "GetAPIServers", r.ResourceType()) +// if err != nil { +// return nil, err +// } + +// for _, apiService := range apiServices { +// apiServiceId, apiServiceIdOk := apiService.GetIdOk() +// apiServiceName, apiServiceNameOk := apiService.GetNameOk() + +// if apiServiceIdOk && apiServiceNameOk { +// apiServiceData[*apiServiceId] = *apiServiceName +// } +// } + +// return apiServiceData, nil +// } + +// func (r *PingoneAuthorizeAPIServiceDeploymentResource) getAPIServiceDeploymentData(apiServiceId string) (map[string]string, error) { +// apiServiceDeploymentData := make(map[string]string) + +// iter := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServerDeploymentApi.ReadDeploymentStatus(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, apiServiceId).Execute() +// apiServiceDeployments, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.APIServerDeployment](iter, "ReadAPIServiceDeployments", "GetRolePermissions", r.ResourceType()) +// if err != nil { +// return nil, err +// } + +// for _, apiServiceDeployment := range apiServiceDeployments { +// apiServiceDeploymentId, apiServiceDeploymentIdOk := apiServiceDeployment.GetIdOk() +// apiServiceDeploymentName, apiServiceDeploymentNameOk := apiServiceDeployment.GetNameOk() + +// if apiServiceDeploymentIdOk && apiServiceDeploymentNameOk { +// apiServiceDeploymentData[*apiServiceDeploymentId] = *apiServiceDeploymentName +// } +// } + +// return apiServiceDeploymentData, nil +// } + +// func (r *PingoneAuthorizeAPIServiceDeploymentResource) ResourceType() string { +// return "pingone_authorize_api_service_deployment" +// } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go index cc31d9f6..bd05f4f7 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go @@ -1,27 +1,27 @@ package resources_test -import ( - "fmt" - "testing" +// import ( +// "fmt" +// "testing" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingcli/internal/testing/testutils" -) +// "github.com/pingidentity/pingcli/internal/connector" +// "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" +// "github.com/pingidentity/pingcli/internal/testing/testutils" +// ) -func TestAuthorizeAPIServiceDeploymentExport(t *testing.T) { - // Get initialized apiClient and resource - PingOneClientInfo := testutils.GetPingOneClientInfo(t) - resource := resources.AuthorizeAPIServiceDeployment(PingOneClientInfo) +// func TestAuthorizeAPIServiceDeploymentExport(t *testing.T) { +// // Get initialized apiClient and resource +// PingOneClientInfo := testutils.GetPingOneClientInfo(t) +// resource := resources.AuthorizeAPIServiceDeployment(PingOneClientInfo) - // Defined the expected ImportBlocks for the resource - expectedImportBlocks := []connector.ImportBlock{ - { - ResourceType: "pingone_authorize_api_service_deployment", - ResourceName: "Test Authorize API Service Deployment", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), - }, - } +// // Defined the expected ImportBlocks for the resource +// expectedImportBlocks := []connector.ImportBlock{ +// { +// ResourceType: "pingone_authorize_api_service_deployment", +// ResourceName: "Test Authorize API Service Deployment", +// ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), +// }, +// } - testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -} +// testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +// } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go index 5c0008b2..242ceb16 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,69 +28,85 @@ func AuthorizeAPIServiceOperation(clientInfo *connector.PingOneClientInfo) *Ping func (r *PingoneAuthorizeAPIServiceOperationResource) 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{} + + apiServiceData, err := r.getAPIServiceData() + if err != nil { + return nil, err + } + + for apiServiceId, apiServiceName := range apiServiceData { + apiServiceOperationData, err := r.getAPIServiceOperationData(apiServiceId) + if err != nil { + return nil, err + } - apiExecuteAPIServersFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiAPIServersFunctionName := "ReadAllAPIServers" + for apiServiceOperationId, apiServiceOperationName := range apiServiceOperationData { + commentData := map[string]string{ + "API Service ID": apiServiceId, + "API Service Name": apiServiceName, + "API Service Operation ID": apiServiceOperationId, + "API Service Operation Name": apiServiceOperationName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", apiServiceName, apiServiceOperationName), + ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, apiServiceId, apiServiceOperationId), + CommentInformation: common.GenerateCommentInformation(commentData), + } - embedded, err := common.GetAuthorizeEmbedded(apiExecuteAPIServersFunc, apiAPIServersFunctionName, r.ResourceType()) + importBlocks = append(importBlocks, importBlock) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeAPIServiceOperationResource) getAPIServiceData() (map[string]string, error) { + apiServiceData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + apiServices, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.APIServer](iter, "ReadAllAPIServers", "GetApiServers", r.ResourceType()) if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for _, apiService := range apiServices { + apiServiceId, apiServiceIdOk := apiService.GetIdOk() + apiServiceName, apiServiceNameOk := apiService.GetNameOk() - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + if apiServiceIdOk && apiServiceNameOk { + apiServiceData[*apiServiceId] = *apiServiceName + } + } - for _, apiServer := range embedded.GetApiServers() { - var ( - apiServerId *string - apiServerIdOk bool - apiServerName *string - apiServerNameOk bool - ) + return apiServiceData, nil +} - apiServerId, apiServerIdOk = apiServer.GetIdOk() - apiServerName, apiServerNameOk = apiServer.GetNameOk() +func (r *PingoneAuthorizeAPIServiceOperationResource) getAPIServiceOperationData(apiServiceId string) (map[string]string, error) { + apiServiceOperationData := make(map[string]string) - if apiServerIdOk && apiServerNameOk { - apiExecuteOperationsFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServerOperationsApi.ReadAllAPIServerOperations(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *apiServerId).Execute - apiOperationsFunctionName := "ReadAllAPIServerOperations" + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServerOperationsApi.ReadAllAPIServerOperations(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, apiServiceId).Execute() + apiServiceOperations, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.APIServerOperation](iter, "ReadAllAPIServerOperations", "GetOperations", r.ResourceType()) + if err != nil { + return nil, err + } - operationsEmbedded, err := common.GetAuthorizeEmbedded(apiExecuteOperationsFunc, apiOperationsFunctionName, r.ResourceType()) - if err != nil { - return nil, err - } + for _, apiServiceOperation := range apiServiceOperations { + apiServiceOperationId, apiServiceOperationIdOk := apiServiceOperation.GetIdOk() + apiServiceOperationName, apiServiceOperationNameOk := apiServiceOperation.GetNameOk() - for _, apiServerOperation := range operationsEmbedded.GetOperations() { - apiServerOperationId, apiServerOperationIdOk := apiServerOperation.GetIdOk() - apiServerOperationName, apiServerOperationNameOk := apiServerOperation.GetNameOk() - - if apiServerOperationNameOk && apiServerOperationIdOk { - - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize API Service Name": *apiServerName, - "Authorize API Service ID": *apiServerId, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize API Service Operation Name": *apiServerOperationName, - "Authorize API Service Operation ID": *apiServerOperationId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_%s", *apiServerName, *apiServerOperationName), - ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, *apiServerId, *apiServerOperationId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) - - } - } + if apiServiceOperationIdOk && apiServiceOperationNameOk { + apiServiceOperationData[*apiServiceOperationId] = *apiServiceOperationName } } - return &importBlocks, nil + return apiServiceOperationData, nil } func (r *PingoneAuthorizeAPIServiceOperationResource) ResourceType() string { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go index d0107a7b..46a700d3 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,45 +28,57 @@ func AuthorizeApplicationRole(clientInfo *connector.PingOneClientInfo) *PingoneA func (r *PingoneAuthorizeApplicationRoleResource) 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.AuthorizeAPIClient.ApplicationRolesApi.ReadApplicationRoles(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ReadApplicationRoles" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + ApplicationRoleData, err := r.getApplicationRoleData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for applicationRoleId, applicationRoleName := range ApplicationRoleData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Application Role ID": applicationRoleId, + "Application Role Name": applicationRoleName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, appRole := range embedded.GetRoles() { - appRoleName, appRoleNameOk := appRole.GetNameOk() - appRoleId, appRoleIdOk := appRole.GetIdOk() - - if appRoleNameOk && appRoleIdOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Application Role Name": *appRoleName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Application Role ID": *appRoleId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *appRoleName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *appRoleId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: applicationRoleName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, applicationRoleId), + CommentInformation: common.GenerateCommentInformation(commentData), } + + importBlocks = append(importBlocks, importBlock) } return &importBlocks, nil } +func (r *PingoneAuthorizeApplicationRoleResource) getApplicationRoleData() (map[string]string, error) { + applicationRoleData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolesApi.ReadApplicationRoles(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + applicationRoles, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationRole](iter, "ApplicationRolesApi", "GetRoles", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, applicationRole := range applicationRoles { + applicationRoleId, applicationRoleIdOk := applicationRole.GetIdOk() + applicationRoleName, applicationRoleNameOk := applicationRole.GetNameOk() + + if applicationRoleIdOk && applicationRoleNameOk { + applicationRoleData[*applicationRoleId] = *applicationRoleName + } + } + + return applicationRoleData, nil +} + func (r *PingoneAuthorizeApplicationRoleResource) ResourceType() string { return "pingone_authorize_application_role" } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go index 0c5d0948..dba9f34e 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,70 +28,85 @@ func AuthorizeApplicationRolePermission(clientInfo *connector.PingOneClientInfo) func (r *PingoneAuthorizeApplicationRolePermissionResource) 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()) - - apiExecuteApplicationRoleFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolesApi.ReadApplicationRoles(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiApplicationRoleFunctionName := "ReadApplicationRoles" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteApplicationRoleFunc, apiApplicationRoleFunctionName, r.ResourceType()) + applicationRoleData, err := r.getApplicationRoleData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for appRoleId, appRoleName := range applicationRoleData { + appRolePermissionData, err := r.getApplicationRolePermissionData(appRoleId) + if err != nil { + return nil, err + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + for appRolePermissionId, _ := range appRolePermissionData { + commentData := map[string]string{ + "Application Role ID": appRoleId, + "Application Role Name": appRoleName, + "Application Role Permission ID": appRolePermissionId, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Resource Type": r.ResourceType(), + } - for _, applicationRole := range embedded.GetRoles() { - var ( - applicationRoleId *string - applicationRoleIdOk bool - applicationRoleName *string - applicationRoleNameOk bool - ) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", appRoleName, appRolePermissionId), + ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, appRoleId, appRolePermissionId), + CommentInformation: common.GenerateCommentInformation(commentData), + } - applicationRoleId, applicationRoleIdOk = applicationRole.GetIdOk() - applicationRoleName, applicationRoleNameOk = applicationRole.GetNameOk() + importBlocks = append(importBlocks, importBlock) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeApplicationRolePermissionResource) getApplicationRoleData() (map[string]string, error) { + applicationRoleData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolesApi.ReadApplicationRoles(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + applicationRoles, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationRole](iter, "ApplicationRolesApi", "GetRoles", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, applicationRole := range applicationRoles { + applicationRoleId, applicationRoleIdOk := applicationRole.GetIdOk() + applicationRoleName, applicationRoleNameOk := applicationRole.GetNameOk() if applicationRoleIdOk && applicationRoleNameOk { - apiExecutePermissionsFunc := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationResourcePermissionsApi.ReadApplicationPermissions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *applicationRoleId).Execute - apiPermissionsFunctionName := "ReadApplicationPermissions" + applicationRoleData[*applicationRoleId] = *applicationRoleName + } + } - permissionsEmbedded, err := common.GetAuthorizeEmbedded(apiExecutePermissionsFunc, apiPermissionsFunctionName, r.ResourceType()) - if err != nil { - return nil, err - } + return applicationRoleData, nil +} - for _, applicationRolePermission := range permissionsEmbedded.GetPermissions() { - if v := applicationRolePermission.ApplicationRolePermission; v != nil { - applicationRolePermissionId, applicationRolePermissionIdOk := v.GetIdOk() - - if applicationRolePermissionIdOk { - - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Application Role Name": *applicationRoleName, - "Authorize Application Role ID": *applicationRoleId, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Application Role Permission ID": *applicationRolePermissionId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_%s", *applicationRoleName, *applicationRolePermissionId), - ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, *applicationRoleId, *applicationRolePermissionId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) - } - } - } +func (r *PingoneAuthorizeApplicationRolePermissionResource) getApplicationRolePermissionData(appRoleId string) (map[string]string, error) { + applicationRolePermissionData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolePermissionsApi.ReadApplicationRolePermissions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, appRoleId).Execute() + applicationRolePermissions, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationRolePermission](iter, "ReadApplicationRolePermissions", "GetRolePermissions", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, applicationRolePermission := range applicationRolePermissions { + applicationRolePermissionId, applicationRolePermissionIdOk := applicationRolePermission.GetIdOk() + + if applicationRolePermissionIdOk { + applicationRolePermissionData[*applicationRolePermissionId] = *applicationRolePermissionId } } - return &importBlocks, nil + return applicationRolePermissionData, nil } func (r *PingoneAuthorizeApplicationRolePermissionResource) ResourceType() string { - return "pingone_authorize_api_service_operation" + return "pingone_authorize_application_role_permission" } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go index 295f5d74..4902a636 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,43 +28,55 @@ func AuthorizeDecisionEndpoint(clientInfo *connector.PingOneClientInfo) *Pingone func (r *PingoneAuthorizeDecisionEndpointResource) 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.AuthorizeAPIClient.PolicyDecisionManagementApi.ReadAllDecisionEndpoints(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ReadAllDecisionEndpoints" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + DecisionEndpointData, err := r.getDecisionEndpointData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for decisionEndpointId, decisionEndpointName := range DecisionEndpointData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Decision Endpoint ID": decisionEndpointId, + "Decision Endpoint Name": decisionEndpointName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: decisionEndpointName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, decisionEndpointId), + CommentInformation: common.GenerateCommentInformation(commentData), + } - for _, decisionEndpoint := range embedded.GetDecisionEndpoints() { - decisionEndpointName, decisionEndpointNameOk := decisionEndpoint.GetNameOk() + importBlocks = append(importBlocks, importBlock) + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeDecisionEndpointResource) getDecisionEndpointData() (map[string]string, error) { + decisionEndpointData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.PolicyDecisionManagementApi.ReadAllDecisionEndpoints(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + decisionEndpoints, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.DecisionEndpoint](iter, "ReadAllDecisionEndpoints", "GetDecisionEndpoints", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, decisionEndpoint := range decisionEndpoints { decisionEndpointId, decisionEndpointIdOk := decisionEndpoint.GetIdOk() + decisionEndpointName, decisionEndpointNameOk := decisionEndpoint.GetNameOk() - if decisionEndpointNameOk && decisionEndpointIdOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Decision Endpoint Name": *decisionEndpointName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Decision Endpoint ID": *decisionEndpointId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *decisionEndpointName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *decisionEndpointId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + if decisionEndpointIdOk && decisionEndpointNameOk { + decisionEndpointData[*decisionEndpointId] = *decisionEndpointName } } - return &importBlocks, nil + return decisionEndpointData, nil } func (r *PingoneAuthorizeDecisionEndpointResource) ResourceType() string { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go index 4cf644b4..8655baa5 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,55 +28,68 @@ func AuthorizePolicyManagementPolicy(clientInfo *connector.PingOneClientInfo) *P func (r *PingoneAuthorizePolicyManagementPolicyResource) 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.AuthorizeAPIClient.AuthorizeEditorPoliciesApi.ListRootPolicies(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ListRootPolicies" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + editorPolicyData, err := r.getEditorPolicyData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for editorPolicyId, editorPolicyName := range editorPolicyData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Editor Policy ID": editorPolicyId, + "Editor Policy Name": editorPolicyName, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: editorPolicyName, + ResourceID: fmt.Sprintf("%s", r.clientInfo.ExportEnvironmentID), + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + return &importBlocks, nil +} - for _, authorizationPolicy := range embedded.GetAuthorizationPolicies() { - authorizationPolicyName, authorizationPolicyNameOk := authorizationPolicy.GetNameOk() - authorizationPolicyId, authorizationPolicyIdOk := authorizationPolicy.GetIdOk() +func (r *PingoneAuthorizePolicyManagementPolicyResource) getEditorPolicyData() (map[string]string, error) { + editorPolicyData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorPoliciesApi.ListRootPolicies(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + editorPolicys, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataPoliciesReferenceablePolicyDTO](iter, "ListRootPolicies", "GetAuthorizationPolicies", r.ResourceType()) + if err != nil { + return nil, err + } - exportableEntity := true + for _, editorPolicy := range editorPolicys { - if managedEntity, ok := authorizationPolicy.GetManagedEntityOk(); ok { - if restrictions, ok := managedEntity.GetRestrictionsOk(); ok { - if restrictions.GetReadOnly() { - exportableEntity = false + if me, ok := editorPolicy.GetManagedEntityOk(); ok { + if restrictions, ok := me.GetRestrictionsOk(); ok { + if readOnly, ok := restrictions.GetReadOnlyOk(); ok { + if *readOnly { + continue + } } } } - if authorizationPolicyNameOk && authorizationPolicyIdOk && exportableEntity { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Policy Management Authorization Policy Name": *authorizationPolicyName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Policy Management Authorization Policy ID": *authorizationPolicyId, - } + editorPolicyId, editorPolicyIdOk := editorPolicy.GetIdOk() + editorPolicyName, editorPolicyNameOk := editorPolicy.GetNameOk() - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authorizationPolicyName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationPolicyId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + if editorPolicyIdOk && editorPolicyNameOk { + editorPolicyData[*editorPolicyId] = *editorPolicyName } } - return &importBlocks, nil + return editorPolicyData, nil } func (r *PingoneAuthorizePolicyManagementPolicyResource) ResourceType() string { - return "pingone_authorize_policy_management_policy" + return "pingone_authorize_policy_management_root_policy" } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go index ce45b34a..525e7018 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,45 +28,58 @@ func AuthorizePolicyManagementRule(clientInfo *connector.PingOneClientInfo) *Pin func (r *PingoneAuthorizePolicyManagementRuleResource) 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.AuthorizeAPIClient.AuthorizeEditorRulesApi.ListRules(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ListRules" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + editorRuleData, err := r.getEditorRuleData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for editorRuleId, editorRuleName := range editorRuleData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Editor Rule ID": editorRuleId, + "Editor Rule Name": editorRuleName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, authorizationRule := range embedded.GetAuthorizationRules() { - authorizationRuleName, authorizationRuleNameOk := authorizationRule.GetNameOk() - authorizationRuleId, authorizationRuleIdOk := authorizationRule.GetIdOk() - - if authorizationRuleNameOk && authorizationRuleIdOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Policy Management Authorization Rule Name": *authorizationRuleName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Policy Management Authorization Rule ID": *authorizationRuleId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authorizationRuleName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationRuleId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: editorRuleName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorRuleId), + CommentInformation: common.GenerateCommentInformation(commentData), } + + importBlocks = append(importBlocks, importBlock) } return &importBlocks, nil } +func (r *PingoneAuthorizePolicyManagementRuleResource) getEditorRuleData() (map[string]string, error) { + editorRuleData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorRulesApi.ListRules(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + editorRules, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataRulesReferenceableRuleDTO](iter, "ListRules", "GetAuthorizationRules", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, editorRule := range editorRules { + + editorRuleId, editorRuleIdOk := editorRule.GetIdOk() + editorRuleName, editorRuleNameOk := editorRule.GetNameOk() + + if editorRuleIdOk && editorRuleNameOk { + editorRuleData[*editorRuleId] = *editorRuleName + } + } + + return editorRuleData, nil +} + func (r *PingoneAuthorizePolicyManagementRuleResource) ResourceType() string { return "pingone_authorize_policy_management_rule" } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go index 0f5d53a7..fe591d1d 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,45 +28,57 @@ func AuthorizePolicyManagementStatement(clientInfo *connector.PingOneClientInfo) func (r *PingoneAuthorizePolicyManagementStatementResource) 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.AuthorizeAPIClient.AuthorizeEditorStatementsApi.ListStatements(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ListStatements" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + editorStatementData, err := r.getEditorStatementData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for editorStatementId, editorStatementName := range editorStatementData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Editor Statement ID": editorStatementId, + "Editor Statement Name": editorStatementName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, authorizationStatement := range embedded.GetAuthorizationStatements() { - authorizationStatementName, authorizationStatementNameOk := authorizationStatement.GetNameOk() - authorizationStatementId, authorizationStatementIdOk := authorizationStatement.GetIdOk() - - if authorizationStatementNameOk && authorizationStatementIdOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Policy Management Authorization Statement Name": *authorizationStatementName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Policy Management Authorization Statement ID": *authorizationStatementId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authorizationStatementName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationStatementId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: editorStatementName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorStatementId), + CommentInformation: common.GenerateCommentInformation(commentData), } + + importBlocks = append(importBlocks, importBlock) } return &importBlocks, nil } +func (r *PingoneAuthorizePolicyManagementStatementResource) getEditorStatementData() (map[string]string, error) { + editorStatementData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorStatementsApi.ListStatements(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + editorStatements, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataStatementsReferenceableStatementDTO](iter, "ListStatements", "GetAuthorizationStatements", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, editorStatement := range editorStatements { + editorStatementId, editorStatementIdOk := editorStatement.GetIdOk() + editorStatementName, editorStatementNameOk := editorStatement.GetNameOk() + + if editorStatementIdOk && editorStatementNameOk { + editorStatementData[*editorStatementId] = *editorStatementName + } + } + + return editorStatementData, nil +} + func (r *PingoneAuthorizePolicyManagementStatementResource) ResourceType() string { return "pingone_authorize_policy_management_statement" } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go index a9d9e6ea..deaedaa2 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,53 +28,66 @@ func AuthorizeTrustFrameworkAttribute(clientInfo *connector.PingOneClientInfo) * func (r *PingoneAuthorizeTrustFrameworkAttributeResource) 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.AuthorizeAPIClient.AuthorizeEditorAttributesApi.ListAttributes(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ListAttributes" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + editorAttributeData, err := r.getEditorAttributeData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for editorAttributeId, editorAttributeName := range editorAttributeData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Editor Attribute ID": editorAttributeId, + "Editor Attribute Name": editorAttributeName, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: editorAttributeName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorAttributeId), + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + return &importBlocks, nil +} - for _, authorizationAttribute := range embedded.GetAuthorizationAttributes() { - authorizationAttributeName, authorizationAttributeNameOk := authorizationAttribute.GetFullNameOk() - authorizationAttributeId, authorizationAttributeIdOk := authorizationAttribute.GetIdOk() +func (r *PingoneAuthorizeTrustFrameworkAttributeResource) getEditorAttributeData() (map[string]string, error) { + editorAttributeData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorAttributesApi.ListAttributes(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + editorAttributes, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataDefinitionsAttributeDefinitionDTO](iter, "ListAttributes", "GetAuthorizationAttributes", r.ResourceType()) + if err != nil { + return nil, err + } - exportableEntity := true + for _, editorAttribute := range editorAttributes { - if managedEntity, ok := authorizationAttribute.GetManagedEntityOk(); ok { - if restrictions, ok := managedEntity.GetRestrictionsOk(); ok { - if restrictions.GetReadOnly() { - exportableEntity = false + if me, ok := editorAttribute.GetManagedEntityOk(); ok { + if restrictions, ok := me.GetRestrictionsOk(); ok { + if readOnly, ok := restrictions.GetReadOnlyOk(); ok { + if *readOnly { + continue + } } } } - if authorizationAttributeNameOk && authorizationAttributeIdOk && exportableEntity { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Trust Framework Attribute Name": *authorizationAttributeName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Trust Framework Attribute ID": *authorizationAttributeId, - } + editorAttributeId, editorAttributeIdOk := editorAttribute.GetIdOk() + editorAttributeName, editorAttributeNameOk := editorAttribute.GetFullNameOk() - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authorizationAttributeName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationAttributeId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + if editorAttributeIdOk && editorAttributeNameOk { + editorAttributeData[*editorAttributeId] = *editorAttributeName } } - return &importBlocks, nil + return editorAttributeData, nil } func (r *PingoneAuthorizeTrustFrameworkAttributeResource) ResourceType() string { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go index 4fc3af4c..78a02170 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,45 +28,58 @@ func AuthorizeTrustFrameworkCondition(clientInfo *connector.PingOneClientInfo) * func (r *PingoneAuthorizeTrustFrameworkConditionResource) 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.AuthorizeAPIClient.AuthorizeEditorConditionsApi.ListConditions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ListConditions" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + editorConditionData, err := r.getEditorConditionData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for editorConditionId, editorConditionName := range editorConditionData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Editor Condition ID": editorConditionId, + "Editor Condition Name": editorConditionName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, authorizationCondition := range embedded.GetAuthorizationConditions() { - authorizationConditionName, authorizationConditionNameOk := authorizationCondition.GetFullNameOk() - authorizationConditionId, authorizationConditionIdOk := authorizationCondition.GetIdOk() - - if authorizationConditionNameOk && authorizationConditionIdOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Trust Framework Condition Name": *authorizationConditionName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Trust Framework Condition ID": *authorizationConditionId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authorizationConditionName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationConditionId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: editorConditionName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorConditionId), + CommentInformation: common.GenerateCommentInformation(commentData), } + + importBlocks = append(importBlocks, importBlock) } return &importBlocks, nil } +func (r *PingoneAuthorizeTrustFrameworkConditionResource) getEditorConditionData() (map[string]string, error) { + editorConditionData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorConditionsApi.ListConditions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + editorConditions, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataDefinitionsConditionDefinitionDTO](iter, "ListConditions", "GetAuthorizationConditions", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, editorCondition := range editorConditions { + + editorConditionId, editorConditionIdOk := editorCondition.GetIdOk() + editorConditionName, editorConditionNameOk := editorCondition.GetFullNameOk() + + if editorConditionIdOk && editorConditionNameOk { + editorConditionData[*editorConditionId] = *editorConditionName + } + } + + return editorConditionData, nil +} + func (r *PingoneAuthorizeTrustFrameworkConditionResource) ResourceType() string { return "pingone_authorize_trust_framework_condition" } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go index 01325ca3..2e01bd52 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go @@ -3,8 +3,10 @@ package resources import ( "fmt" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -26,45 +28,58 @@ func AuthorizeTrustFrameworkProcessor(clientInfo *connector.PingOneClientInfo) * func (r *PingoneAuthorizeTrustFrameworkProcessorResource) 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.AuthorizeAPIClient.AuthorizeEditorProcessorsApi.ListProcessors(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ListProcessors" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + editorProcessorData, err := r.getEditorProcessorData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for editorProcessorId, editorProcessorName := range editorProcessorData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Editor Processor ID": editorProcessorId, + "Editor Processor Name": editorProcessorName, + "Resource Type": r.ResourceType(), + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) - - for _, authorizationProcessor := range embedded.GetAuthorizationProcessors() { - authorizationProcessorName, authorizationProcessorNameOk := authorizationProcessor.GetFullNameOk() - authorizationProcessorId, authorizationProcessorIdOk := authorizationProcessor.GetIdOk() - - if authorizationProcessorNameOk && authorizationProcessorIdOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Trust Framework Processor Name": *authorizationProcessorName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Trust Framework Processor ID": *authorizationProcessorId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authorizationProcessorName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationProcessorId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: editorProcessorName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorProcessorId), + CommentInformation: common.GenerateCommentInformation(commentData), } + + importBlocks = append(importBlocks, importBlock) } return &importBlocks, nil } +func (r *PingoneAuthorizeTrustFrameworkProcessorResource) getEditorProcessorData() (map[string]string, error) { + editorProcessorData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorProcessorsApi.ListProcessors(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + editorProcessors, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataDefinitionsProcessorDefinitionDTO](iter, "ListProcessors", "GetAuthorizationProcessors", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, editorProcessor := range editorProcessors { + + editorProcessorId, editorProcessorIdOk := editorProcessor.GetIdOk() + editorProcessorName, editorProcessorNameOk := editorProcessor.GetFullNameOk() + + if editorProcessorIdOk && editorProcessorNameOk { + editorProcessorData[*editorProcessorId] = *editorProcessorName + } + } + + return editorProcessorData, nil +} + func (r *PingoneAuthorizeTrustFrameworkProcessorResource) ResourceType() string { return "pingone_authorize_trust_framework_processor" } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go index 38458aa5..dfa73199 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go @@ -6,6 +6,7 @@ import ( "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/pingidentity/pingcli/internal/connector" "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" "github.com/pingidentity/pingcli/internal/logger" ) @@ -27,62 +28,74 @@ func AuthorizeTrustFrameworkService(clientInfo *connector.PingOneClientInfo) *Pi func (r *PingoneAuthorizeTrustFrameworkServiceResource) 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.AuthorizeAPIClient.AuthorizeEditorServicesApi.ListServices(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute - apiFunctionName := "ListServices" + importBlocks := []connector.ImportBlock{} - embedded, err := common.GetAuthorizeEmbedded(apiExecuteFunc, apiFunctionName, r.ResourceType()) + editorServiceData, err := r.getEditorServiceData() if err != nil { return nil, err } - importBlocks := []connector.ImportBlock{} + for editorServiceId, editorServiceName := range editorServiceData { + commentData := map[string]string{ + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Editor Service ID": editorServiceId, + "Editor Service Name": editorServiceName, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: editorServiceName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorServiceId), + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } - l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType()) + return &importBlocks, nil +} + +func (r *PingoneAuthorizeTrustFrameworkServiceResource) getEditorServiceData() (map[string]string, error) { + editorServiceData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorServicesApi.ListServices(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + editorServices, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataDefinitionsServiceDefinitionDTO](iter, "ListServices", "GetAuthorizationServices", r.ResourceType()) + if err != nil { + return nil, err + } - for _, authorizationService := range embedded.GetAuthorizationServices() { + for _, editorService := range editorServices { var ( - authorizationServiceId *string - authorizationServiceIdOk bool - authorizationServiceName *string - authorizationServiceNameOk bool + editorServiceId *string + editorServiceIdOk bool + editorServiceName *string + editorServiceNameOk bool ) - switch t := authorizationService.GetActualInstance().(type) { + switch t := editorService.GetActualInstance().(type) { case *authorize.AuthorizeEditorDataServicesConnectorServiceDefinitionDTO: - authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() - authorizationServiceName, authorizationServiceNameOk = t.GetFullNameOk() + editorServiceId, editorServiceIdOk = t.GetIdOk() + editorServiceName, editorServiceNameOk = t.GetFullNameOk() case *authorize.AuthorizeEditorDataServicesHttpServiceDefinitionDTO: - authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() - authorizationServiceName, authorizationServiceNameOk = t.GetFullNameOk() + editorServiceId, editorServiceIdOk = t.GetIdOk() + editorServiceName, editorServiceNameOk = t.GetFullNameOk() case *authorize.AuthorizeEditorDataServicesNoneServiceDefinitionDTO: - authorizationServiceId, authorizationServiceIdOk = t.GetIdOk() - authorizationServiceName, authorizationServiceNameOk = t.GetFullNameOk() + editorServiceId, editorServiceIdOk = t.GetIdOk() + editorServiceName, editorServiceNameOk = t.GetFullNameOk() default: continue } - if authorizationServiceNameOk && authorizationServiceIdOk { - commentData := map[string]string{ - "Resource Type": r.ResourceType(), - "Authorize Trust Framework Service Name": *authorizationServiceName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Authorize Trust Framework Service ID": *authorizationServiceId, - } - - importBlocks = append(importBlocks, connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: *authorizationServiceName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *authorizationServiceId), - CommentInformation: common.GenerateCommentInformation(commentData), - }) + if editorServiceIdOk && editorServiceNameOk { + editorServiceData[*editorServiceId] = *editorServiceName } } - return &importBlocks, nil + return editorServiceData, nil } func (r *PingoneAuthorizeTrustFrameworkServiceResource) ResourceType() string { diff --git a/internal/connector/pingone/common.go b/internal/connector/pingone/common.go index 122a7e63..1456cd08 100644 --- a/internal/connector/pingone/common.go +++ b/internal/connector/pingone/common.go @@ -5,6 +5,7 @@ import ( "net/http" "reflect" + "github.com/patrickcping/pingone-go-sdk-v2/authorize" "github.com/patrickcping/pingone-go-sdk-v2/management" "github.com/patrickcping/pingone-go-sdk-v2/mfa" "github.com/patrickcping/pingone-go-sdk-v2/risk" @@ -34,6 +35,41 @@ func CheckSingletonResource(response *http.Response, err error, apiFuncName, res return true, nil } +func GetAuthorizeAPIObjectsFromIterator[T any](iter authorize.EntityArrayPagedIterator, clientFuncName, extractionFuncName, resourceType string) ([]T, error) { + apiObjects := []T{} + + for cursor, err := range iter { + ok, err := common.HandleClientResponse(cursor.HTTPResponse, err, clientFuncName, resourceType) + if err != nil { + return nil, err + } + // A warning was given when handling the client response. Return nil apiObjects to skip export of resource + if !ok { + return nil, nil + } + + nilErr := common.DataNilError(resourceType, cursor.HTTPResponse) + + if cursor.EntityArray == nil { + return nil, nilErr + } + + embedded, embeddedOk := cursor.EntityArray.GetEmbeddedOk() + if !embeddedOk { + return nil, nilErr + } + + apiObject, err := getAPIObjectFromEmbedded[T](reflect.ValueOf(embedded), extractionFuncName, resourceType) + if err != nil { + output.SystemError(err.Error(), nil) + } + + apiObjects = append(apiObjects, apiObject...) + } + + return apiObjects, nil +} + func GetManagementAPIObjectsFromIterator[T any](iter management.EntityArrayPagedIterator, clientFuncName, extractionFuncName, resourceType string) ([]T, error) { apiObjects := []T{} From 1432fca8cd26e655215d730da9d7d37d9fe3c326 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Wed, 26 Feb 2025 15:19:14 +0000 Subject: [PATCH 08/29] Remove unreleased authorize editor resources --- .../authorize/pingone_authorize_connector.go | 7 -- .../pingone_authorize_connector_test.go | 35 ------ ...gone_authorize_policy_management_policy.go | 95 ---------------- ...authorize_policy_management_policy_test.go | 27 ----- ...ingone_authorize_policy_management_rule.go | 85 --------------- ...e_authorize_policy_management_rule_test.go | 27 ----- ...e_authorize_policy_management_statement.go | 84 -------------- ...horize_policy_management_statement_test.go | 27 ----- ...one_authorize_trust_framework_attribute.go | 95 ---------------- ...uthorize_trust_framework_attribute_test.go | 27 ----- ...one_authorize_trust_framework_condition.go | 85 --------------- ...uthorize_trust_framework_condition_test.go | 27 ----- ...one_authorize_trust_framework_processor.go | 85 --------------- ...uthorize_trust_framework_processor_test.go | 27 ----- ...ngone_authorize_trust_framework_service.go | 103 ------------------ ..._authorize_trust_framework_service_test.go | 27 ----- 16 files changed, 863 deletions(-) delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go delete mode 100644 internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector.go b/internal/connector/pingone/authorize/pingone_authorize_connector.go index f2de6344..8f1c7b1a 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector.go @@ -48,13 +48,6 @@ func (c *PingoneAuthorizeConnector) Export(format, outputDir string, overwriteEx resources.AuthorizeApplicationRole(&c.clientInfo), resources.AuthorizeApplicationRolePermission(&c.clientInfo), resources.AuthorizeDecisionEndpoint(&c.clientInfo), - resources.AuthorizePolicyManagementPolicy(&c.clientInfo), - resources.AuthorizePolicyManagementRule(&c.clientInfo), - resources.AuthorizePolicyManagementStatement(&c.clientInfo), - resources.AuthorizeTrustFrameworkAttribute(&c.clientInfo), - resources.AuthorizeTrustFrameworkCondition(&c.clientInfo), - resources.AuthorizeTrustFrameworkProcessor(&c.clientInfo), - resources.AuthorizeTrustFrameworkService(&c.clientInfo), } return common.WriteFiles(exportableResources, format, outputDir, overwriteExport) diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go index 8c2216e9..ebe5985f 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go @@ -49,41 +49,6 @@ func TestAuthorizeTerraformPlan(t *testing.T) { resource: resources.AuthorizeDecisionEndpoint(PingOneClientInfo), ignoredErrors: nil, }, - { - name: "AuthorizePolicyManagementPolicy", - resource: resources.AuthorizePolicyManagementPolicy(PingOneClientInfo), - ignoredErrors: nil, - }, - { - name: "AuthorizePolicyManagementRule", - resource: resources.AuthorizePolicyManagementRule(PingOneClientInfo), - ignoredErrors: nil, - }, - { - name: "AuthorizePolicyManagementStatement", - resource: resources.AuthorizePolicyManagementStatement(PingOneClientInfo), - ignoredErrors: nil, - }, - { - name: "AuthorizeTrustFrameworkAttribute", - resource: resources.AuthorizeTrustFrameworkAttribute(PingOneClientInfo), - ignoredErrors: nil, - }, - { - name: "AuthorizeTrustFrameworkCondition", - resource: resources.AuthorizeTrustFrameworkCondition(PingOneClientInfo), - ignoredErrors: nil, - }, - { - name: "AuthorizeTrustFrameworkProcessor", - resource: resources.AuthorizeTrustFrameworkProcessor(PingOneClientInfo), - ignoredErrors: nil, - }, - { - name: "AuthorizeTrustFrameworkService", - resource: resources.AuthorizeTrustFrameworkService(PingOneClientInfo), - ignoredErrors: nil, - }, } for _, tc := range testCases { diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go deleted file mode 100644 index 8655baa5..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy.go +++ /dev/null @@ -1,95 +0,0 @@ -package resources - -import ( - "fmt" - - "github.com/patrickcping/pingone-go-sdk-v2/authorize" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/common" - "github.com/pingidentity/pingcli/internal/connector/pingone" - "github.com/pingidentity/pingcli/internal/logger" -) - -// Verify that the resource satisfies the exportable resource interface -var ( - _ connector.ExportableResource = &PingoneAuthorizePolicyManagementPolicyResource{} -) - -type PingoneAuthorizePolicyManagementPolicyResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingoneAuthorizePolicyManagementPolicyResource -func AuthorizePolicyManagementPolicy(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizePolicyManagementPolicyResource { - return &PingoneAuthorizePolicyManagementPolicyResource{ - clientInfo: clientInfo, - } -} - -func (r *PingoneAuthorizePolicyManagementPolicyResource) ExportAll() (*[]connector.ImportBlock, error) { - l := logger.Get() - l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - - importBlocks := []connector.ImportBlock{} - - editorPolicyData, err := r.getEditorPolicyData() - if err != nil { - return nil, err - } - - for editorPolicyId, editorPolicyName := range editorPolicyData { - commentData := map[string]string{ - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Editor Policy ID": editorPolicyId, - "Editor Policy Name": editorPolicyName, - "Resource Type": r.ResourceType(), - } - - importBlock := connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: editorPolicyName, - ResourceID: fmt.Sprintf("%s", r.clientInfo.ExportEnvironmentID), - CommentInformation: common.GenerateCommentInformation(commentData), - } - - importBlocks = append(importBlocks, importBlock) - } - - return &importBlocks, nil -} - -func (r *PingoneAuthorizePolicyManagementPolicyResource) getEditorPolicyData() (map[string]string, error) { - editorPolicyData := make(map[string]string) - - iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorPoliciesApi.ListRootPolicies(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - editorPolicys, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataPoliciesReferenceablePolicyDTO](iter, "ListRootPolicies", "GetAuthorizationPolicies", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, editorPolicy := range editorPolicys { - - if me, ok := editorPolicy.GetManagedEntityOk(); ok { - if restrictions, ok := me.GetRestrictionsOk(); ok { - if readOnly, ok := restrictions.GetReadOnlyOk(); ok { - if *readOnly { - continue - } - } - } - } - - editorPolicyId, editorPolicyIdOk := editorPolicy.GetIdOk() - editorPolicyName, editorPolicyNameOk := editorPolicy.GetNameOk() - - if editorPolicyIdOk && editorPolicyNameOk { - editorPolicyData[*editorPolicyId] = *editorPolicyName - } - } - - return editorPolicyData, nil -} - -func (r *PingoneAuthorizePolicyManagementPolicyResource) ResourceType() string { - return "pingone_authorize_policy_management_root_policy" -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go deleted file mode 100644 index 98845816..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_policy_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package resources_test - -import ( - "fmt" - "testing" - - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingcli/internal/testing/testutils" -) - -func TestAuthorizePolicyManagementPolicyExport(t *testing.T) { - // Get initialized apiClient and resource - PingOneClientInfo := testutils.GetPingOneClientInfo(t) - resource := resources.AuthorizePolicyManagementPolicy(PingOneClientInfo) - - // Defined the expected ImportBlocks for the resource - expectedImportBlocks := []connector.ImportBlock{ - { - ResourceType: "pingone_authorize_policy_management_policy", - ResourceName: "Test Authorize Policy Management Policy", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), - }, - } - - testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go deleted file mode 100644 index 525e7018..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule.go +++ /dev/null @@ -1,85 +0,0 @@ -package resources - -import ( - "fmt" - - "github.com/patrickcping/pingone-go-sdk-v2/authorize" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/common" - "github.com/pingidentity/pingcli/internal/connector/pingone" - "github.com/pingidentity/pingcli/internal/logger" -) - -// Verify that the resource satisfies the exportable resource interface -var ( - _ connector.ExportableResource = &PingoneAuthorizePolicyManagementRuleResource{} -) - -type PingoneAuthorizePolicyManagementRuleResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingoneAuthorizePolicyManagementRuleResource -func AuthorizePolicyManagementRule(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizePolicyManagementRuleResource { - return &PingoneAuthorizePolicyManagementRuleResource{ - clientInfo: clientInfo, - } -} - -func (r *PingoneAuthorizePolicyManagementRuleResource) ExportAll() (*[]connector.ImportBlock, error) { - l := logger.Get() - l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - - importBlocks := []connector.ImportBlock{} - - editorRuleData, err := r.getEditorRuleData() - if err != nil { - return nil, err - } - - for editorRuleId, editorRuleName := range editorRuleData { - commentData := map[string]string{ - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Editor Rule ID": editorRuleId, - "Editor Rule Name": editorRuleName, - "Resource Type": r.ResourceType(), - } - - importBlock := connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: editorRuleName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorRuleId), - CommentInformation: common.GenerateCommentInformation(commentData), - } - - importBlocks = append(importBlocks, importBlock) - } - - return &importBlocks, nil -} - -func (r *PingoneAuthorizePolicyManagementRuleResource) getEditorRuleData() (map[string]string, error) { - editorRuleData := make(map[string]string) - - iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorRulesApi.ListRules(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - editorRules, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataRulesReferenceableRuleDTO](iter, "ListRules", "GetAuthorizationRules", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, editorRule := range editorRules { - - editorRuleId, editorRuleIdOk := editorRule.GetIdOk() - editorRuleName, editorRuleNameOk := editorRule.GetNameOk() - - if editorRuleIdOk && editorRuleNameOk { - editorRuleData[*editorRuleId] = *editorRuleName - } - } - - return editorRuleData, nil -} - -func (r *PingoneAuthorizePolicyManagementRuleResource) ResourceType() string { - return "pingone_authorize_policy_management_rule" -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go deleted file mode 100644 index 1e7744f3..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_rule_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package resources_test - -import ( - "fmt" - "testing" - - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingcli/internal/testing/testutils" -) - -func TestAuthorizePolicyManagementRuleExport(t *testing.T) { - // Get initialized apiClient and resource - PingOneClientInfo := testutils.GetPingOneClientInfo(t) - resource := resources.AuthorizePolicyManagementRule(PingOneClientInfo) - - // Defined the expected ImportBlocks for the resource - expectedImportBlocks := []connector.ImportBlock{ - { - ResourceType: "pingone_authorize_policy_management_rule", - ResourceName: "Test Authorize Policy Management Rule", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), - }, - } - - testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go deleted file mode 100644 index fe591d1d..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement.go +++ /dev/null @@ -1,84 +0,0 @@ -package resources - -import ( - "fmt" - - "github.com/patrickcping/pingone-go-sdk-v2/authorize" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/common" - "github.com/pingidentity/pingcli/internal/connector/pingone" - "github.com/pingidentity/pingcli/internal/logger" -) - -// Verify that the resource satisfies the exportable resource interface -var ( - _ connector.ExportableResource = &PingoneAuthorizePolicyManagementStatementResource{} -) - -type PingoneAuthorizePolicyManagementStatementResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingoneAuthorizePolicyManagementStatementResource -func AuthorizePolicyManagementStatement(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizePolicyManagementStatementResource { - return &PingoneAuthorizePolicyManagementStatementResource{ - clientInfo: clientInfo, - } -} - -func (r *PingoneAuthorizePolicyManagementStatementResource) ExportAll() (*[]connector.ImportBlock, error) { - l := logger.Get() - l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - - importBlocks := []connector.ImportBlock{} - - editorStatementData, err := r.getEditorStatementData() - if err != nil { - return nil, err - } - - for editorStatementId, editorStatementName := range editorStatementData { - commentData := map[string]string{ - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Editor Statement ID": editorStatementId, - "Editor Statement Name": editorStatementName, - "Resource Type": r.ResourceType(), - } - - importBlock := connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: editorStatementName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorStatementId), - CommentInformation: common.GenerateCommentInformation(commentData), - } - - importBlocks = append(importBlocks, importBlock) - } - - return &importBlocks, nil -} - -func (r *PingoneAuthorizePolicyManagementStatementResource) getEditorStatementData() (map[string]string, error) { - editorStatementData := make(map[string]string) - - iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorStatementsApi.ListStatements(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - editorStatements, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataStatementsReferenceableStatementDTO](iter, "ListStatements", "GetAuthorizationStatements", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, editorStatement := range editorStatements { - editorStatementId, editorStatementIdOk := editorStatement.GetIdOk() - editorStatementName, editorStatementNameOk := editorStatement.GetNameOk() - - if editorStatementIdOk && editorStatementNameOk { - editorStatementData[*editorStatementId] = *editorStatementName - } - } - - return editorStatementData, nil -} - -func (r *PingoneAuthorizePolicyManagementStatementResource) ResourceType() string { - return "pingone_authorize_policy_management_statement" -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go deleted file mode 100644 index 392be624..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_policy_management_statement_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package resources_test - -import ( - "fmt" - "testing" - - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingcli/internal/testing/testutils" -) - -func TestAuthorizePolicyManagementStatementExport(t *testing.T) { - // Get initialized apiClient and resource - PingOneClientInfo := testutils.GetPingOneClientInfo(t) - resource := resources.AuthorizePolicyManagementStatement(PingOneClientInfo) - - // Defined the expected ImportBlocks for the resource - expectedImportBlocks := []connector.ImportBlock{ - { - ResourceType: "pingone_authorize_policy_management_statement", - ResourceName: "Test Authorize Policy Management Statement", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), - }, - } - - testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go deleted file mode 100644 index deaedaa2..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute.go +++ /dev/null @@ -1,95 +0,0 @@ -package resources - -import ( - "fmt" - - "github.com/patrickcping/pingone-go-sdk-v2/authorize" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/common" - "github.com/pingidentity/pingcli/internal/connector/pingone" - "github.com/pingidentity/pingcli/internal/logger" -) - -// Verify that the resource satisfies the exportable resource interface -var ( - _ connector.ExportableResource = &PingoneAuthorizeTrustFrameworkAttributeResource{} -) - -type PingoneAuthorizeTrustFrameworkAttributeResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingoneAuthorizeTrustFrameworkAttributeResource -func AuthorizeTrustFrameworkAttribute(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeTrustFrameworkAttributeResource { - return &PingoneAuthorizeTrustFrameworkAttributeResource{ - clientInfo: clientInfo, - } -} - -func (r *PingoneAuthorizeTrustFrameworkAttributeResource) ExportAll() (*[]connector.ImportBlock, error) { - l := logger.Get() - l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - - importBlocks := []connector.ImportBlock{} - - editorAttributeData, err := r.getEditorAttributeData() - if err != nil { - return nil, err - } - - for editorAttributeId, editorAttributeName := range editorAttributeData { - commentData := map[string]string{ - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Editor Attribute ID": editorAttributeId, - "Editor Attribute Name": editorAttributeName, - "Resource Type": r.ResourceType(), - } - - importBlock := connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: editorAttributeName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorAttributeId), - CommentInformation: common.GenerateCommentInformation(commentData), - } - - importBlocks = append(importBlocks, importBlock) - } - - return &importBlocks, nil -} - -func (r *PingoneAuthorizeTrustFrameworkAttributeResource) getEditorAttributeData() (map[string]string, error) { - editorAttributeData := make(map[string]string) - - iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorAttributesApi.ListAttributes(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - editorAttributes, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataDefinitionsAttributeDefinitionDTO](iter, "ListAttributes", "GetAuthorizationAttributes", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, editorAttribute := range editorAttributes { - - if me, ok := editorAttribute.GetManagedEntityOk(); ok { - if restrictions, ok := me.GetRestrictionsOk(); ok { - if readOnly, ok := restrictions.GetReadOnlyOk(); ok { - if *readOnly { - continue - } - } - } - } - - editorAttributeId, editorAttributeIdOk := editorAttribute.GetIdOk() - editorAttributeName, editorAttributeNameOk := editorAttribute.GetFullNameOk() - - if editorAttributeIdOk && editorAttributeNameOk { - editorAttributeData[*editorAttributeId] = *editorAttributeName - } - } - - return editorAttributeData, nil -} - -func (r *PingoneAuthorizeTrustFrameworkAttributeResource) ResourceType() string { - return "pingone_authorize_trust_framework_attribute" -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go deleted file mode 100644 index 1bb70756..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_attribute_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package resources_test - -import ( - "fmt" - "testing" - - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingcli/internal/testing/testutils" -) - -func TestAuthorizeTrustFrameworkAttributeExport(t *testing.T) { - // Get initialized apiClient and resource - PingOneClientInfo := testutils.GetPingOneClientInfo(t) - resource := resources.AuthorizeTrustFrameworkAttribute(PingOneClientInfo) - - // Defined the expected ImportBlocks for the resource - expectedImportBlocks := []connector.ImportBlock{ - { - ResourceType: "pingone_authorize_trust_framework_attribute", - ResourceName: "Test Authorize Trust Framework Attribute", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), - }, - } - - testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go deleted file mode 100644 index 78a02170..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition.go +++ /dev/null @@ -1,85 +0,0 @@ -package resources - -import ( - "fmt" - - "github.com/patrickcping/pingone-go-sdk-v2/authorize" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/common" - "github.com/pingidentity/pingcli/internal/connector/pingone" - "github.com/pingidentity/pingcli/internal/logger" -) - -// Verify that the resource satisfies the exportable resource interface -var ( - _ connector.ExportableResource = &PingoneAuthorizeTrustFrameworkConditionResource{} -) - -type PingoneAuthorizeTrustFrameworkConditionResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingoneAuthorizeTrustFrameworkConditionResource -func AuthorizeTrustFrameworkCondition(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeTrustFrameworkConditionResource { - return &PingoneAuthorizeTrustFrameworkConditionResource{ - clientInfo: clientInfo, - } -} - -func (r *PingoneAuthorizeTrustFrameworkConditionResource) ExportAll() (*[]connector.ImportBlock, error) { - l := logger.Get() - l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - - importBlocks := []connector.ImportBlock{} - - editorConditionData, err := r.getEditorConditionData() - if err != nil { - return nil, err - } - - for editorConditionId, editorConditionName := range editorConditionData { - commentData := map[string]string{ - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Editor Condition ID": editorConditionId, - "Editor Condition Name": editorConditionName, - "Resource Type": r.ResourceType(), - } - - importBlock := connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: editorConditionName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorConditionId), - CommentInformation: common.GenerateCommentInformation(commentData), - } - - importBlocks = append(importBlocks, importBlock) - } - - return &importBlocks, nil -} - -func (r *PingoneAuthorizeTrustFrameworkConditionResource) getEditorConditionData() (map[string]string, error) { - editorConditionData := make(map[string]string) - - iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorConditionsApi.ListConditions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - editorConditions, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataDefinitionsConditionDefinitionDTO](iter, "ListConditions", "GetAuthorizationConditions", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, editorCondition := range editorConditions { - - editorConditionId, editorConditionIdOk := editorCondition.GetIdOk() - editorConditionName, editorConditionNameOk := editorCondition.GetFullNameOk() - - if editorConditionIdOk && editorConditionNameOk { - editorConditionData[*editorConditionId] = *editorConditionName - } - } - - return editorConditionData, nil -} - -func (r *PingoneAuthorizeTrustFrameworkConditionResource) ResourceType() string { - return "pingone_authorize_trust_framework_condition" -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go deleted file mode 100644 index 9e7f6f1a..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_condition_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package resources_test - -import ( - "fmt" - "testing" - - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingcli/internal/testing/testutils" -) - -func TestAuthorizeTrustFrameworkConditionExport(t *testing.T) { - // Get initialized apiClient and resource - PingOneClientInfo := testutils.GetPingOneClientInfo(t) - resource := resources.AuthorizeTrustFrameworkCondition(PingOneClientInfo) - - // Defined the expected ImportBlocks for the resource - expectedImportBlocks := []connector.ImportBlock{ - { - ResourceType: "pingone_authorize_trust_framework_condition", - ResourceName: "Test Authorize Trust Framework Condition", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), - }, - } - - testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go deleted file mode 100644 index 2e01bd52..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor.go +++ /dev/null @@ -1,85 +0,0 @@ -package resources - -import ( - "fmt" - - "github.com/patrickcping/pingone-go-sdk-v2/authorize" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/common" - "github.com/pingidentity/pingcli/internal/connector/pingone" - "github.com/pingidentity/pingcli/internal/logger" -) - -// Verify that the resource satisfies the exportable resource interface -var ( - _ connector.ExportableResource = &PingoneAuthorizeTrustFrameworkProcessorResource{} -) - -type PingoneAuthorizeTrustFrameworkProcessorResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingoneAuthorizeTrustFrameworkProcessorResource -func AuthorizeTrustFrameworkProcessor(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeTrustFrameworkProcessorResource { - return &PingoneAuthorizeTrustFrameworkProcessorResource{ - clientInfo: clientInfo, - } -} - -func (r *PingoneAuthorizeTrustFrameworkProcessorResource) ExportAll() (*[]connector.ImportBlock, error) { - l := logger.Get() - l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - - importBlocks := []connector.ImportBlock{} - - editorProcessorData, err := r.getEditorProcessorData() - if err != nil { - return nil, err - } - - for editorProcessorId, editorProcessorName := range editorProcessorData { - commentData := map[string]string{ - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Editor Processor ID": editorProcessorId, - "Editor Processor Name": editorProcessorName, - "Resource Type": r.ResourceType(), - } - - importBlock := connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: editorProcessorName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorProcessorId), - CommentInformation: common.GenerateCommentInformation(commentData), - } - - importBlocks = append(importBlocks, importBlock) - } - - return &importBlocks, nil -} - -func (r *PingoneAuthorizeTrustFrameworkProcessorResource) getEditorProcessorData() (map[string]string, error) { - editorProcessorData := make(map[string]string) - - iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorProcessorsApi.ListProcessors(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - editorProcessors, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataDefinitionsProcessorDefinitionDTO](iter, "ListProcessors", "GetAuthorizationProcessors", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, editorProcessor := range editorProcessors { - - editorProcessorId, editorProcessorIdOk := editorProcessor.GetIdOk() - editorProcessorName, editorProcessorNameOk := editorProcessor.GetFullNameOk() - - if editorProcessorIdOk && editorProcessorNameOk { - editorProcessorData[*editorProcessorId] = *editorProcessorName - } - } - - return editorProcessorData, nil -} - -func (r *PingoneAuthorizeTrustFrameworkProcessorResource) ResourceType() string { - return "pingone_authorize_trust_framework_processor" -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go deleted file mode 100644 index c2f96c5c..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_processor_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package resources_test - -import ( - "fmt" - "testing" - - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingcli/internal/testing/testutils" -) - -func TestAuthorizeTrustFrameworkProcessorExport(t *testing.T) { - // Get initialized apiClient and resource - PingOneClientInfo := testutils.GetPingOneClientInfo(t) - resource := resources.AuthorizeTrustFrameworkProcessor(PingOneClientInfo) - - // Defined the expected ImportBlocks for the resource - expectedImportBlocks := []connector.ImportBlock{ - { - ResourceType: "pingone_authorize_trust_framework_processor", - ResourceName: "Test Authorize Trust Framework Processor", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), - }, - } - - testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go deleted file mode 100644 index dfa73199..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service.go +++ /dev/null @@ -1,103 +0,0 @@ -package resources - -import ( - "fmt" - - "github.com/patrickcping/pingone-go-sdk-v2/authorize" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/common" - "github.com/pingidentity/pingcli/internal/connector/pingone" - "github.com/pingidentity/pingcli/internal/logger" -) - -// Verify that the resource satisfies the exportable resource interface -var ( - _ connector.ExportableResource = &PingoneAuthorizeTrustFrameworkServiceResource{} -) - -type PingoneAuthorizeTrustFrameworkServiceResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingoneAuthorizeTrustFrameworkServiceResource -func AuthorizeTrustFrameworkService(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeTrustFrameworkServiceResource { - return &PingoneAuthorizeTrustFrameworkServiceResource{ - clientInfo: clientInfo, - } -} - -func (r *PingoneAuthorizeTrustFrameworkServiceResource) ExportAll() (*[]connector.ImportBlock, error) { - l := logger.Get() - l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - - importBlocks := []connector.ImportBlock{} - - editorServiceData, err := r.getEditorServiceData() - if err != nil { - return nil, err - } - - for editorServiceId, editorServiceName := range editorServiceData { - commentData := map[string]string{ - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Editor Service ID": editorServiceId, - "Editor Service Name": editorServiceName, - "Resource Type": r.ResourceType(), - } - - importBlock := connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: editorServiceName, - ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, editorServiceId), - CommentInformation: common.GenerateCommentInformation(commentData), - } - - importBlocks = append(importBlocks, importBlock) - } - - return &importBlocks, nil -} - -func (r *PingoneAuthorizeTrustFrameworkServiceResource) getEditorServiceData() (map[string]string, error) { - editorServiceData := make(map[string]string) - - iter := r.clientInfo.ApiClient.AuthorizeAPIClient.AuthorizeEditorServicesApi.ListServices(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - editorServices, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.AuthorizeEditorDataDefinitionsServiceDefinitionDTO](iter, "ListServices", "GetAuthorizationServices", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, editorService := range editorServices { - - var ( - editorServiceId *string - editorServiceIdOk bool - editorServiceName *string - editorServiceNameOk bool - ) - - switch t := editorService.GetActualInstance().(type) { - case *authorize.AuthorizeEditorDataServicesConnectorServiceDefinitionDTO: - editorServiceId, editorServiceIdOk = t.GetIdOk() - editorServiceName, editorServiceNameOk = t.GetFullNameOk() - case *authorize.AuthorizeEditorDataServicesHttpServiceDefinitionDTO: - editorServiceId, editorServiceIdOk = t.GetIdOk() - editorServiceName, editorServiceNameOk = t.GetFullNameOk() - case *authorize.AuthorizeEditorDataServicesNoneServiceDefinitionDTO: - editorServiceId, editorServiceIdOk = t.GetIdOk() - editorServiceName, editorServiceNameOk = t.GetFullNameOk() - default: - continue - } - - if editorServiceIdOk && editorServiceNameOk { - editorServiceData[*editorServiceId] = *editorServiceName - } - } - - return editorServiceData, nil -} - -func (r *PingoneAuthorizeTrustFrameworkServiceResource) ResourceType() string { - return "pingone_authorize_trust_framework_service" -} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go deleted file mode 100644 index 639bdd43..00000000 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_trust_framework_service_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package resources_test - -import ( - "fmt" - "testing" - - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" - "github.com/pingidentity/pingcli/internal/testing/testutils" -) - -func TestAuthorizeTrustFrameworkServiceExport(t *testing.T) { - // Get initialized apiClient and resource - PingOneClientInfo := testutils.GetPingOneClientInfo(t) - resource := resources.AuthorizeTrustFrameworkService(PingOneClientInfo) - - // Defined the expected ImportBlocks for the resource - expectedImportBlocks := []connector.ImportBlock{ - { - ResourceType: "pingone_authorize_trust_framework_service", - ResourceName: "Test Authorize Trust Framework Service", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), - }, - } - - testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -} From 7e649eb5f5d0bd415e88b11ae9498534adaed6a5 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Wed, 26 Feb 2025 15:24:06 +0000 Subject: [PATCH 09/29] Revert go.mod to standard --- go.mod | 2 -- go.sum | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 3a27d438..d6231954 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,6 @@ tool ( github.com/pavius/impi ) -replace github.com/patrickcping/pingone-go-sdk-v2/authorize => github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.1-0.20250218183914-e9ec95e476b9 - require ( github.com/fatih/color v1.18.0 github.com/hashicorp/go-uuid v1.0.3 diff --git a/go.sum b/go.sum index 6f81aad9..24d08f5c 100644 --- a/go.sum +++ b/go.sum @@ -431,8 +431,8 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/patrickcping/pingone-go-sdk-v2 v0.12.9 h1:EznRTRLzpgHeqkBtXHBrwjIMlfLamqOurODgIKNyoBY= github.com/patrickcping/pingone-go-sdk-v2 v0.12.9/go.mod h1:ZA09d5Rw6Mp7MBT7iJageVfzU1k6yjEjsQCLpIlFyRQ= -github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.1-0.20250218183914-e9ec95e476b9 h1:O+LMmb6pH7VKVRV3nZbWadMuBoAq7FhEAi/9s09dhEw= -github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.1-0.20250218183914-e9ec95e476b9/go.mod h1:2PDrgC1ufXk2IDIk4JQHx6r34r2xpkbnzKIpXFv8gYs= +github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.0 h1:gEPzZToJlBcJh2Ft12dP1GCSGzsNFQFEHS7Bql86RQk= +github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.0/go.mod h1:2PDrgC1ufXk2IDIk4JQHx6r34r2xpkbnzKIpXFv8gYs= github.com/patrickcping/pingone-go-sdk-v2/credentials v0.11.0 h1:pLiiBkROks/40vhFWJEcr/tiIEqqYdP4FWsHtfCLdIs= github.com/patrickcping/pingone-go-sdk-v2/credentials v0.11.0/go.mod h1:yRGf7+tsB3/AQYsNjIIs4ScJhR885mvDYMgwHiQeMl0= github.com/patrickcping/pingone-go-sdk-v2/management v0.49.0 h1:F1zE2PhxgZCu08TObPylcnXzKqdbaAXkDODWegTE7WM= From 846ac309ddc28dc005835cad5e413546c96a80fe Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Wed, 26 Feb 2025 16:14:29 +0000 Subject: [PATCH 10/29] add `pingone_application_resource_permission` --- .../authorize/pingone_authorize_connector.go | 1 + ...pingone_application_resource_permission.go | 123 ++++++++++++++++++ ...ne_application_resource_permission_test.go | 27 ++++ 3 files changed, 151 insertions(+) create mode 100644 internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go create mode 100644 internal/connector/pingone/authorize/resources/pingone_application_resource_permission_test.go diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector.go b/internal/connector/pingone/authorize/pingone_authorize_connector.go index 8f1c7b1a..0347b132 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector.go @@ -45,6 +45,7 @@ func (c *PingoneAuthorizeConnector) Export(format, outputDir string, overwriteEx resources.AuthorizeAPIService(&c.clientInfo), // resources.AuthorizeAPIServiceDeployment(&c.clientInfo), resources.AuthorizeAPIServiceOperation(&c.clientInfo), + resources.AuthorizeApplicationResourcePermission(&c.clientInfo), resources.AuthorizeApplicationRole(&c.clientInfo), resources.AuthorizeApplicationRolePermission(&c.clientInfo), resources.AuthorizeDecisionEndpoint(&c.clientInfo), diff --git a/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go new file mode 100644 index 00000000..baaee67e --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go @@ -0,0 +1,123 @@ +package resources + +import ( + "fmt" + + "github.com/patrickcping/pingone-go-sdk-v2/authorize" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" + "github.com/pingidentity/pingcli/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeApplicationResourcePermissionResource{} +) + +type PingoneAuthorizeApplicationResourcePermissionResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeApplicationResourcePermissionResource +func AuthorizeApplicationResourcePermission(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeApplicationResourcePermissionResource { + return &PingoneAuthorizeApplicationResourcePermissionResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeApplicationResourcePermissionResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + applicationResourceData, err := r.getApplicationResourceData() + if err != nil { + return nil, err + } + + for appResourceId, appResourceName := range applicationResourceData { + appResourcePermissionData, err := r.getApplicationResourcePermissionData(appResourceId) + if err != nil { + return nil, err + } + + for appResourcePermissionId := range appResourcePermissionData { + commentData := map[string]string{ + "Application Resource ID": appResourceId, + "Application Resource Name": appResourceName, + "Application Resource Permission ID": appResourcePermissionId, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", appResourceName, appResourcePermissionId), + ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, appResourceId, appResourcePermissionId), + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeApplicationResourcePermissionResource) getApplicationResourceData() (map[string]string, error) { + applicationResourceData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationResourcesApi.ReadApplicationResources(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + applicationResources, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationResource](iter, "ReadApplicationResources", "GetResources", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, applicationResource := range applicationResources { + applicationResourceId, applicationResourceIdOk := applicationResource.GetIdOk() + applicationResourceName, applicationResourceNameOk := applicationResource.GetNameOk() + + if applicationResourceIdOk && applicationResourceNameOk { + applicationResourceData[*applicationResourceId] = *applicationResourceName + } + } + + return applicationResourceData, nil +} + +func (r *PingoneAuthorizeApplicationResourcePermissionResource) getApplicationResourcePermissionData(appResourceId string) (map[string]string, error) { + applicationResourcePermissionData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationResourcePermissionsApi.ReadApplicationPermissions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, appResourceId).Execute() + applicationResourcePermissions, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.EntityArrayEmbeddedPermissionsInner](iter, "ReadApplicationPermissions", "GetPermissions", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, applicationResourcePermission := range applicationResourcePermissions { + + var ( + applicationResourcePermissionId *string + applicationResourcePermissionIdOk bool + ) + + switch t := applicationResourcePermission.GetActualInstance().(type) { + case *authorize.ApplicationResourcePermission: + applicationResourcePermissionId, applicationResourcePermissionIdOk = t.GetIdOk() + default: + continue + } + + if applicationResourcePermissionIdOk { + applicationResourcePermissionData[*applicationResourcePermissionId] = *applicationResourcePermissionId + } + } + + return applicationResourcePermissionData, nil +} + +func (r *PingoneAuthorizeApplicationResourcePermissionResource) ResourceType() string { + return "pingone_application_resource_permission" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_application_resource_permission_test.go b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission_test.go new file mode 100644 index 00000000..f9cdb4d4 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" +) + +func TestAuthorizeApplicationResourcePermissionExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeApplicationResourcePermission(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_application_resource_permission", + ResourceName: "Test Authorize Application Resource Permission", + ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} From a91fdf5e61730ea049673e958e9e04c773f7f75e Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Wed, 26 Feb 2025 16:14:50 +0000 Subject: [PATCH 11/29] fix lint and extract issues --- .../pingone_authorize_application_role.go | 2 +- ...e_authorize_application_role_permission.go | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go index 46a700d3..bec9eaf8 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role.go @@ -62,7 +62,7 @@ func (r *PingoneAuthorizeApplicationRoleResource) getApplicationRoleData() (map[ applicationRoleData := make(map[string]string) iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolesApi.ReadApplicationRoles(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - applicationRoles, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationRole](iter, "ApplicationRolesApi", "GetRoles", r.ResourceType()) + applicationRoles, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationRole](iter, "ReadApplicationRoles", "GetRoles", r.ResourceType()) if err != nil { return nil, err } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go index dba9f34e..0c1403ba 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go @@ -43,7 +43,7 @@ func (r *PingoneAuthorizeApplicationRolePermissionResource) ExportAll() (*[]conn return nil, err } - for appRolePermissionId, _ := range appRolePermissionData { + for appRolePermissionId := range appRolePermissionData { commentData := map[string]string{ "Application Role ID": appRoleId, "Application Role Name": appRoleName, @@ -70,7 +70,7 @@ func (r *PingoneAuthorizeApplicationRolePermissionResource) getApplicationRoleDa applicationRoleData := make(map[string]string) iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolesApi.ReadApplicationRoles(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - applicationRoles, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationRole](iter, "ApplicationRolesApi", "GetRoles", r.ResourceType()) + applicationRoles, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationRole](iter, "ReadApplicationRoles", "GetRoles", r.ResourceType()) if err != nil { return nil, err } @@ -91,13 +91,24 @@ func (r *PingoneAuthorizeApplicationRolePermissionResource) getApplicationRolePe applicationRolePermissionData := make(map[string]string) iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationRolePermissionsApi.ReadApplicationRolePermissions(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, appRoleId).Execute() - applicationRolePermissions, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationRolePermission](iter, "ReadApplicationRolePermissions", "GetRolePermissions", r.ResourceType()) + applicationRolePermissions, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.EntityArrayEmbeddedPermissionsInner](iter, "ReadApplicationRolePermissions", "GetPermissions", r.ResourceType()) if err != nil { return nil, err } for _, applicationRolePermission := range applicationRolePermissions { - applicationRolePermissionId, applicationRolePermissionIdOk := applicationRolePermission.GetIdOk() + + var ( + applicationRolePermissionId *string + applicationRolePermissionIdOk bool + ) + + switch t := applicationRolePermission.GetActualInstance().(type) { + case *authorize.ApplicationRolePermission: + applicationRolePermissionId, applicationRolePermissionIdOk = t.GetIdOk() + default: + continue + } if applicationRolePermissionIdOk { applicationRolePermissionData[*applicationRolePermissionId] = *applicationRolePermissionId From 1c6a0c2dd3bb7b8daad93d74a7b015fb612fdc16 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 27 Feb 2025 13:55:20 +0000 Subject: [PATCH 12/29] add `pingone_application_resource` resource --- .../resources/pingone_application_resource.go | 126 ++++++++++++++++++ .../pingone_application_resource_test.go | 27 ++++ 2 files changed, 153 insertions(+) create mode 100644 internal/connector/pingone/sso/resources/pingone_application_resource.go create mode 100644 internal/connector/pingone/sso/resources/pingone_application_resource_test.go diff --git a/internal/connector/pingone/sso/resources/pingone_application_resource.go b/internal/connector/pingone/sso/resources/pingone_application_resource.go new file mode 100644 index 00000000..6d4b7480 --- /dev/null +++ b/internal/connector/pingone/sso/resources/pingone_application_resource.go @@ -0,0 +1,126 @@ +package resources + +import ( + "fmt" + + "github.com/patrickcping/pingone-go-sdk-v2/management" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" + "github.com/pingidentity/pingcli/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingOneApplicationResourceResource{} +) + +type PingOneApplicationResourceResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingOneApplicationResourceResource +func ApplicationResource(clientInfo *connector.PingOneClientInfo) *PingOneApplicationResourceResource { + return &PingOneApplicationResourceResource{ + clientInfo: clientInfo, + } +} + +func (r *PingOneApplicationResourceResource) ResourceType() string { + return "pingone_application_resource" +} + +func (r *PingOneApplicationResourceResource) 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 { + applicationResourceData, err := r.getApplicationResourceData(appId) + if err != nil { + return nil, err + } + + for resourceId, resourceName := range applicationResourceData { + commentData := map[string]string{ + "Application ID": appId, + "Application Name": appName, + "Application Resource ID": resourceId, + "Application Resource Name": resourceName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", appName, resourceName), + ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, appId, resourceId), + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } + } + + return &importBlocks, nil +} + +func (r *PingOneApplicationResourceResource) getApplicationData() (map[string]string, error) { + applicationData := make(map[string]string) + + iter := r.clientInfo.ApiClient.ManagementAPIClient.ApplicationsApi.ReadAllApplications(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + applications, err := pingone.GetManagementAPIObjectsFromIterator[management.ReadOneApplication200Response](iter, "ReadAllApplications", "GetApplications", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, app := range applications { + var ( + appId *string + appIdOk bool + appName *string + appNameOk bool + ) + + switch { + case app.ApplicationOIDC != nil: + appId, appIdOk = app.ApplicationOIDC.GetIdOk() + appName, appNameOk = app.ApplicationOIDC.GetNameOk() + default: + continue + } + + if appIdOk && appNameOk { + applicationData[*appId] = *appName + } + } + + return applicationData, nil +} + +func (r *PingOneApplicationResourceResource) getApplicationResourceData(appId string) (map[string]string, error) { + applicationResourceData := make(map[string]string) + + iter := r.clientInfo.ApiClient.ManagementAPIClient.ApplicationResourcesApi.ReadAllApplicationResources(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, appId).Execute() + applicationResources, err := pingone.GetManagementAPIObjectsFromIterator[management.ResourceApplicationResource](iter, "ReadAllApplicationResources", "GetAttributes", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, applicationResource := range applicationResources { + resourceId, resourceIdOk := applicationResource.GetIdOk() + resourceName, resourceNameOk := applicationResource.GetNameOk() + + if resourceIdOk && resourceNameOk { + applicationResourceData[*resourceId] = *resourceName + } + } + + return applicationResourceData, nil +} diff --git a/internal/connector/pingone/sso/resources/pingone_application_resource_test.go b/internal/connector/pingone/sso/resources/pingone_application_resource_test.go new file mode 100644 index 00000000..ce3eeaa5 --- /dev/null +++ b/internal/connector/pingone/sso/resources/pingone_application_resource_test.go @@ -0,0 +1,27 @@ +package resources_test + +import ( + "fmt" + "testing" + + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/sso/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" +) + +func TestApplicationResourceExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.ApplicationResource(PingOneClientInfo) + + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_application_resource", + ResourceName: "test-permission1", + ResourceID: fmt.Sprintf("%s/62b8a221-a530-44f4-ad02-cdb0d3b1395f", testutils.GetEnvironmentID()), + }, + } + + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} From 9f2a6a60c79ff699f9310e2fc006d1cbad9c9ac3 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 27 Feb 2025 13:55:30 +0000 Subject: [PATCH 13/29] update test cases --- ...ne_application_resource_permission_test.go | 9 +++++++-- ...ne_authorize_api_service_operation_test.go | 4 ++-- .../pingone_authorize_api_service_test.go | 4 ++-- ...horize_application_role_permission_test.go | 9 +++++++-- ...pingone_authorize_application_role_test.go | 4 ++-- ...ingone_authorize_decision_endpoint_test.go | 19 +++++++++++++++++-- 6 files changed, 37 insertions(+), 12 deletions(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_application_resource_permission_test.go b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission_test.go index f9cdb4d4..e0e055ed 100644 --- a/internal/connector/pingone/authorize/resources/pingone_application_resource_permission_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission_test.go @@ -18,8 +18,13 @@ func TestAuthorizeApplicationResourcePermissionExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_application_resource_permission", - ResourceName: "Test Authorize Application Resource Permission", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + ResourceName: "test-permission1:action1", + ResourceID: fmt.Sprintf("%s/62b8a221-a530-44f4-ad02-cdb0d3b1395f/080dd732-99ea-4730-a8a6-8da88a232131", testutils.GetEnvironmentID()), + }, + { + ResourceType: "pingone_application_resource_permission", + ResourceName: "test-permission1:action2", + ResourceID: fmt.Sprintf("%s/62b8a221-a530-44f4-ad02-cdb0d3b1395f/05717cf9-3ce4-443a-8154-1986fe984780", testutils.GetEnvironmentID()), }, } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go index b982f63c..ffa379d7 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go @@ -18,8 +18,8 @@ func TestAuthorizeAPIServiceOperationExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_authorize_api_service_operation", - ResourceName: "Example API Service Operation", - ResourceID: fmt.Sprintf("%s/2a7c1b5d-415b-4fb5-a6c0-1e290f776785/056ed696-f2e9-44b1-8d2c-68e690cd1f24", testutils.GetEnvironmentID()), + ResourceName: "My Path", + ResourceID: fmt.Sprintf("%s/cee5d5a9-49aa-478d-816e-ec47a2b5aede/07fc42c1-d998-40bd-bb64-143911924608", testutils.GetEnvironmentID()), }, } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go index b28a2fd1..dbe3dc6f 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go @@ -18,8 +18,8 @@ func TestAuthorizeAPIServiceExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_authorize_api_service", - ResourceName: "Test Authorize API Service", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + ResourceName: "Test API Service", + ResourceID: fmt.Sprintf("%s/cee5d5a9-49aa-478d-816e-ec47a2b5aede", testutils.GetEnvironmentID()), }, } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go index 36f12ca1..c3396b47 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go @@ -18,8 +18,13 @@ func TestAuthorizeApplicationRolePermissionExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_authorize_application_role_permission", - ResourceName: "Test Authorize Application Role Permission", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + ResourceName: "test-permission1:action1", + ResourceID: fmt.Sprintf("%s/f45cbcc7-2406-470b-93bc-ff477da0b8f7/080dd732-99ea-4730-a8a6-8da88a232131", testutils.GetEnvironmentID()), + }, + { + ResourceType: "pingone_authorize_application_role_permission", + ResourceName: "test-permission1:action2", + ResourceID: fmt.Sprintf("%s/f45cbcc7-2406-470b-93bc-ff477da0b8f7/05717cf9-3ce4-443a-8154-1986fe984780", testutils.GetEnvironmentID()), }, } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go index 640c8d88..19f43f4d 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_test.go @@ -18,8 +18,8 @@ func TestAuthorizeApplicationRoleExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_authorize_application_role", - ResourceName: "Test Authorize Application Role", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + ResourceName: "test-role", + ResourceID: fmt.Sprintf("%s/f45cbcc7-2406-470b-93bc-ff477da0b8f7", testutils.GetEnvironmentID()), }, } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go index bb02d7ce..4ebf6a68 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go @@ -18,8 +18,23 @@ func TestAuthorizeDecisionEndpointExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_authorize_decision_endpoint", - ResourceName: "Test Authorize Decision Endpoint", - ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), + ResourceName: "DEV", + ResourceID: fmt.Sprintf("%s/f8660b46-b96e-457c-8d8f-8ee455e4baa3", testutils.GetEnvironmentID()), + }, + { + ResourceType: "pingone_authorize_decision_endpoint", + ResourceName: "PROD", + ResourceID: fmt.Sprintf("%s/07a4f450-d99f-439f-834a-46b8332a3e31", testutils.GetEnvironmentID()), + }, + { + ResourceType: "pingone_authorize_decision_endpoint", + ResourceName: "TEST", + ResourceID: fmt.Sprintf("%s/3368886d-7d57-4aa8-a8f6-7d24dffa4b3c", testutils.GetEnvironmentID()), + }, + { + ResourceType: "pingone_authorize_decision_endpoint", + ResourceName: "CLI", + ResourceID: fmt.Sprintf("%s/6f4cf36d-fdc1-445c-a1df-37c8e3305eaf", testutils.GetEnvironmentID()), }, } From a010f4e984bb3b10fc03bc573d878b2dd32d7c47 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 27 Feb 2025 18:26:48 +0000 Subject: [PATCH 14/29] testing test --- .../resources/pingone_authorize_api_service_operation_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go index ffa379d7..0b09b7e0 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_operation_test.go @@ -18,7 +18,7 @@ func TestAuthorizeAPIServiceOperationExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_authorize_api_service_operation", - ResourceName: "My Path", + ResourceName: "Test API Service_My Path", ResourceID: fmt.Sprintf("%s/cee5d5a9-49aa-478d-816e-ec47a2b5aede/07fc42c1-d998-40bd-bb64-143911924608", testutils.GetEnvironmentID()), }, } From d0ef5dabbfeb5eb00c0d9f251aa24893c52bda69 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 27 Feb 2025 18:44:54 +0000 Subject: [PATCH 15/29] update tests --- .../pingone_authorize_decision_endpoint_test.go | 5 +++++ .../sso/resources/pingone_resource_attribute_test.go | 5 +++++ .../sso/resources/pingone_resource_scope_test.go | 10 ++++++++++ .../pingone/sso/resources/pingone_resource_test.go | 5 +++++ 4 files changed, 25 insertions(+) diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go index 4ebf6a68..2f61b8f2 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_decision_endpoint_test.go @@ -36,6 +36,11 @@ func TestAuthorizeDecisionEndpointExport(t *testing.T) { ResourceName: "CLI", ResourceID: fmt.Sprintf("%s/6f4cf36d-fdc1-445c-a1df-37c8e3305eaf", testutils.GetEnvironmentID()), }, + { + ResourceType: "pingone_authorize_decision_endpoint", + ResourceName: "Test API Service", + ResourceID: fmt.Sprintf("%s/20c01743-084f-4129-b304-42ce6a5edf4f", testutils.GetEnvironmentID()), + }, } testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) diff --git a/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go b/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go index 8c8eb4a5..71feace2 100644 --- a/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go +++ b/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go @@ -16,6 +16,11 @@ func TestResourceAttributeExport(t *testing.T) { // Defined the expected ImportBlocks for the resource expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_resource_attribute", + ResourceName: "authorize-api-service_sub", + ResourceID: fmt.Sprintf("%s/3c6001a0-6110-4934-9d34-fa8c4a2894c2/3f79ad4f-588a-4652-bad8-d64d405bef8a", testutils.GetEnvironmentID()), + }, { ResourceType: "pingone_resource_attribute", ResourceName: "test_sub", diff --git a/internal/connector/pingone/sso/resources/pingone_resource_scope_test.go b/internal/connector/pingone/sso/resources/pingone_resource_scope_test.go index 74bd1bd0..11c1d1ac 100644 --- a/internal/connector/pingone/sso/resources/pingone_resource_scope_test.go +++ b/internal/connector/pingone/sso/resources/pingone_resource_scope_test.go @@ -16,6 +16,16 @@ func TestResourceScopeExport(t *testing.T) { // Defined the expected ImportBlocks for the resource expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_resource_scope", + ResourceName: "authorize-api-service_apiscope", + ResourceID: fmt.Sprintf("%s/3c6001a0-6110-4934-9d34-fa8c4a2894c2/97b9c81c-56a3-4727-8626-9c55826f98c0", testutils.GetEnvironmentID()), + }, + { + ResourceType: "pingone_resource_scope", + ResourceName: "authorize-api-service_testing", + ResourceID: fmt.Sprintf("%s/3c6001a0-6110-4934-9d34-fa8c4a2894c2/6aa03c9d-7003-4ddb-9395-b176d4bde6d6", testutils.GetEnvironmentID()), + }, { ResourceType: "pingone_resource_scope", ResourceName: "test_testing", diff --git a/internal/connector/pingone/sso/resources/pingone_resource_test.go b/internal/connector/pingone/sso/resources/pingone_resource_test.go index 49ad7154..508bf3a5 100644 --- a/internal/connector/pingone/sso/resources/pingone_resource_test.go +++ b/internal/connector/pingone/sso/resources/pingone_resource_test.go @@ -16,6 +16,11 @@ func TestResourceExport(t *testing.T) { // Defined the expected ImportBlocks for the resource expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_resource", + ResourceName: "authorize-api-service", + ResourceID: fmt.Sprintf("%s/3c6001a0-6110-4934-9d34-fa8c4a2894c2", testutils.GetEnvironmentID()), + }, { ResourceType: "pingone_resource", ResourceName: "test", From 0d3addbc04432af0d34aebb374445869182af2e8 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 11:11:58 +0000 Subject: [PATCH 16/29] update role permissions resource name --- .env | 5 ++++ ...e_authorize_application_role_permission.go | 26 +++++++++++-------- ...horize_application_role_permission_test.go | 4 +-- 3 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 00000000..465ad355 --- /dev/null +++ b/.env @@ -0,0 +1,5 @@ +PINGONE_CLIENT_ID=aa23bf4b-dce4-42de-be7c-95d5fb9349ab +PINGONE_CLIENT_SECRET=_wO9y~cGkNsG6QmHWE7AP9ODq41Xu6WM9R.H0IJjTtKR59q5JEZD-sUdwjgyCefh +PINGONE_ENVIRONMENT_ID=91047564-aea6-4fc9-a1d7-cde10d129cf8 +PINGONE_REGION_CODE=NA +PINGONE_PINGCLI_EXPORT_ENVIRONMENT_ID=f5901536-2b60-4d4a-a987-3d56aadad46d \ No newline at end of file diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go index 0c1403ba..05acdbe1 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission.go @@ -43,18 +43,19 @@ func (r *PingoneAuthorizeApplicationRolePermissionResource) ExportAll() (*[]conn return nil, err } - for appRolePermissionId := range appRolePermissionData { + for appRolePermissionId, appRolePermissionKey := range appRolePermissionData { commentData := map[string]string{ - "Application Role ID": appRoleId, - "Application Role Name": appRoleName, - "Application Role Permission ID": appRolePermissionId, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Resource Type": r.ResourceType(), + "Application Role ID": appRoleId, + "Application Role Name": appRoleName, + "Application Role Permission ID": appRolePermissionId, + "Application Role Permission Key": appRolePermissionKey, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_%s", appRoleName, appRolePermissionId), + ResourceName: fmt.Sprintf("%s_%s", appRoleName, appRolePermissionKey), ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, appRoleId, appRolePermissionId), CommentInformation: common.GenerateCommentInformation(commentData), } @@ -99,19 +100,22 @@ func (r *PingoneAuthorizeApplicationRolePermissionResource) getApplicationRolePe for _, applicationRolePermission := range applicationRolePermissions { var ( - applicationRolePermissionId *string - applicationRolePermissionIdOk bool + applicationRolePermissionId *string + applicationRolePermissionIdOk bool + applicationRolePermissionKey *string + applicationRolePermissionKeyOk bool ) switch t := applicationRolePermission.GetActualInstance().(type) { case *authorize.ApplicationRolePermission: applicationRolePermissionId, applicationRolePermissionIdOk = t.GetIdOk() + applicationRolePermissionKey, applicationRolePermissionKeyOk = t.GetKeyOk() default: continue } - if applicationRolePermissionIdOk { - applicationRolePermissionData[*applicationRolePermissionId] = *applicationRolePermissionId + if applicationRolePermissionIdOk && applicationRolePermissionKeyOk { + applicationRolePermissionData[*applicationRolePermissionId] = *applicationRolePermissionKey } } diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go index c3396b47..e932c62d 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go @@ -18,12 +18,12 @@ func TestAuthorizeApplicationRolePermissionExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_authorize_application_role_permission", - ResourceName: "test-permission1:action1", + ResourceName: "test-role_test_permission1action1", ResourceID: fmt.Sprintf("%s/f45cbcc7-2406-470b-93bc-ff477da0b8f7/080dd732-99ea-4730-a8a6-8da88a232131", testutils.GetEnvironmentID()), }, { ResourceType: "pingone_authorize_application_role_permission", - ResourceName: "test-permission1:action2", + ResourceName: "test-role_test_permission1action1", ResourceID: fmt.Sprintf("%s/f45cbcc7-2406-470b-93bc-ff477da0b8f7/05717cf9-3ce4-443a-8154-1986fe984780", testutils.GetEnvironmentID()), }, } From 78f8e3cc541e1b66d8a8cd5f87d928ff84ff3765 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 12:14:10 +0000 Subject: [PATCH 17/29] refactor application_resource --- .../authorize/pingone_authorize_connector.go | 1 + .../resources/pingone_application_resource.go | 108 +++++++++++++++ .../pingone_application_resource_test.go | 4 +- .../resources/pingone_application_resource.go | 126 ------------------ 4 files changed, 111 insertions(+), 128 deletions(-) create mode 100644 internal/connector/pingone/authorize/resources/pingone_application_resource.go rename internal/connector/pingone/{sso => authorize}/resources/pingone_application_resource_test.go (83%) delete mode 100644 internal/connector/pingone/sso/resources/pingone_application_resource.go diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector.go b/internal/connector/pingone/authorize/pingone_authorize_connector.go index 0347b132..7472c6ae 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector.go @@ -45,6 +45,7 @@ func (c *PingoneAuthorizeConnector) Export(format, outputDir string, overwriteEx resources.AuthorizeAPIService(&c.clientInfo), // resources.AuthorizeAPIServiceDeployment(&c.clientInfo), resources.AuthorizeAPIServiceOperation(&c.clientInfo), + resources.ApplicationResource(&c.clientInfo), resources.AuthorizeApplicationResourcePermission(&c.clientInfo), resources.AuthorizeApplicationRole(&c.clientInfo), resources.AuthorizeApplicationRolePermission(&c.clientInfo), diff --git a/internal/connector/pingone/authorize/resources/pingone_application_resource.go b/internal/connector/pingone/authorize/resources/pingone_application_resource.go new file mode 100644 index 00000000..e35f7530 --- /dev/null +++ b/internal/connector/pingone/authorize/resources/pingone_application_resource.go @@ -0,0 +1,108 @@ +package resources + +import ( + "fmt" + + "github.com/patrickcping/pingone-go-sdk-v2/authorize" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" + "github.com/pingidentity/pingcli/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingOneApplicationResourceResource{} +) + +type PingOneApplicationResourceResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingOneApplicationResourceResource +func ApplicationResource(clientInfo *connector.PingOneClientInfo) *PingOneApplicationResourceResource { + return &PingOneApplicationResourceResource{ + clientInfo: clientInfo, + } +} + +func (r *PingOneApplicationResourceResource) ResourceType() string { + return "pingone_application_resource" +} + +type applicationResourceObj struct { + applicationResourceName string + resourceId string + resourceName string +} + +func (r *PingOneApplicationResourceResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + applicationResourceData, err := r.getApplicationResourceData() + if err != nil { + return nil, err + } + + for applicationResourceId, applicationResourceObj := range applicationResourceData { + commentData := map[string]string{ + "PingOne Resource ID": applicationResourceObj.resourceId, + "PingOne Resource Name": applicationResourceObj.resourceName, + "Application Resource ID": applicationResourceId, + "Application Resource Name": applicationResourceObj.applicationResourceName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: fmt.Sprintf("%s_%s", applicationResourceObj.resourceName, applicationResourceObj.applicationResourceName), + ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, applicationResourceObj.resourceId, applicationResourceId), + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } + + return &importBlocks, nil +} + +func (r *PingOneApplicationResourceResource) getApplicationResourceData() (map[string]applicationResourceObj, error) { + applicationResourceData := make(map[string]applicationResourceObj) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.ApplicationResourcesApi.ReadApplicationResources(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + applicationResources, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.ApplicationResource](iter, "ReadApplicationResources", "GetResources", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, applicationResource := range applicationResources { + applicationResourceId, applicationResourceIdOk := applicationResource.GetIdOk() + applicationResourceName, applicationResourceNameOk := applicationResource.GetNameOk() + resourceId, resourceIdOk := applicationResource.Parent.GetIdOk() + + if applicationResourceIdOk && applicationResourceNameOk && resourceIdOk { + + resourceObj, httpResponse, err := r.clientInfo.ApiClient.ManagementAPIClient.ResourcesApi.ReadOneResource(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *resourceId).Execute() + ok, err := common.HandleClientResponse(httpResponse, err, "ReadOneResource", r.ResourceType()) + if err != nil { + return nil, err + } + // A warning was given when handling the client response. Return nil apiObjects to skip export of resource + if !ok { + return nil, nil + } + + applicationResourceData[*applicationResourceId] = applicationResourceObj{ + applicationResourceName: *applicationResourceName, + resourceId: *resourceId, + resourceName: resourceObj.GetName(), + } + } + } + + return applicationResourceData, nil +} diff --git a/internal/connector/pingone/sso/resources/pingone_application_resource_test.go b/internal/connector/pingone/authorize/resources/pingone_application_resource_test.go similarity index 83% rename from internal/connector/pingone/sso/resources/pingone_application_resource_test.go rename to internal/connector/pingone/authorize/resources/pingone_application_resource_test.go index ce3eeaa5..aa6b46e1 100644 --- a/internal/connector/pingone/sso/resources/pingone_application_resource_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_application_resource_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/pingone/sso/resources" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" "github.com/pingidentity/pingcli/internal/testing/testutils" ) @@ -18,7 +18,7 @@ func TestApplicationResourceExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_application_resource", - ResourceName: "test-permission1", + ResourceName: "authorize-api-service_test-permission1", ResourceID: fmt.Sprintf("%s/62b8a221-a530-44f4-ad02-cdb0d3b1395f", testutils.GetEnvironmentID()), }, } diff --git a/internal/connector/pingone/sso/resources/pingone_application_resource.go b/internal/connector/pingone/sso/resources/pingone_application_resource.go deleted file mode 100644 index 6d4b7480..00000000 --- a/internal/connector/pingone/sso/resources/pingone_application_resource.go +++ /dev/null @@ -1,126 +0,0 @@ -package resources - -import ( - "fmt" - - "github.com/patrickcping/pingone-go-sdk-v2/management" - "github.com/pingidentity/pingcli/internal/connector" - "github.com/pingidentity/pingcli/internal/connector/common" - "github.com/pingidentity/pingcli/internal/connector/pingone" - "github.com/pingidentity/pingcli/internal/logger" -) - -// Verify that the resource satisfies the exportable resource interface -var ( - _ connector.ExportableResource = &PingOneApplicationResourceResource{} -) - -type PingOneApplicationResourceResource struct { - clientInfo *connector.PingOneClientInfo -} - -// Utility method for creating a PingOneApplicationResourceResource -func ApplicationResource(clientInfo *connector.PingOneClientInfo) *PingOneApplicationResourceResource { - return &PingOneApplicationResourceResource{ - clientInfo: clientInfo, - } -} - -func (r *PingOneApplicationResourceResource) ResourceType() string { - return "pingone_application_resource" -} - -func (r *PingOneApplicationResourceResource) 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 { - applicationResourceData, err := r.getApplicationResourceData(appId) - if err != nil { - return nil, err - } - - for resourceId, resourceName := range applicationResourceData { - commentData := map[string]string{ - "Application ID": appId, - "Application Name": appName, - "Application Resource ID": resourceId, - "Application Resource Name": resourceName, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Resource Type": r.ResourceType(), - } - - importBlock := connector.ImportBlock{ - ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_%s", appName, resourceName), - ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, appId, resourceId), - CommentInformation: common.GenerateCommentInformation(commentData), - } - - importBlocks = append(importBlocks, importBlock) - } - } - - return &importBlocks, nil -} - -func (r *PingOneApplicationResourceResource) getApplicationData() (map[string]string, error) { - applicationData := make(map[string]string) - - iter := r.clientInfo.ApiClient.ManagementAPIClient.ApplicationsApi.ReadAllApplications(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() - applications, err := pingone.GetManagementAPIObjectsFromIterator[management.ReadOneApplication200Response](iter, "ReadAllApplications", "GetApplications", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, app := range applications { - var ( - appId *string - appIdOk bool - appName *string - appNameOk bool - ) - - switch { - case app.ApplicationOIDC != nil: - appId, appIdOk = app.ApplicationOIDC.GetIdOk() - appName, appNameOk = app.ApplicationOIDC.GetNameOk() - default: - continue - } - - if appIdOk && appNameOk { - applicationData[*appId] = *appName - } - } - - return applicationData, nil -} - -func (r *PingOneApplicationResourceResource) getApplicationResourceData(appId string) (map[string]string, error) { - applicationResourceData := make(map[string]string) - - iter := r.clientInfo.ApiClient.ManagementAPIClient.ApplicationResourcesApi.ReadAllApplicationResources(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, appId).Execute() - applicationResources, err := pingone.GetManagementAPIObjectsFromIterator[management.ResourceApplicationResource](iter, "ReadAllApplicationResources", "GetAttributes", r.ResourceType()) - if err != nil { - return nil, err - } - - for _, applicationResource := range applicationResources { - resourceId, resourceIdOk := applicationResource.GetIdOk() - resourceName, resourceNameOk := applicationResource.GetNameOk() - - if resourceIdOk && resourceNameOk { - applicationResourceData[*resourceId] = *resourceName - } - } - - return applicationResourceData, nil -} From bb3fba46d468bdf165791ca61a713ac4a4b59b32 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 12:14:23 +0000 Subject: [PATCH 18/29] clarify PingOne resource --- .../pingone/sso/resources/pingone_resource.go | 4 ++-- .../sso/resources/pingone_resource_attribute.go | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/connector/pingone/sso/resources/pingone_resource.go b/internal/connector/pingone/sso/resources/pingone_resource.go index ccd51362..1c1e26cd 100644 --- a/internal/connector/pingone/sso/resources/pingone_resource.go +++ b/internal/connector/pingone/sso/resources/pingone_resource.go @@ -44,8 +44,8 @@ func (r *PingOneResourceResource) ExportAll() (*[]connector.ImportBlock, error) for resourceId, resourceName := range resourceData { commentData := map[string]string{ "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Resource ID": resourceId, - "Resource Name": resourceName, + "PingOne Resource ID": resourceId, + "PingOne Resource Name": resourceName, "Resource Type": r.ResourceType(), } diff --git a/internal/connector/pingone/sso/resources/pingone_resource_attribute.go b/internal/connector/pingone/sso/resources/pingone_resource_attribute.go index 39dba1b2..a86852ae 100644 --- a/internal/connector/pingone/sso/resources/pingone_resource_attribute.go +++ b/internal/connector/pingone/sso/resources/pingone_resource_attribute.go @@ -52,12 +52,12 @@ func (r *PingOneResourceAttributeResource) ExportAll() (*[]connector.ImportBlock for resourceAttributeId, resourceAttributeName := range resourceAttributeData { commentData := map[string]string{ - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Resource Attribute ID": resourceAttributeId, - "Resource Attribute Name": resourceAttributeName, - "Resource ID": resourceId, - "Resource Name": resourceName, - "Resource Type": r.ResourceType(), + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "PingOne Resource Attribute ID": resourceAttributeId, + "PingOne Resource Attribute Name": resourceAttributeName, + "PingOne Resource ID": resourceId, + "PingOne Resource Name": resourceName, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ From c4523b2415b7fb38205ea89214f3fecde0fc2fb8 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 12:19:29 +0000 Subject: [PATCH 19/29] update test --- .../authorize/resources/pingone_application_resource_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_application_resource_test.go b/internal/connector/pingone/authorize/resources/pingone_application_resource_test.go index aa6b46e1..f0bd44fe 100644 --- a/internal/connector/pingone/authorize/resources/pingone_application_resource_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_application_resource_test.go @@ -19,7 +19,7 @@ func TestApplicationResourceExport(t *testing.T) { { ResourceType: "pingone_application_resource", ResourceName: "authorize-api-service_test-permission1", - ResourceID: fmt.Sprintf("%s/62b8a221-a530-44f4-ad02-cdb0d3b1395f", testutils.GetEnvironmentID()), + ResourceID: fmt.Sprintf("%s/3c6001a0-6110-4934-9d34-fa8c4a2894c2/62b8a221-a530-44f4-ad02-cdb0d3b1395f", testutils.GetEnvironmentID()), }, } From 2dd597886ae2be0f7ffa6841efe0820c82ec4417 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 12:22:53 +0000 Subject: [PATCH 20/29] remove keys --- .env | 5 ----- .gitignore | 3 ++- 2 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index 465ad355..00000000 --- a/.env +++ /dev/null @@ -1,5 +0,0 @@ -PINGONE_CLIENT_ID=aa23bf4b-dce4-42de-be7c-95d5fb9349ab -PINGONE_CLIENT_SECRET=_wO9y~cGkNsG6QmHWE7AP9ODq41Xu6WM9R.H0IJjTtKR59q5JEZD-sUdwjgyCefh -PINGONE_ENVIRONMENT_ID=91047564-aea6-4fc9-a1d7-cde10d129cf8 -PINGONE_REGION_CODE=NA -PINGONE_PINGCLI_EXPORT_ENVIRONMENT_ID=f5901536-2b60-4d4a-a987-3d56aadad46d \ No newline at end of file diff --git a/.gitignore b/.gitignore index 69533ff0..ac27c815 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ go.work go.work.sum export vendor -env*.sh \ No newline at end of file +env*.sh +.env From 6c508016e0542316b6fe75f037135c0ef7b75139 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 12:32:40 +0000 Subject: [PATCH 21/29] correct test --- .../pingone_authorize_application_role_permission_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go index e932c62d..ca46ef20 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go @@ -23,7 +23,7 @@ func TestAuthorizeApplicationRolePermissionExport(t *testing.T) { }, { ResourceType: "pingone_authorize_application_role_permission", - ResourceName: "test-role_test_permission1action1", + ResourceName: "test-role_test_permission1action2", ResourceID: fmt.Sprintf("%s/f45cbcc7-2406-470b-93bc-ff477da0b8f7/05717cf9-3ce4-443a-8154-1986fe984780", testutils.GetEnvironmentID()), }, } From 38beb419d026ada62cf8554db14e4654388a51d3 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 12:37:20 +0000 Subject: [PATCH 22/29] update test --- .../pingone_authorize_application_role_permission_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go index ca46ef20..544517c1 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_application_role_permission_test.go @@ -18,12 +18,12 @@ func TestAuthorizeApplicationRolePermissionExport(t *testing.T) { expectedImportBlocks := []connector.ImportBlock{ { ResourceType: "pingone_authorize_application_role_permission", - ResourceName: "test-role_test_permission1action1", + ResourceName: "test-role_test-permission1:action1", ResourceID: fmt.Sprintf("%s/f45cbcc7-2406-470b-93bc-ff477da0b8f7/080dd732-99ea-4730-a8a6-8da88a232131", testutils.GetEnvironmentID()), }, { ResourceType: "pingone_authorize_application_role_permission", - ResourceName: "test-role_test_permission1action2", + ResourceName: "test-role_test-permission1:action2", ResourceID: fmt.Sprintf("%s/f45cbcc7-2406-470b-93bc-ff477da0b8f7/05717cf9-3ce4-443a-8154-1986fe984780", testutils.GetEnvironmentID()), }, } From b6d337a90cb280932749425667ae7675681ac65b Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 12:49:20 +0000 Subject: [PATCH 23/29] update keying --- ...pingone_application_resource_permission.go | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go index baaee67e..ccc6ad32 100644 --- a/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go +++ b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go @@ -43,18 +43,19 @@ func (r *PingoneAuthorizeApplicationResourcePermissionResource) ExportAll() (*[] return nil, err } - for appResourcePermissionId := range appResourcePermissionData { + for appResourcePermissionId, appResourcePermissionKey := range appResourcePermissionData { commentData := map[string]string{ - "Application Resource ID": appResourceId, - "Application Resource Name": appResourceName, - "Application Resource Permission ID": appResourcePermissionId, - "Export Environment ID": r.clientInfo.ExportEnvironmentID, - "Resource Type": r.ResourceType(), + "Application Resource ID": appResourceId, + "Application Resource Name": appResourceName, + "Application Resource Permission ID": appResourcePermissionId, + "Application Resource Permission Key": appResourcePermissionKey, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Resource Type": r.ResourceType(), } importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s_%s", appResourceName, appResourcePermissionId), + ResourceName: fmt.Sprintf("%s", appResourcePermissionKey), ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, appResourceId, appResourcePermissionId), CommentInformation: common.GenerateCommentInformation(commentData), } @@ -99,18 +100,27 @@ func (r *PingoneAuthorizeApplicationResourcePermissionResource) getApplicationRe for _, applicationResourcePermission := range applicationResourcePermissions { var ( - applicationResourcePermissionId *string - applicationResourcePermissionIdOk bool + applicationResourcePermissionId *string + applicationResourcePermissionIdOk bool + applicationResourcePermissionKey *string + applicationResourcePermissionKeyOk bool ) switch t := applicationResourcePermission.GetActualInstance().(type) { case *authorize.ApplicationResourcePermission: applicationResourcePermissionId, applicationResourcePermissionIdOk = t.GetIdOk() + case *authorize.ApplicationRolePermission: + applicationResourcePermissionId, applicationResourcePermissionIdOk = t.GetIdOk() + applicationResourcePermissionKey, applicationResourcePermissionKeyOk = t.GetKeyOk() default: continue } - if applicationResourcePermissionIdOk { + if applicationResourcePermissionIdOk && applicationResourcePermissionKeyOk { + applicationResourcePermissionData[*applicationResourcePermissionId] = *applicationResourcePermissionKey + } + + if applicationResourcePermissionIdOk && !applicationResourcePermissionKeyOk { applicationResourcePermissionData[*applicationResourcePermissionId] = *applicationResourcePermissionId } } From 4da6403c777262740dda0291eeca6df9b29e7962 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 12:50:57 +0000 Subject: [PATCH 24/29] correct lint --- .../resources/pingone_application_resource_permission.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go index ccc6ad32..875184e4 100644 --- a/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go +++ b/internal/connector/pingone/authorize/resources/pingone_application_resource_permission.go @@ -55,7 +55,7 @@ func (r *PingoneAuthorizeApplicationResourcePermissionResource) ExportAll() (*[] importBlock := connector.ImportBlock{ ResourceType: r.ResourceType(), - ResourceName: fmt.Sprintf("%s", appResourcePermissionKey), + ResourceName: appResourcePermissionKey, ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, appResourceId, appResourcePermissionId), CommentInformation: common.GenerateCommentInformation(commentData), } From 87fe2e7bfd6d0621cb4f8a7f0c791a1d85eb7d9d Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 13:05:20 +0000 Subject: [PATCH 25/29] add back api service deployment --- .../authorize/pingone_authorize_connector.go | 2 +- ...ingone_authorize_api_service_deployment.go | 222 +++++++++--------- ...e_authorize_api_service_deployment_test.go | 42 ++-- 3 files changed, 132 insertions(+), 134 deletions(-) diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector.go b/internal/connector/pingone/authorize/pingone_authorize_connector.go index 7472c6ae..af2d312b 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector.go @@ -43,7 +43,7 @@ func (c *PingoneAuthorizeConnector) Export(format, outputDir string, overwriteEx exportableResources := []connector.ExportableResource{ resources.AuthorizeAPIService(&c.clientInfo), - // resources.AuthorizeAPIServiceDeployment(&c.clientInfo), + resources.AuthorizeAPIServiceDeployment(&c.clientInfo), resources.AuthorizeAPIServiceOperation(&c.clientInfo), resources.ApplicationResource(&c.clientInfo), resources.AuthorizeApplicationResourcePermission(&c.clientInfo), diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go index 1e7af6f8..5e5ddab2 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment.go @@ -1,114 +1,112 @@ package resources -// import ( -// "fmt" - -// "github.com/patrickcping/pingone-go-sdk-v2/authorize" -// "github.com/pingidentity/pingcli/internal/connector" -// "github.com/pingidentity/pingcli/internal/connector/common" -// "github.com/pingidentity/pingcli/internal/connector/pingone" -// "github.com/pingidentity/pingcli/internal/logger" -// ) - -// // Verify that the resource satisfies the exportable resource interface -// var ( -// _ connector.ExportableResource = &PingoneAuthorizeAPIServiceDeploymentResource{} -// ) - -// type PingoneAuthorizeAPIServiceDeploymentResource struct { -// clientInfo *connector.PingOneClientInfo -// } - -// // Utility method for creating a PingoneAuthorizeAPIServiceDeploymentResource -// func AuthorizeAPIServiceDeployment(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeAPIServiceDeploymentResource { -// return &PingoneAuthorizeAPIServiceDeploymentResource{ -// clientInfo: clientInfo, -// } -// } - -// func (r *PingoneAuthorizeAPIServiceDeploymentResource) ExportAll() (*[]connector.ImportBlock, error) { -// l := logger.Get() -// l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) - -// importBlocks := []connector.ImportBlock{} - -// apiServiceData, err := r.getAPIServiceData() -// if err != nil { -// return nil, err -// } - -// for apiServiceId, apiServiceName := range apiServiceData { -// apiServiceDeploymentData, err := r.getAPIServiceDeploymentData(apiServiceId) -// if err != nil { -// return nil, err -// } - -// for apiServiceDeploymentId, apiServiceDeploymentName := range apiServiceDeploymentData { -// commentData := map[string]string{ -// "API Service ID": apiServiceId, -// "API Service Name": apiServiceName, -// "API Service Deployment ID": apiServiceDeploymentId, -// "API Service Deployment Name": apiServiceDeploymentName, -// "Export Environment ID": r.clientInfo.ExportEnvironmentID, -// "Resource Type": r.ResourceType(), -// } - -// importBlock := connector.ImportBlock{ -// ResourceType: r.ResourceType(), -// ResourceName: fmt.Sprintf("%s_%s", apiServiceName, apiServiceDeploymentId), -// ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, apiServiceId, apiServiceDeploymentId), -// CommentInformation: common.GenerateCommentInformation(commentData), -// } - -// importBlocks = append(importBlocks, importBlock) -// } -// } - -// return &importBlocks, nil -// } - -// func (r *PingoneAuthorizeAPIServiceDeploymentResource) getAPIServiceData() (map[string]string, error) { -// apiServiceData := make(map[string]string) - -// iter := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() -// apiServices, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.APIServer](iter, "ReadAllAPIServers", "GetAPIServers", r.ResourceType()) -// if err != nil { -// return nil, err -// } - -// for _, apiService := range apiServices { -// apiServiceId, apiServiceIdOk := apiService.GetIdOk() -// apiServiceName, apiServiceNameOk := apiService.GetNameOk() - -// if apiServiceIdOk && apiServiceNameOk { -// apiServiceData[*apiServiceId] = *apiServiceName -// } -// } - -// return apiServiceData, nil -// } - -// func (r *PingoneAuthorizeAPIServiceDeploymentResource) getAPIServiceDeploymentData(apiServiceId string) (map[string]string, error) { -// apiServiceDeploymentData := make(map[string]string) - -// iter := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServerDeploymentApi.ReadDeploymentStatus(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, apiServiceId).Execute() -// apiServiceDeployments, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.APIServerDeployment](iter, "ReadAPIServiceDeployments", "GetRolePermissions", r.ResourceType()) -// if err != nil { -// return nil, err -// } - -// for _, apiServiceDeployment := range apiServiceDeployments { -// apiServiceDeploymentId, apiServiceDeploymentIdOk := apiServiceDeployment.GetIdOk() -// apiServiceDeploymentName, apiServiceDeploymentNameOk := apiServiceDeployment.GetNameOk() - -// if apiServiceDeploymentIdOk && apiServiceDeploymentNameOk { -// apiServiceDeploymentData[*apiServiceDeploymentId] = *apiServiceDeploymentName -// } -// } - -// return apiServiceDeploymentData, nil -// } - -// func (r *PingoneAuthorizeAPIServiceDeploymentResource) ResourceType() string { -// return "pingone_authorize_api_service_deployment" -// } +import ( + "fmt" + + "github.com/patrickcping/pingone-go-sdk-v2/authorize" + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/common" + "github.com/pingidentity/pingcli/internal/connector/pingone" + "github.com/pingidentity/pingcli/internal/logger" +) + +// Verify that the resource satisfies the exportable resource interface +var ( + _ connector.ExportableResource = &PingoneAuthorizeAPIServiceDeploymentResource{} +) + +type PingoneAuthorizeAPIServiceDeploymentResource struct { + clientInfo *connector.PingOneClientInfo +} + +// Utility method for creating a PingoneAuthorizeAPIServiceDeploymentResource +func AuthorizeAPIServiceDeployment(clientInfo *connector.PingOneClientInfo) *PingoneAuthorizeAPIServiceDeploymentResource { + return &PingoneAuthorizeAPIServiceDeploymentResource{ + clientInfo: clientInfo, + } +} + +func (r *PingoneAuthorizeAPIServiceDeploymentResource) ExportAll() (*[]connector.ImportBlock, error) { + l := logger.Get() + l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType()) + + importBlocks := []connector.ImportBlock{} + + apiServiceData, err := r.getAPIServiceData() + if err != nil { + return nil, err + } + + for apiServiceId, apiServiceName := range apiServiceData { + apiServiceDeployed, err := r.getAPIServiceDeployed(apiServiceId) + if err != nil { + return nil, err + } + + if apiServiceDeployed { + commentData := map[string]string{ + "API Service ID": apiServiceId, + "API Service Name": apiServiceName, + "Export Environment ID": r.clientInfo.ExportEnvironmentID, + "Resource Type": r.ResourceType(), + } + + importBlock := connector.ImportBlock{ + ResourceType: r.ResourceType(), + ResourceName: apiServiceName, + ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, apiServiceId), + CommentInformation: common.GenerateCommentInformation(commentData), + } + + importBlocks = append(importBlocks, importBlock) + } + } + + return &importBlocks, nil +} + +func (r *PingoneAuthorizeAPIServiceDeploymentResource) getAPIServiceData() (map[string]string, error) { + apiServiceData := make(map[string]string) + + iter := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServersApi.ReadAllAPIServers(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute() + apiServices, err := pingone.GetAuthorizeAPIObjectsFromIterator[authorize.APIServer](iter, "ReadAllAPIServers", "GetApiServers", r.ResourceType()) + if err != nil { + return nil, err + } + + for _, apiService := range apiServices { + apiServiceId, apiServiceIdOk := apiService.GetIdOk() + apiServiceName, apiServiceNameOk := apiService.GetNameOk() + + if apiServiceIdOk && apiServiceNameOk { + apiServiceData[*apiServiceId] = *apiServiceName + } + } + + return apiServiceData, nil +} + +func (r *PingoneAuthorizeAPIServiceDeploymentResource) getAPIServiceDeployed(apiServiceId string) (bool, error) { + + apiServerDeployment, httpResponse, err := r.clientInfo.ApiClient.AuthorizeAPIClient.APIServerDeploymentApi.ReadDeploymentStatus(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, apiServiceId).Execute() + ok, err := common.HandleClientResponse(httpResponse, err, "ReadDeploymentStatus", r.ResourceType()) + if err != nil { + return false, err + } + // A warning was given when handling the client response. Return nil apiObjects to skip export of resource + if !ok { + return false, nil + } + + if status, ok := apiServerDeployment.GetStatusOk(); ok { + if statusCode, ok := status.GetCodeOk(); ok && statusCode != nil && *statusCode != "DEPLOYMENT_UNINITIALIZED" { + return true, nil + } + } + + return false, nil +} + +func (r *PingoneAuthorizeAPIServiceDeploymentResource) ResourceType() string { + return "pingone_authorize_api_service_deployment" +} diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go index bd05f4f7..151e701b 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_deployment_test.go @@ -1,27 +1,27 @@ package resources_test -// import ( -// "fmt" -// "testing" +import ( + "fmt" + "testing" -// "github.com/pingidentity/pingcli/internal/connector" -// "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" -// "github.com/pingidentity/pingcli/internal/testing/testutils" -// ) + "github.com/pingidentity/pingcli/internal/connector" + "github.com/pingidentity/pingcli/internal/connector/pingone/authorize/resources" + "github.com/pingidentity/pingcli/internal/testing/testutils" +) -// func TestAuthorizeAPIServiceDeploymentExport(t *testing.T) { -// // Get initialized apiClient and resource -// PingOneClientInfo := testutils.GetPingOneClientInfo(t) -// resource := resources.AuthorizeAPIServiceDeployment(PingOneClientInfo) +func TestAuthorizeAPIServiceDeploymentExport(t *testing.T) { + // Get initialized apiClient and resource + PingOneClientInfo := testutils.GetPingOneClientInfo(t) + resource := resources.AuthorizeAPIServiceDeployment(PingOneClientInfo) -// // Defined the expected ImportBlocks for the resource -// expectedImportBlocks := []connector.ImportBlock{ -// { -// ResourceType: "pingone_authorize_api_service_deployment", -// ResourceName: "Test Authorize API Service Deployment", -// ResourceID: fmt.Sprintf("%s/5ae2227f-cb5b-47c3-bb40-440db09a98e6", testutils.GetEnvironmentID()), -// }, -// } + // Defined the expected ImportBlocks for the resource + expectedImportBlocks := []connector.ImportBlock{ + { + ResourceType: "pingone_authorize_api_service_deployment", + ResourceName: "Test API Service", + ResourceID: fmt.Sprintf("%s/cee5d5a9-49aa-478d-816e-ec47a2b5aede", testutils.GetEnvironmentID()), + }, + } -// testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) -// } + testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) +} From 6991a8c2a1afc9d285ff887f8fb5b02c711f8e9b Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 13:07:25 +0000 Subject: [PATCH 26/29] add tests for undeployed api service --- .../resources/pingone_authorize_api_service_test.go | 5 +++++ .../connector/pingone/sso/resources/pingone_resource_test.go | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go index dbe3dc6f..acf234bb 100644 --- a/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go +++ b/internal/connector/pingone/authorize/resources/pingone_authorize_api_service_test.go @@ -21,6 +21,11 @@ func TestAuthorizeAPIServiceExport(t *testing.T) { ResourceName: "Test API Service", ResourceID: fmt.Sprintf("%s/cee5d5a9-49aa-478d-816e-ec47a2b5aede", testutils.GetEnvironmentID()), }, + { + ResourceType: "pingone_authorize_api_service", + ResourceName: "Undeployed Test API Service", + ResourceID: fmt.Sprintf("%s/5558f5ab-46b2-40ef-ac78-9a32a07e31c3", testutils.GetEnvironmentID()), + }, } testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) diff --git a/internal/connector/pingone/sso/resources/pingone_resource_test.go b/internal/connector/pingone/sso/resources/pingone_resource_test.go index 508bf3a5..08bcc047 100644 --- a/internal/connector/pingone/sso/resources/pingone_resource_test.go +++ b/internal/connector/pingone/sso/resources/pingone_resource_test.go @@ -41,6 +41,11 @@ func TestResourceExport(t *testing.T) { ResourceName: "openid", ResourceID: fmt.Sprintf("%s/8c428665-3e68-4f3c-997d-16a97f8cbe80", testutils.GetEnvironmentID()), }, + { + ResourceType: "pingone_resource", + ResourceName: "Undeployed Test API Service", + ResourceID: fmt.Sprintf("%s/a35fe5ea-084c-4245-80f1-85f9eaf4f063", testutils.GetEnvironmentID()), + }, } testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) From 4552d94165438b590762b6026a7cbec5ddc03351 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 13:12:55 +0000 Subject: [PATCH 27/29] add missing attribute test --- .../pingone/sso/resources/pingone_resource_attribute_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go b/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go index 71feace2..3d32245b 100644 --- a/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go +++ b/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go @@ -156,6 +156,11 @@ func TestResourceAttributeExport(t *testing.T) { ResourceName: "openid_middle_name", ResourceID: fmt.Sprintf("%s/8c428665-3e68-4f3c-997d-16a97f8cbe80/fd6180af-b339-47bb-a9e3-6e02b69fb7ad", testutils.GetEnvironmentID()), }, + { + ResourceType: "pingone_resource_attribute", + ResourceName: "Undeployed Test API Service_sub", + ResourceID: fmt.Sprintf("%s/3c6001a0-6110-4934-9d34-fa8c4a2894c2/be2a2418-127a-4d60-9c04-88a5a568e25c", testutils.GetEnvironmentID()), + }, } testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks) From 30f761048293903123018c53492b3c72a4284065 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Fri, 28 Feb 2025 13:31:07 +0000 Subject: [PATCH 28/29] correct resource ID in test --- .../pingone/sso/resources/pingone_resource_attribute_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go b/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go index 3d32245b..490649e7 100644 --- a/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go +++ b/internal/connector/pingone/sso/resources/pingone_resource_attribute_test.go @@ -159,7 +159,7 @@ func TestResourceAttributeExport(t *testing.T) { { ResourceType: "pingone_resource_attribute", ResourceName: "Undeployed Test API Service_sub", - ResourceID: fmt.Sprintf("%s/3c6001a0-6110-4934-9d34-fa8c4a2894c2/be2a2418-127a-4d60-9c04-88a5a568e25c", testutils.GetEnvironmentID()), + ResourceID: fmt.Sprintf("%s/a35fe5ea-084c-4245-80f1-85f9eaf4f063/be2a2418-127a-4d60-9c04-88a5a568e25c", testutils.GetEnvironmentID()), }, } From 7b9fd51469b620147b6f8b3fa40ee6dcc321fe7c Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Mon, 3 Mar 2025 16:40:10 +0000 Subject: [PATCH 29/29] uncomment test --- .../authorize/pingone_authorize_connector_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go index ebe5985f..0cc8923b 100644 --- a/internal/connector/pingone/authorize/pingone_authorize_connector_test.go +++ b/internal/connector/pingone/authorize/pingone_authorize_connector_test.go @@ -24,11 +24,11 @@ func TestAuthorizeTerraformPlan(t *testing.T) { resource: resources.AuthorizeAPIService(PingOneClientInfo), ignoredErrors: nil, }, - // { - // name: "AuthorizeAPIServiceDeployment", - // resource: resources.AuthorizeAPIServiceDeployment(PingOneClientInfo), - // ignoredErrors: nil, - // }, + { + name: "AuthorizeAPIServiceDeployment", + resource: resources.AuthorizeAPIServiceDeployment(PingOneClientInfo), + ignoredErrors: nil, + }, { name: "AuthorizeAPIServiceOperation", resource: resources.AuthorizeAPIServiceOperation(PingOneClientInfo),