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
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ func (c *PingFederateConnector) Export(format, outputDir string, overwriteExport
resources.AuthenticationPoliciesSettings(&c.clientInfo),
resources.AuthenticationPolicyContract(&c.clientInfo),
resources.AuthenticationSelector(&c.clientInfo),
resources.CaptchaProvider(&c.clientInfo),
resources.CertificateCA(&c.clientInfo),
resources.DataStore(&c.clientInfo),
resources.DefaultURLs(&c.clientInfo),
Expand Down
62 changes: 26 additions & 36 deletions internal/connector/pingfederate/pingfederate_connector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,9 @@ func TestPingFederateTerraformPlan(t *testing.T) {
ignoredErrors: nil,
},
{
name: "PingFederateAuthenticationPoliciesFragment",
resource: resources.AuthenticationPoliciesFragment(PingFederateClientInfo),
ignoredErrors: []string{
"Error: Reference to undeclared resource",
},
name: "PingFederateAuthenticationPoliciesFragment",
resource: resources.AuthenticationPoliciesFragment(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederateAuthenticationPoliciesSettings",
Expand All @@ -56,6 +54,11 @@ func TestPingFederateTerraformPlan(t *testing.T) {
resource: resources.AuthenticationSelector(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederateCaptchaProvider",
resource: resources.CaptchaProvider(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederateCertificateCA",
resource: resources.CertificateCA(PingFederateClientInfo),
Expand All @@ -64,11 +67,9 @@ func TestPingFederateTerraformPlan(t *testing.T) {
},
},
{
name: "PingFederateDataStore",
resource: resources.DataStore(PingFederateClientInfo),
ignoredErrors: []string{
"Error: Invalid attribute configuration",
},
name: "PingFederateDataStore",
resource: resources.DataStore(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederateDefaultURLs",
Expand All @@ -81,12 +82,9 @@ func TestPingFederateTerraformPlan(t *testing.T) {
ignoredErrors: nil,
},
{
name: "PingFederateIDPAdapter",
resource: resources.IDPAdapter(PingFederateClientInfo),
ignoredErrors: []string{
"Error: Missing Configuration for Required Attribute",
"Error: Reference to undeclared resource",
},
name: "PingFederateIDPAdapter",
resource: resources.IDPAdapter(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederateIDPSPConnection",
Expand All @@ -99,11 +97,9 @@ func TestPingFederateTerraformPlan(t *testing.T) {
ignoredErrors: nil,
},
{
name: "PingFederateKerberosRealm",
resource: resources.KerberosRealm(PingFederateClientInfo),
ignoredErrors: []string{
"Error: Invalid attribute configuration",
},
name: "PingFederateKerberosRealm",
resource: resources.KerberosRealm(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederateLocalIdentityProfile",
Expand Down Expand Up @@ -131,11 +127,9 @@ func TestPingFederateTerraformPlan(t *testing.T) {
ignoredErrors: nil,
},
{
name: "PingFederateOAuthClient",
resource: resources.OAuthClient(PingFederateClientInfo),
ignoredErrors: []string{
"Error: Invalid attribute configuration",
},
name: "PingFederateOAuthClient",
resource: resources.OAuthClient(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederateOAuthIssuer",
Expand All @@ -158,18 +152,14 @@ func TestPingFederateTerraformPlan(t *testing.T) {
ignoredErrors: nil,
},
{
name: "PingFederatePasswordCredentialValidator",
resource: resources.PasswordCredentialValidator(PingFederateClientInfo),
ignoredErrors: []string{
"Error: Missing Configuration for Required Attribute",
},
name: "PingFederatePasswordCredentialValidator",
resource: resources.PasswordCredentialValidator(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederatePingOneConnection",
resource: resources.PingOneConnection(PingFederateClientInfo),
ignoredErrors: []string{
"Error: Missing Configuration for Required Attribute",
},
name: "PingFederatePingOneConnection",
resource: resources.PingOneConnection(PingFederateClientInfo),
ignoredErrors: nil,
},
{
name: "PingFederateRedirectValidation",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package resources

import (
"fmt"

"github.com/pingidentity/pingcli/internal/connector"
"github.com/pingidentity/pingcli/internal/connector/common"
"github.com/pingidentity/pingcli/internal/logger"
Expand All @@ -24,61 +22,67 @@ func AuthenticationApiApplication(clientInfo *connector.PingFederateClientInfo)
}
}

func (r *PingFederateAuthenticationApiApplicationResource) ResourceType() string {
return "pingfederate_authentication_api_application"
}

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

importBlocks := []connector.ImportBlock{}

applicationData, err := r.getApplicationData()
if err != nil {
return nil, err
}

for appId, appName := range *applicationData {
commentData := map[string]string{
"Authentication API Application Resource ID": appId,
"Authentication API Application Resource Name": appName,
"Resource Type": r.ResourceType(),
}

l.Debug().Msgf("Fetching all %s resources...", r.ResourceType())
importBlock := connector.ImportBlock{
ResourceType: r.ResourceType(),
ResourceName: appName,
ResourceID: appId,
CommentInformation: common.GenerateCommentInformation(commentData),
}

apiExecuteFunc := r.clientInfo.ApiClient.AuthenticationApiAPI.GetAuthenticationApiApplications(r.clientInfo.Context).Execute
apiFunctionName := "GetAuthenticationApiApplications"
importBlocks = append(importBlocks, importBlock)
}

authnApiApplications, response, err := apiExecuteFunc()
return &importBlocks, nil
}

err = common.HandleClientResponse(response, err, apiFunctionName, r.ResourceType())
func (r *PingFederateAuthenticationApiApplicationResource) getApplicationData() (*map[string]string, error) {
applicationData := make(map[string]string)

authnApiApplications, response, err := r.clientInfo.ApiClient.AuthenticationApiAPI.GetAuthenticationApiApplications(r.clientInfo.Context).Execute()
err = common.HandleClientResponse(response, err, "GetAuthenticationApiApplications", r.ResourceType())
if err != nil {
return nil, err
}

if authnApiApplications == nil {
l.Error().Msgf("Returned %s() authnApiApplications is nil.", apiFunctionName)
l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body)
return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName)
return nil, common.DataNilError(r.ResourceType(), response)
}

authnApiApplicationsItems, ok := authnApiApplications.GetItemsOk()
if !ok {
l.Error().Msgf("Failed to get %s() authnApiApplications items.", apiFunctionName)
l.Error().Msgf("%s Response Code: %s\nResponse Body: %s", apiFunctionName, response.Status, response.Body)
return nil, fmt.Errorf("failed to fetch %s resources via %s()", r.ResourceType(), apiFunctionName)
authnApiApplicationsItems, authnApiApplicationsItemsOk := authnApiApplications.GetItemsOk()
if !authnApiApplicationsItemsOk {
return nil, common.DataNilError(r.ResourceType(), response)
}

importBlocks := []connector.ImportBlock{}

l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType())

for _, authnApiApplication := range authnApiApplicationsItems {
authnApiApplicationId, authnApiApplicationIdOk := authnApiApplication.GetIdOk()
authnApiApplicationName, authnApiApplicationNameOk := authnApiApplication.GetNameOk()

if authnApiApplicationIdOk && authnApiApplicationNameOk {
commentData := map[string]string{
"Resource Type": r.ResourceType(),
"Authentication API Application Resource ID": *authnApiApplicationId,
"Authentication API Application Resource Name": *authnApiApplicationName,
}

importBlocks = append(importBlocks, connector.ImportBlock{
ResourceType: r.ResourceType(),
ResourceName: *authnApiApplicationName,
ResourceID: *authnApiApplicationId,
CommentInformation: common.GenerateCommentInformation(commentData),
})
applicationData[*authnApiApplicationId] = *authnApiApplicationName
}
}

return &importBlocks, nil
}

func (r *PingFederateAuthenticationApiApplicationResource) ResourceType() string {
return "pingfederate_authentication_api_application"
return &applicationData, nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,16 @@ func AuthenticationApiSettings(clientInfo *connector.PingFederateClientInfo) *Pi
}
}

func (r *PingFederateAuthenticationApiSettingsResource) ResourceType() string {
return "pingfederate_authentication_api_settings"
}

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

importBlocks := []connector.ImportBlock{}

l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType())

authnApiSettingsId := "authentication_api_settings_singleton_id"
authnApiSettingsName := "Authentication API Settings"

Expand All @@ -37,16 +40,14 @@ func (r *PingFederateAuthenticationApiSettingsResource) ExportAll() (*[]connecto
"Singleton ID": common.SINGLETON_ID_COMMENT_DATA,
}

importBlocks = append(importBlocks, connector.ImportBlock{
importBlock := connector.ImportBlock{
ResourceType: r.ResourceType(),
ResourceName: authnApiSettingsName,
ResourceID: authnApiSettingsId,
CommentInformation: common.GenerateCommentInformation(commentData),
})
}

return &importBlocks, nil
}
importBlocks = append(importBlocks, importBlock)

func (r *PingFederateAuthenticationApiSettingsResource) ResourceType() string {
return "pingfederate_authentication_api_settings"
return &importBlocks, nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,16 @@ func AuthenticationPolicies(clientInfo *connector.PingFederateClientInfo) *PingF
}
}

func (r *PingFederateAuthenticationPoliciesResource) ResourceType() string {
return "pingfederate_authentication_policies"
}

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

importBlocks := []connector.ImportBlock{}

l.Debug().Msgf("Generating Import Blocks for all %s resources...", r.ResourceType())

authnPoliciesId := "authentication_policies_singleton_id"
authnPoliciesName := "Authentication Policies"

Expand All @@ -37,16 +40,14 @@ func (r *PingFederateAuthenticationPoliciesResource) ExportAll() (*[]connector.I
"Singleton ID": common.SINGLETON_ID_COMMENT_DATA,
}

importBlocks = append(importBlocks, connector.ImportBlock{
importBlock := connector.ImportBlock{
ResourceType: r.ResourceType(),
ResourceName: authnPoliciesName,
ResourceID: authnPoliciesId,
CommentInformation: common.GenerateCommentInformation(commentData),
})
}

return &importBlocks, nil
}
importBlocks = append(importBlocks, importBlock)

func (r *PingFederateAuthenticationPoliciesResource) ResourceType() string {
return "pingfederate_authentication_policies"
return &importBlocks, nil
}
Loading