Skip to content

Commit

Permalink
Merge pull request #80 from pingidentity/pingone_identity_provider_at…
Browse files Browse the repository at this point in the history
…tribute-resource-export

pingone_identity_provider_attribute resource export
  • Loading branch information
wesleymccollam committed Mar 18, 2024
2 parents 0f9baca + 2e2d821 commit b7834a9
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/connector/pingone/pingone_platform_connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ func (c *PingonePlatformConnector) Export(format, outputDir string, overwriteExp
ssoresources.ApplicationResourceGrant(&c.clientInfo),
ssoresources.Group(&c.clientInfo),
ssoresources.IdentityProvider(&c.clientInfo),
ssoresources.IdentityProviderAttribute(&c.clientInfo),
ssoresources.Population(&c.clientInfo),
ssoresources.User(&c.clientInfo),
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package sso

import (
"fmt"

"github.com/pingidentity/pingctl/internal/connector"
"github.com/pingidentity/pingctl/internal/connector/pingone/resources/common"
"github.com/pingidentity/pingctl/internal/logger"
)

// Verify that the resource satisfies the exportable resource interface
var (
_ connector.ExportableResource = &PingoneIdentityProviderAttributeResource{}
)

type PingoneIdentityProviderAttributeResource struct {
clientInfo *connector.SDKClientInfo
}

// Utility method for creating a PingoneIdentityProviderAttributeResource
func IdentityProviderAttribute(clientInfo *connector.SDKClientInfo) *PingoneIdentityProviderAttributeResource {
return &PingoneIdentityProviderAttributeResource{
clientInfo: clientInfo,
}
}

func (r *PingoneIdentityProviderAttributeResource) ExportAll() (*[]connector.ImportBlock, error) {
l := logger.Get()

l.Debug().Msgf("Fetching all %s resources...", r.ResourceType())

apiExecuteIdpsFunc := r.clientInfo.ApiClient.ManagementAPIClient.IdentityProvidersApi.ReadAllIdentityProviders(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute
apiapiExecuteIdpsFuncFunctionName := "ReadAllIdentityProviders"

embedded, err := common.GetManagementEmbedded(apiExecuteIdpsFunc, apiapiExecuteIdpsFuncFunctionName, r.ResourceType())
if err != nil {
return nil, err
}

importBlocks := []connector.ImportBlock{}

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

for _, idp := range embedded.GetIdentityProviders() {
var (
idpId *string
idpIdOk bool
idpName *string
idpNameOk bool
)

switch {
case idp.IdentityProviderApple != nil:
idpId, idpIdOk = idp.IdentityProviderApple.GetIdOk()
idpName, idpNameOk = idp.IdentityProviderApple.GetNameOk()
case idp.IdentityProviderClientIDClientSecret != nil:
idpId, idpIdOk = idp.IdentityProviderClientIDClientSecret.GetIdOk()
idpName, idpNameOk = idp.IdentityProviderClientIDClientSecret.GetNameOk()
case idp.IdentityProviderFacebook != nil:
idpId, idpIdOk = idp.IdentityProviderFacebook.GetIdOk()
idpName, idpNameOk = idp.IdentityProviderFacebook.GetNameOk()
case idp.IdentityProviderOIDC != nil:
idpId, idpIdOk = idp.IdentityProviderOIDC.GetIdOk()
idpName, idpNameOk = idp.IdentityProviderOIDC.GetNameOk()
case idp.IdentityProviderPaypal != nil:
idpId, idpIdOk = idp.IdentityProviderPaypal.GetIdOk()
idpName, idpNameOk = idp.IdentityProviderPaypal.GetNameOk()
case idp.IdentityProviderSAML != nil:
idpId, idpIdOk = idp.IdentityProviderSAML.GetIdOk()
idpName, idpNameOk = idp.IdentityProviderSAML.GetNameOk()
default:
continue
}

if idpIdOk && idpNameOk {
apiExecuteIdpAttributesFunc := r.clientInfo.ApiClient.ManagementAPIClient.IdentityProviderAttributesApi.ReadAllIdentityProviderAttributes(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID, *idpId).Execute
apiIdpAttributesFunctionName := "ReadAllIdentityProviderAttributes"

idpAttributesEmbedded, err := common.GetManagementEmbedded(apiExecuteIdpAttributesFunc, apiIdpAttributesFunctionName, r.ResourceType())
if err != nil {
return nil, err
}

for _, idpAttribute := range idpAttributesEmbedded.GetAttributes() {
idpAttributeId, idpAttributeIdOk := idpAttribute.IdentityProviderAttribute.GetIdOk()
idpAttributeName, idpAttributeNameOk := idpAttribute.IdentityProviderAttribute.GetNameOk()
if idpAttributeIdOk && idpAttributeNameOk {
importBlocks = append(importBlocks, connector.ImportBlock{
ResourceType: r.ResourceType(),
ResourceName: fmt.Sprintf("%s_%s", *idpName, *idpAttributeName),
ResourceID: fmt.Sprintf("%s/%s/%s", r.clientInfo.ExportEnvironmentID, *idpId, *idpAttributeId),
})
}
}
}
}

return &importBlocks, nil
}

func (r *PingoneIdentityProviderAttributeResource) ResourceType() string {
return "pingone_identity_provider_attribute"
}

0 comments on commit b7834a9

Please sign in to comment.