package command import ( "fmt" "os" "github.com/d3m0k1d/BanForge/internal/config" "github.com/spf13/cobra" ) var ( name string service string path string status string method string ttl string max_retry int ) var RuleCmd = &cobra.Command{ Use: "rule", Short: "Manage rules", } var AddCmd = &cobra.Command{ Use: "add", Short: "CLI interface for add new rule to file /etc/banforge/rules.toml", Run: func(cmd *cobra.Command, args []string) { if name == "" { fmt.Printf("Rule name can't be empty\n") os.Exit(1) } if service == "" { fmt.Printf("Service name can't be empty\n") os.Exit(1) } if path == "" && status == "" && method == "" { fmt.Printf("At least 1 rule field must be filled in.") os.Exit(1) } if ttl == "" { ttl = "1y" } err := config.NewRule(name, service, path, status, method, ttl, max_retry) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Println("Rule added successfully!") }, } var ListCmd = &cobra.Command{ Use: "list", Short: "List rules", Run: func(cmd *cobra.Command, args []string) { r, err := config.LoadRuleConfig() if err != nil { fmt.Println(err) os.Exit(1) } for _, rule := range r { fmt.Printf( "Name: %s\nService: %s\nPath: %s\nStatus: %s\n MaxRetry: %d\nMethod: %s\n\n", rule.Name, rule.ServiceName, rule.Path, rule.Status, rule.MaxRetry, rule.Method, ) } }, } func RuleRegister() { RuleCmd.AddCommand(AddCmd) RuleCmd.AddCommand(ListCmd) AddCmd.Flags().StringVarP(&name, "name", "n", "", "rule name (required)") AddCmd.Flags().StringVarP(&service, "service", "s", "", "service name") AddCmd.Flags().StringVarP(&path, "path", "p", "", "request path") AddCmd.Flags().StringVarP(&status, "status", "c", "", "status code") AddCmd.Flags().StringVarP(&method, "method", "m", "", "method") AddCmd.Flags().StringVarP(&ttl, "ttl", "t", "", "ban time") AddCmd.Flags().IntVarP(&max_retry, "max_retry", "r", 0, "max retry") }