152 lines
4.1 KiB
Go
152 lines
4.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/crowdsecurity/crowdsec/pkg/cwhub"
|
|
|
|
"github.com/enescakir/emoji"
|
|
"github.com/olekukonko/tablewriter"
|
|
log "github.com/sirupsen/logrus"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var listAll bool
|
|
|
|
func doListing(ttype string, args []string) {
|
|
|
|
var pkgst []map[string]string
|
|
|
|
if len(args) == 1 {
|
|
pkgst = cwhub.HubStatus(ttype, args[0], listAll)
|
|
} else {
|
|
pkgst = cwhub.HubStatus(ttype, "", listAll)
|
|
}
|
|
|
|
if config.output == "human" {
|
|
|
|
table := tablewriter.NewWriter(os.Stdout)
|
|
table.SetCenterSeparator("")
|
|
table.SetColumnSeparator("")
|
|
|
|
table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
|
|
table.SetAlignment(tablewriter.ALIGN_LEFT)
|
|
table.SetHeader([]string{"Name", fmt.Sprintf("%v Status", emoji.Package), "Version", "Local Path"})
|
|
for _, v := range pkgst {
|
|
table.Append([]string{v["name"], v["utf8_status"], v["local_version"], v["local_path"]})
|
|
}
|
|
table.Render()
|
|
} else if config.output == "json" {
|
|
x, err := json.MarshalIndent(pkgst, "", " ")
|
|
if err != nil {
|
|
log.Fatalf("failed to unmarshal")
|
|
}
|
|
fmt.Printf("%s", string(x))
|
|
} else if config.output == "raw" {
|
|
for _, v := range pkgst {
|
|
fmt.Printf("%s %s\n", v["name"], v["description"])
|
|
}
|
|
}
|
|
}
|
|
|
|
func NewListCmd() *cobra.Command {
|
|
/* ---- LIST COMMAND */
|
|
var cmdList = &cobra.Command{
|
|
Use: "list [-a]",
|
|
Short: "List enabled configs",
|
|
Long: `
|
|
List enabled configurations (parser/scenarios/collections) on your host.
|
|
|
|
It is possible to list also configuration from [Crowdsec Hub](https://hub.crowdsec.net) with the '-a' options.
|
|
|
|
[type] must be parsers, scenarios, postoverflows, collections
|
|
`,
|
|
Example: `cscli list # List all local configurations
|
|
cscli list [type] # List all local configuration of type [type]
|
|
cscli list -a # List all local and remote configurations
|
|
`,
|
|
Args: cobra.ExactArgs(0),
|
|
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
|
|
if !config.configured {
|
|
return fmt.Errorf("you must configure cli before interacting with hub")
|
|
}
|
|
return nil
|
|
},
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if err := cwhub.GetHubIdx(); err != nil {
|
|
log.Fatalf("Failed to get Hub index : %v", err)
|
|
}
|
|
|
|
cwhub.DisplaySummary()
|
|
log.Printf("PARSERS:")
|
|
doListing(cwhub.PARSERS, args)
|
|
log.Printf("SCENARIOS:")
|
|
doListing(cwhub.SCENARIOS, args)
|
|
log.Printf("COLLECTIONS:")
|
|
doListing(cwhub.COLLECTIONS, args)
|
|
log.Printf("POSTOVERFLOWS:")
|
|
doListing(cwhub.PARSERS_OVFLW, args)
|
|
},
|
|
}
|
|
cmdList.PersistentFlags().BoolVarP(&listAll, "all", "a", false, "List as well disabled items")
|
|
|
|
var cmdListParsers = &cobra.Command{
|
|
Use: "parsers [-a]",
|
|
Short: "List enabled parsers",
|
|
Long: ``,
|
|
Args: cobra.ExactArgs(0),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if err := cwhub.GetHubIdx(); err != nil {
|
|
log.Fatalf("Failed to get Hub index : %v", err)
|
|
}
|
|
doListing(cwhub.PARSERS, args)
|
|
},
|
|
}
|
|
cmdList.AddCommand(cmdListParsers)
|
|
|
|
var cmdListScenarios = &cobra.Command{
|
|
Use: "scenarios [-a]",
|
|
Short: "List enabled scenarios",
|
|
Long: ``,
|
|
Args: cobra.ExactArgs(0),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if err := cwhub.GetHubIdx(); err != nil {
|
|
log.Fatalf("Failed to get Hub index : %v", err)
|
|
}
|
|
doListing(cwhub.SCENARIOS, args)
|
|
},
|
|
}
|
|
cmdList.AddCommand(cmdListScenarios)
|
|
|
|
var cmdListCollections = &cobra.Command{
|
|
Use: "collections [-a]",
|
|
Short: "List enabled collections",
|
|
Long: ``,
|
|
Args: cobra.ExactArgs(0),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if err := cwhub.GetHubIdx(); err != nil {
|
|
log.Fatalf("Failed to get Hub index : %v", err)
|
|
}
|
|
doListing(cwhub.COLLECTIONS, args)
|
|
},
|
|
}
|
|
cmdList.AddCommand(cmdListCollections)
|
|
|
|
var cmdListPostoverflows = &cobra.Command{
|
|
Use: "postoverflows [-a]",
|
|
Short: "List enabled postoverflow parsers",
|
|
Long: ``,
|
|
Args: cobra.ExactArgs(0),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if err := cwhub.GetHubIdx(); err != nil {
|
|
log.Fatalf("Failed to get Hub index : %v", err)
|
|
}
|
|
doListing(cwhub.PARSERS_OVFLW, args)
|
|
},
|
|
}
|
|
cmdList.AddCommand(cmdListPostoverflows)
|
|
|
|
return cmdList
|
|
}
|