bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/cmd/synsec-cli/scenarios.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "bitbucket.org/Aishee/synsec/pkg/cwhub" 7 8 log "github.com/sirupsen/logrus" 9 10 "github.com/spf13/cobra" 11 ) 12 13 func NewScenariosCmd() *cobra.Command { 14 var cmdScenarios = &cobra.Command{ 15 Use: "scenarios [action] [config]", 16 Short: "Install/Remove/Upgrade/Inspect scenario(s) from hub", 17 Example: `ccscli scenarios list [-a] 18 ccscli scenarios install breakteam/ssh-bf 19 ccscli scenarios inspect breakteam/ssh-bf 20 ccscli scenarios upgrade breakteam/ssh-bf 21 ccscli scenarios remove breakteam/ssh-bf 22 `, 23 Args: cobra.MinimumNArgs(1), 24 PersistentPreRunE: func(cmd *cobra.Command, args []string) error { 25 if err := csConfig.LoadHub(); err != nil { 26 log.Fatalf(err.Error()) 27 } 28 if csConfig.Hub == nil { 29 return fmt.Errorf("you must configure cli before interacting with hub") 30 } 31 32 if err := setHubBranch(); err != nil { 33 return fmt.Errorf("error while setting hub branch: %s", err) 34 } 35 36 if err := cwhub.GetHubIdx(csConfig.Hub); err != nil { 37 log.Fatalf("Failed to get Hub index : %v", err) 38 log.Infoln("Run 'sudo ccscli hub update' to get the hub index") 39 } 40 return nil 41 }, 42 PersistentPostRun: func(cmd *cobra.Command, args []string) { 43 if cmd.Name() == "inspect" || cmd.Name() == "list" { 44 return 45 } 46 log.Infof(ReloadMessage()) 47 }, 48 } 49 50 var cmdScenariosInstall = &cobra.Command{ 51 Use: "install [config]", 52 Short: "Install given scenario(s)", 53 Long: `Fetch and install given scenario(s) from hub`, 54 Example: `ccscli scenarios install synsec/xxx synsec/xyz`, 55 Args: cobra.MinimumNArgs(1), 56 Run: func(cmd *cobra.Command, args []string) { 57 for _, name := range args { 58 InstallItem(name, cwhub.SCENARIOS, forceAction) 59 } 60 }, 61 } 62 cmdScenariosInstall.PersistentFlags().BoolVarP(&downloadOnly, "download-only", "d", false, "Only download packages, don't enable") 63 cmdScenariosInstall.PersistentFlags().BoolVar(&forceAction, "force", false, "Force install : Overwrite tainted and outdated files") 64 cmdScenarios.AddCommand(cmdScenariosInstall) 65 66 var cmdScenariosRemove = &cobra.Command{ 67 Use: "remove [config]", 68 Short: "Remove given scenario(s)", 69 Long: `remove given scenario(s)`, 70 Example: `ccscli scenarios remove synsec/xxx synsec/xyz`, 71 Args: cobra.MinimumNArgs(1), 72 Run: func(cmd *cobra.Command, args []string) { 73 if all { 74 RemoveMany(cwhub.SCENARIOS, "") 75 } else { 76 for _, name := range args { 77 RemoveMany(cwhub.SCENARIOS, name) 78 } 79 } 80 }, 81 } 82 cmdScenariosRemove.PersistentFlags().BoolVar(&purge, "purge", false, "Delete source file too") 83 cmdScenariosRemove.PersistentFlags().BoolVar(&forceAction, "force", false, "Force remove : Remove tainted and outdated files") 84 cmdScenariosRemove.PersistentFlags().BoolVar(&all, "all", false, "Delete all the scenarios") 85 cmdScenarios.AddCommand(cmdScenariosRemove) 86 87 var cmdScenariosUpgrade = &cobra.Command{ 88 Use: "upgrade [config]", 89 Short: "Upgrade given scenario(s)", 90 Long: `Fetch and Upgrade given scenario(s) from hub`, 91 Example: `ccscli scenarios upgrade synsec/xxx synsec/xyz`, 92 Run: func(cmd *cobra.Command, args []string) { 93 if all { 94 UpgradeConfig(cwhub.SCENARIOS, "", forceAction) 95 } else { 96 if len(args) == 0 { 97 log.Fatalf("no target scenario to upgrade") 98 } 99 for _, name := range args { 100 UpgradeConfig(cwhub.SCENARIOS, name, forceAction) 101 } 102 } 103 }, 104 } 105 cmdScenariosUpgrade.PersistentFlags().BoolVarP(&all, "all", "a", false, "Upgrade all the scenarios") 106 cmdScenariosUpgrade.PersistentFlags().BoolVar(&forceAction, "force", false, "Force upgrade : Overwrite tainted and outdated files") 107 cmdScenarios.AddCommand(cmdScenariosUpgrade) 108 109 var cmdScenariosInspect = &cobra.Command{ 110 Use: "inspect [config]", 111 Short: "Inspect given scenario", 112 Long: `Inspect given scenario`, 113 Example: `ccscli scenarios inspect synsec/xxx`, 114 Args: cobra.MinimumNArgs(1), 115 Run: func(cmd *cobra.Command, args []string) { 116 InspectItem(args[0], cwhub.SCENARIOS) 117 }, 118 } 119 cmdScenariosInspect.PersistentFlags().StringVarP(&prometheusURL, "url", "u", "", "Prometheus url") 120 cmdScenarios.AddCommand(cmdScenariosInspect) 121 122 var cmdScenariosList = &cobra.Command{ 123 Use: "list [config]", 124 Short: "List all scenario(s) or given one", 125 Long: `List all scenario(s) or given one`, 126 Example: `ccscli scenarios list 127 ccscli scenarios list breakteam/xxx`, 128 Run: func(cmd *cobra.Command, args []string) { 129 ListItem(cwhub.SCENARIOS, args) 130 }, 131 } 132 cmdScenariosList.PersistentFlags().BoolVarP(&all, "all", "a", false, "List as well disabled items") 133 cmdScenarios.AddCommand(cmdScenariosList) 134 135 return cmdScenarios 136 }