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