github.com/crowdsecurity/crowdsec@v1.6.1/cmd/crowdsec-cli/hubappsec.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 "golang.org/x/text/cases" 8 "golang.org/x/text/language" 9 "gopkg.in/yaml.v3" 10 11 "github.com/crowdsecurity/crowdsec/pkg/appsec" 12 "github.com/crowdsecurity/crowdsec/pkg/appsec/appsec_rule" 13 "github.com/crowdsecurity/crowdsec/pkg/cwhub" 14 ) 15 16 func NewCLIAppsecConfig() *cliItem { 17 return &cliItem{ 18 name: cwhub.APPSEC_CONFIGS, 19 singular: "appsec-config", 20 oneOrMore: "appsec-config(s)", 21 help: cliHelp{ 22 example: `cscli appsec-configs list -a 23 cscli appsec-configs install crowdsecurity/vpatch 24 cscli appsec-configs inspect crowdsecurity/vpatch 25 cscli appsec-configs upgrade crowdsecurity/vpatch 26 cscli appsec-configs remove crowdsecurity/vpatch 27 `, 28 }, 29 installHelp: cliHelp{ 30 example: `cscli appsec-configs install crowdsecurity/vpatch`, 31 }, 32 removeHelp: cliHelp{ 33 example: `cscli appsec-configs remove crowdsecurity/vpatch`, 34 }, 35 upgradeHelp: cliHelp{ 36 example: `cscli appsec-configs upgrade crowdsecurity/vpatch`, 37 }, 38 inspectHelp: cliHelp{ 39 example: `cscli appsec-configs inspect crowdsecurity/vpatch`, 40 }, 41 listHelp: cliHelp{ 42 example: `cscli appsec-configs list 43 cscli appsec-configs list -a 44 cscli appsec-configs list crowdsecurity/vpatch`, 45 }, 46 } 47 } 48 49 func NewCLIAppsecRule() *cliItem { 50 inspectDetail := func(item *cwhub.Item) error { 51 // Only show the converted rules in human mode 52 if csConfig.Cscli.Output != "human" { 53 return nil 54 } 55 56 appsecRule := appsec.AppsecCollectionConfig{} 57 58 yamlContent, err := os.ReadFile(item.State.LocalPath) 59 if err != nil { 60 return fmt.Errorf("unable to read file %s : %s", item.State.LocalPath, err) 61 } 62 63 if err := yaml.Unmarshal(yamlContent, &appsecRule); err != nil { 64 return fmt.Errorf("unable to unmarshal yaml file %s : %s", item.State.LocalPath, err) 65 } 66 67 for _, ruleType := range appsec_rule.SupportedTypes() { 68 fmt.Printf("\n%s format:\n", cases.Title(language.Und, cases.NoLower).String(ruleType)) 69 70 for _, rule := range appsecRule.Rules { 71 convertedRule, _, err := rule.Convert(ruleType, appsecRule.Name) 72 if err != nil { 73 return fmt.Errorf("unable to convert rule %s : %s", rule.Name, err) 74 } 75 76 fmt.Println(convertedRule) 77 } 78 79 switch ruleType { //nolint:gocritic 80 case appsec_rule.ModsecurityRuleType: 81 for _, rule := range appsecRule.SecLangRules { 82 fmt.Println(rule) 83 } 84 } 85 } 86 87 return nil 88 } 89 90 return &cliItem{ 91 name: "appsec-rules", 92 singular: "appsec-rule", 93 oneOrMore: "appsec-rule(s)", 94 help: cliHelp{ 95 example: `cscli appsec-rules list -a 96 cscli appsec-rules install crowdsecurity/crs 97 cscli appsec-rules inspect crowdsecurity/crs 98 cscli appsec-rules upgrade crowdsecurity/crs 99 cscli appsec-rules remove crowdsecurity/crs 100 `, 101 }, 102 installHelp: cliHelp{ 103 example: `cscli appsec-rules install crowdsecurity/crs`, 104 }, 105 removeHelp: cliHelp{ 106 example: `cscli appsec-rules remove crowdsecurity/crs`, 107 }, 108 upgradeHelp: cliHelp{ 109 example: `cscli appsec-rules upgrade crowdsecurity/crs`, 110 }, 111 inspectHelp: cliHelp{ 112 example: `cscli appsec-rules inspect crowdsecurity/crs`, 113 }, 114 inspectDetail: inspectDetail, 115 listHelp: cliHelp{ 116 example: `cscli appsec-rules list 117 cscli appsec-rules list -a 118 cscli appsec-rules list crowdsecurity/crs`, 119 }, 120 } 121 }