Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions internal/connector/pingone/sso/pingone_sso_connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ func (c *PingOneSSOConnector) Export(format, outputDir string, overwriteExport b
resources.PasswordPolicy(&c.clientInfo),
resources.Population(&c.clientInfo),
resources.PopulationDefault(&c.clientInfo),
resources.PopulationDefaultIdp(&c.clientInfo),
resources.Resource(&c.clientInfo),
resources.ResourceAttribute(&c.clientInfo),
resources.ResourceScope(&c.clientInfo),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,11 @@ func TestSSOTerraformPlan(t *testing.T) {
resource: resources.PopulationDefault(PingOneClientInfo),
ignoredErrors: nil,
},
{
name: "PopulationDefaultIdp",
resource: resources.PopulationDefaultIdp(PingOneClientInfo),
ignoredErrors: nil,
},
{
name: "Resource",
resource: resources.Resource(PingOneClientInfo),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ func TestApplicationSecretExport(t *testing.T) {
ResourceName: "Test MFA_secret",
ResourceID: fmt.Sprintf("%s/11cfc8c7-ec0c-43ff-b49a-64f5e243f932", testutils.GetEnvironmentID()),
},
{
ResourceType: "pingone_application_secret",
ResourceName: "Worker App_secret",
ResourceID: fmt.Sprintf("%s/c45c2f8c-dee0-4a12-b169-bae693a13d57", testutils.GetEnvironmentID()),
},
}

testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func TestIdentityProviderAttributeExport(t *testing.T) {
expectedImportBlocks := []connector.ImportBlock{
{
ResourceType: "pingone_identity_provider_attribute",
ResourceName: "Test IdP_username",
ResourceName: "Default Idp Test_username",
ResourceID: fmt.Sprintf("%s/a99df558-7090-4303-8f35-860ac660e371/51a036c6-41ed-44f7-bd1d-eacaa2a1feab", testutils.GetEnvironmentID()),
},
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func TestIdentityProviderExport(t *testing.T) {
expectedImportBlocks := []connector.ImportBlock{
{
ResourceType: "pingone_identity_provider",
ResourceName: "Test IdP",
ResourceName: "Default Idp Test",
ResourceID: fmt.Sprintf("%s/a99df558-7090-4303-8f35-860ac660e371", testutils.GetEnvironmentID()),
},
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
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 = &PingOnePopulationDefaultIdpResource{}
)

type PingOnePopulationDefaultIdpResource struct {
clientInfo *connector.PingOneClientInfo
}

// Utility method for creating a PingOnePopulationDefaultIdpResource
func PopulationDefaultIdp(clientInfo *connector.PingOneClientInfo) *PingOnePopulationDefaultIdpResource {
return &PingOnePopulationDefaultIdpResource{
clientInfo: clientInfo,
}
}

func (r *PingOnePopulationDefaultIdpResource) ResourceType() string {
return "pingone_population_default_identity_provider"
}

func (r *PingOnePopulationDefaultIdpResource) ExportAll() (*[]connector.ImportBlock, error) {
l := logger.Get()
l.Debug().Msgf("Exporting all '%s' Resources...", r.ResourceType())

importBlocks := []connector.ImportBlock{}

populationData, err := r.getPopulationData()
if err != nil {
return nil, err
}

for populationId, populationName := range populationData {
ok, err := r.checkPopulationDefaultIdp(populationId)
if err != nil {
return nil, err
}
if !ok {
return &importBlocks, nil
}

commentData := map[string]string{
"Export Environment ID": r.clientInfo.ExportEnvironmentID,
"Population ID": populationId,
"Population Name": populationName,
"Resource Type": r.ResourceType(),
}

importBlock := connector.ImportBlock{
ResourceType: r.ResourceType(),
ResourceName: fmt.Sprintf("%s_default_identity_provider", populationName),
ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, populationId),
CommentInformation: common.GenerateCommentInformation(commentData),
}

importBlocks = append(importBlocks, importBlock)
}

return &importBlocks, nil
}

func (r *PingOnePopulationDefaultIdpResource) getPopulationData() (map[string]string, error) {
populationData := make(map[string]string)

iter := r.clientInfo.ApiClient.ManagementAPIClient.PopulationsApi.ReadAllPopulations(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute()
populations, err := pingone.GetManagementAPIObjectsFromIterator[management.Population](iter, "ReadAllPopulations", "GetPopulations", r.ResourceType())
if err != nil {
return nil, err
}

for _, population := range populations {
populationId, populationIdOk := population.GetIdOk()
populationName, populationNameOk := population.GetNameOk()

if populationIdOk && populationNameOk {
populationData[*populationId] = *populationName
}
}

return populationData, nil
}

func (r *PingOnePopulationDefaultIdpResource) checkPopulationDefaultIdp(populationId string) (bool, error) {
_, resp, err := r.clientInfo.ApiClient.ManagementAPIClient.PopulationsApi.ReadOnePopulationDefaultIdp(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, populationId).Execute()
return pingone.CheckSingletonResource(resp, err, "ReadOnePopulationDefaultIdp", r.ResourceType())
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
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 TestPopulationDefaultIdpExport(t *testing.T) {
// Get initialized apiClient and resource
PingOneClientInfo := testutils.GetPingOneClientInfo(t)
resource := resources.PopulationDefaultIdp(PingOneClientInfo)

// Defined the expected ImportBlocks for the resource
expectedImportBlocks := []connector.ImportBlock{
{
ResourceType: "pingone_population_default_identity_provider",
ResourceName: "Default_default_identity_provider",
ResourceID: fmt.Sprintf("%s/720da2ce-4dd0-48d9-af75-aeadbda1860d", testutils.GetEnvironmentID()),
},
{
ResourceType: "pingone_population_default_identity_provider",
ResourceName: "LDAP Gateway Population_default_identity_provider",
ResourceID: fmt.Sprintf("%s/374fdb3c-4e94-4547-838a-0c200b9a7c70", testutils.GetEnvironmentID()),
},
{
ResourceType: "pingone_population_default_identity_provider",
ResourceName: "Test Default Idp Population_default_identity_provider",
ResourceID: fmt.Sprintf("%s/2814912d-4a0f-4104-a779-80c13b2a6dcd", testutils.GetEnvironmentID()),
},
}

testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks)
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ func TestPopulationExport(t *testing.T) {
ResourceName: "LDAP Gateway Population",
ResourceID: fmt.Sprintf("%s/374fdb3c-4e94-4547-838a-0c200b9a7c70", testutils.GetEnvironmentID()),
},
{
ResourceType: "pingone_population",
ResourceName: "Test Default Idp Population",
ResourceID: fmt.Sprintf("%s/2814912d-4a0f-4104-a779-80c13b2a6dcd", testutils.GetEnvironmentID()),
},
}

testutils.ValidateImportBlocks(t, resource, &expectedImportBlocks)
Expand Down
Loading