github.com/saucelabs/saucectl@v0.175.1/internal/cmd/apit/getsnippet.go (about) 1 package apit 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 8 cmds "github.com/saucelabs/saucectl/internal/cmd" 9 "github.com/saucelabs/saucectl/internal/http" 10 "github.com/saucelabs/saucectl/internal/segment" 11 "github.com/saucelabs/saucectl/internal/usage" 12 "github.com/spf13/cobra" 13 "golang.org/x/text/cases" 14 "golang.org/x/text/language" 15 ) 16 17 func GetSnippetCommand() *cobra.Command { 18 cmd := &cobra.Command{ 19 Use: "get-snippet NAME [--project PROJECT_NAME]", 20 Short: "Get a vault snippet", 21 Long: `Get a snippet from a project's vault. 22 23 Use [--project] to specify the project by its name or run without [--project] to choose from a list of projects. 24 `, 25 SilenceUsage: true, 26 Args: func(cmd *cobra.Command, args []string) error { 27 if len(args) == 0 || args[0] == "" { 28 return errors.New("no snippet name specified") 29 } 30 return nil 31 }, 32 PreRunE: func(cmd *cobra.Command, args []string) error { 33 err := http.CheckProxy() 34 if err != nil { 35 return fmt.Errorf("invalid HTTP_PROXY value") 36 } 37 38 tracker := segment.DefaultTracker 39 40 go func() { 41 tracker.Collect( 42 cases.Title(language.English).String(cmds.FullName(cmd)), 43 usage.Properties{}.SetFlags(cmd.Flags()), 44 ) 45 _ = tracker.Close() 46 }() 47 return nil 48 }, 49 RunE: func(cmd *cobra.Command, args []string) error { 50 name := args[0] 51 vault, err := apitesterClient.GetVault(context.Background(), selectedProject.Hooks[0].Identifier) 52 if err != nil { 53 return err 54 } 55 56 v, ok := vault.Snippets[name] 57 if !ok { 58 return fmt.Errorf("project %q has no vault snippet with name %q", selectedProject.ProjectMeta.Name, name) 59 } 60 61 fmt.Printf("%s", v) 62 return nil 63 }, 64 } 65 return cmd 66 }