safing-jess/cmd/cmd-list.go

73 lines
1.7 KiB
Go

package main
import (
"fmt"
"strings"
"github.com/spf13/cobra"
"github.com/safing/jess"
"github.com/safing/jess/hashtools"
"github.com/safing/jess/tools"
)
func init() {
rootCmd.AddCommand(listCmd)
}
var listCmd = &cobra.Command{
Use: "list",
Short: "list all available suites and tools",
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
fmt.Printf("Suites\n\n")
suitesTable := [][]string{
{"Name/ID", "Provides", "Security Level", "Tools", "Notes"},
}
for _, suite := range jess.Suites() {
suitesTable = append(suitesTable, []string{
suite.ID,
suite.Provides.ShortString(),
formatSecurityLevel(suite.SecurityLevel),
strings.Join(suite.Tools, ", "),
formatSuiteStatus(suite),
})
}
for _, line := range formatColumns(suitesTable) {
fmt.Println(line)
}
fmt.Printf("\n\nTools\n\n")
toolTable := [][]string{
{"Name/ID", "Purpose", "Security Level", "Author", "Comment"},
}
for _, tool := range tools.AsList() {
toolTable = append(toolTable, []string{
tool.Info.Name,
tool.Info.FormatPurpose(),
formatToolSecurityLevel(tool),
tool.Info.Author,
tool.Info.Comment,
})
}
for _, line := range formatColumns(toolTable) {
fmt.Println(line)
}
fmt.Printf("\n\nHashTools\n\n")
hashToolTable := [][]string{
{"Name/ID", "Security Level", "Author", "Comment"},
}
for _, hashTool := range hashtools.AsList() {
hashToolTable = append(hashToolTable, []string{
hashTool.Name,
fmt.Sprintf("%d b/s", hashTool.SecurityLevel),
hashTool.Author,
hashTool.Comment,
})
}
for _, line := range formatColumns(hashToolTable) {
fmt.Println(line)
}
},
}