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  }