Skip to content

Commit

Permalink
PDI-1535: Add pingone_phone_delivery_settings (Resource) Export (#62)
Browse files Browse the repository at this point in the history
  • Loading branch information
erikostien-pingidentity committed Mar 4, 2024
1 parent 25bf8a6 commit caf0137
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ func (c *PingonePlatformConnector) Export(format, outputDir string, overwriteExp
resources.Language(&c.clientInfo),
resources.NotificationPolicy(&c.clientInfo),
resources.NotificationSettings(&c.clientInfo),
resources.PhoneDeliverySettings(&c.clientInfo),
}

for _, exportableResource := range exportableResources {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package resources

import (
"fmt"

"github.com/patrickcping/pingone-go-sdk-v2/management"
"github.com/pingidentity/pingctl/internal/connector"
"github.com/pingidentity/pingctl/internal/logger"
)

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

type PingonePhoneDeliverySettingsResource struct {
clientInfo *connector.SDKClientInfo
}

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

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

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

apiExecuteFunc := r.clientInfo.ApiClient.ManagementAPIClient.PhoneDeliverySettingsApi.ReadAllPhoneDeliverySettings(r.clientInfo.Context, r.clientInfo.ExportEnvironmentID).Execute
apiFunctionName := "ReadAllPhoneDeliverySettings"

embedded, err := GetManagementEmbedded(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 index, phoneDeliverySettings := range embedded.GetPhoneDeliverySettings() {
var (
phoneDeliverySettingsId *string
phoneDeliverySettingsName *string
phoneDeliverySettingsIdOk bool
phoneDeliverySettingsNameOk bool
)

switch {
case phoneDeliverySettings.NotificationsSettingsPhoneDeliverySettingsCustom != nil:
phoneDeliverySettingsId, phoneDeliverySettingsIdOk = phoneDeliverySettings.NotificationsSettingsPhoneDeliverySettingsCustom.GetIdOk()
phoneDeliverySettingsName, phoneDeliverySettingsNameOk = phoneDeliverySettings.NotificationsSettingsPhoneDeliverySettingsCustom.GetNameOk()
case phoneDeliverySettings.NotificationsSettingsPhoneDeliverySettingsTwilioSyniverse != nil:
phoneDeliverySettingsId, phoneDeliverySettingsIdOk = phoneDeliverySettings.NotificationsSettingsPhoneDeliverySettingsTwilioSyniverse.GetIdOk()
phoneDeliverySettingsProvider, phoneDeliverySettingProviderOk := phoneDeliverySettings.NotificationsSettingsPhoneDeliverySettingsTwilioSyniverse.GetProviderOk()
if phoneDeliverySettingProviderOk {
switch *phoneDeliverySettingsProvider {
case management.ENUMNOTIFICATIONSSETTINGSPHONEDELIVERYSETTINGSPROVIDER_TWILIO:
twilioName := fmt.Sprintf("CUSTOM_TWILIO_%d", index)
phoneDeliverySettingsName, phoneDeliverySettingsNameOk = &twilioName, true
case management.ENUMNOTIFICATIONSSETTINGSPHONEDELIVERYSETTINGSPROVIDER_SYNIVERSE:
syniverseName := fmt.Sprintf("CUSTOM_SYNIVERSE_%d", index)
phoneDeliverySettingsName, phoneDeliverySettingsNameOk = &syniverseName, true
default:
continue
}
}
default:
continue
}

if phoneDeliverySettingsIdOk && phoneDeliverySettingsNameOk {
importBlocks = append(importBlocks, connector.ImportBlock{
ResourceType: r.ResourceType(),
ResourceName: *phoneDeliverySettingsName,
ResourceID: fmt.Sprintf("%s/%s", r.clientInfo.ExportEnvironmentID, *phoneDeliverySettingsId),
})
}
}

return &importBlocks, nil
}

func (r *PingonePhoneDeliverySettingsResource) ResourceType() string {
return "pingone_phone_delivery_settings"
}

0 comments on commit caf0137

Please sign in to comment.