Files
sailpoint-cli/cmd/workflow/download.go
2023-08-04 15:52:57 -05:00

83 lines
1.7 KiB
Go

// Copyright (c) 2023, SailPoint Technologies, Inc. All rights reserved.
package workflow
import (
"context"
_ "embed"
"os"
"path"
clean "github.com/mrz1836/go-sanitize"
"github.com/sailpoint-oss/sailpoint-cli/internal/config"
"github.com/sailpoint-oss/sailpoint-cli/internal/sdk"
"github.com/sailpoint-oss/sailpoint-cli/internal/util"
"github.com/spf13/cobra"
)
//go:embed download.md
var downloadHelp string
func newDownloadCommand() *cobra.Command {
help := util.ParseHelp(downloadHelp)
var folderPath string
cmd := &cobra.Command{
Use: "download",
Short: "Download Workflows from IdentityNow",
Long: help.Long,
Example: help.Example,
Aliases: []string{"down"},
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
apiClient, err := config.InitAPIClient()
if err != nil {
return err
}
workflows, resp, sdkErr := apiClient.Beta.WorkflowsApi.ListWorkflows(context.TODO()).Execute()
if sdkErr != nil {
err := sdk.HandleSDKError(resp, sdkErr)
if err != nil {
return err
}
}
for _, v := range workflows {
fileName := clean.PathName(*v.Name) + ".json"
fullPath := path.Join(folderPath, fileName)
err := os.MkdirAll(folderPath, os.ModePerm)
if err != nil {
return err
}
file, err := os.Create(fullPath)
if err != nil {
return err
}
defer file.Close()
_, err = file.WriteString(util.PrettyPrint(v))
if err != nil {
return err
}
err = file.Sync()
if err != nil {
return err
}
}
return nil
},
}
cmd.Flags().StringVarP(&folderPath, "folder", "f", "workflows", "Folder to save the Workflows to")
return cmd
}