github.com/saucelabs/saucectl@v0.175.1/internal/cmd/apit/deletefile.go (about)

     1  package apit
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"fmt"
     7  
     8  	"github.com/AlecAivazis/survey/v2"
     9  	"github.com/spf13/cobra"
    10  	"golang.org/x/text/cases"
    11  	"golang.org/x/text/language"
    12  
    13  	cmds "github.com/saucelabs/saucectl/internal/cmd"
    14  	"github.com/saucelabs/saucectl/internal/http"
    15  	"github.com/saucelabs/saucectl/internal/segment"
    16  	"github.com/saucelabs/saucectl/internal/usage"
    17  )
    18  
    19  func DeleteFileCommand() *cobra.Command {
    20  	cmd := &cobra.Command{
    21  		Use:   "delete-file FILENAME [--project PROJECT_NAME]",
    22  		Short: "Delete a file in vault",
    23  		Long: `Delete a file in a project's vault.
    24  
    25  Use [--project] to specify the project by its name or run without [--project] to choose from a list of projects.
    26  `,
    27  		SilenceUsage: true,
    28  		Args: func(cmd *cobra.Command, args []string) error {
    29  			if len(args) == 0 || args[0] == "" {
    30  				return errors.New("no file name specified")
    31  			}
    32  			return nil
    33  		},
    34  		PreRunE: func(cmd *cobra.Command, args []string) error {
    35  			err := http.CheckProxy()
    36  			if err != nil {
    37  				return fmt.Errorf("invalid HTTP_PROXY value")
    38  			}
    39  
    40  			tracker := segment.DefaultTracker
    41  
    42  			go func() {
    43  				tracker.Collect(
    44  					cases.Title(language.English).String(cmds.FullName(cmd)),
    45  					usage.Properties{}.SetFlags(cmd.Flags()),
    46  				)
    47  				_ = tracker.Close()
    48  			}()
    49  			return nil
    50  		},
    51  		RunE: func(cmd *cobra.Command, args []string) error {
    52  			name := args[0]
    53  
    54  			confirmed, err := confirmDelete(name)
    55  			if err != nil {
    56  				return err
    57  			}
    58  			if !confirmed {
    59  				fmt.Printf("File %q has NOT been deleted.\n", name)
    60  				return nil
    61  			}
    62  
    63  			err = apitesterClient.DeleteVaultFile(context.Background(), selectedProject.ID, []string{name})
    64  			if err != nil {
    65  				return err
    66  			}
    67  			fmt.Printf("File %q has been successfully deleted.\n", name)
    68  			return nil
    69  		},
    70  	}
    71  	return cmd
    72  }
    73  
    74  func confirmDelete(fileName string) (bool, error) {
    75  	var selection bool
    76  	prompt := &survey.Confirm{
    77  		Message: fmt.Sprintf("Do you really want to delete %q ?", fileName),
    78  	}
    79  	err := survey.AskOne(prompt, &selection)
    80  	return selection, err
    81  }