218 lines
6.7 KiB
Go
218 lines
6.7 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/antonmedv/expr"
|
||
|
"github.com/spf13/cobra"
|
||
|
"gopkg.in/yaml.v2"
|
||
|
|
||
|
"github.com/crowdsecurity/crowdsec/pkg/csconfig"
|
||
|
)
|
||
|
|
||
|
func showConfigKey(key string) error {
|
||
|
type Env struct {
|
||
|
Config *csconfig.Config
|
||
|
}
|
||
|
|
||
|
program, err := expr.Compile(key, expr.Env(Env{}))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
output, err := expr.Run(program, Env{Config: csConfig})
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
switch csConfig.Cscli.Output {
|
||
|
case "human", "raw":
|
||
|
switch output.(type) {
|
||
|
case string:
|
||
|
fmt.Printf("%s\n", output)
|
||
|
case int:
|
||
|
fmt.Printf("%d\n", output)
|
||
|
default:
|
||
|
fmt.Printf("%v\n", output)
|
||
|
}
|
||
|
case "json":
|
||
|
data, err := json.MarshalIndent(output, "", " ")
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("failed to marshal configuration: %w", err)
|
||
|
}
|
||
|
|
||
|
fmt.Printf("%s\n", string(data))
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func runConfigShow(cmd *cobra.Command, args []string) error {
|
||
|
flags := cmd.Flags()
|
||
|
|
||
|
key, err := flags.GetString("key")
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if key != "" {
|
||
|
return showConfigKey(key)
|
||
|
}
|
||
|
|
||
|
switch csConfig.Cscli.Output {
|
||
|
case "human":
|
||
|
fmt.Printf("Global:\n")
|
||
|
|
||
|
if csConfig.ConfigPaths != nil {
|
||
|
fmt.Printf(" - Configuration Folder : %s\n", csConfig.ConfigPaths.ConfigDir)
|
||
|
fmt.Printf(" - Data Folder : %s\n", csConfig.ConfigPaths.DataDir)
|
||
|
fmt.Printf(" - Hub Folder : %s\n", csConfig.ConfigPaths.HubDir)
|
||
|
fmt.Printf(" - Simulation File : %s\n", csConfig.ConfigPaths.SimulationFilePath)
|
||
|
}
|
||
|
|
||
|
if csConfig.Common != nil {
|
||
|
fmt.Printf(" - Log Folder : %s\n", csConfig.Common.LogDir)
|
||
|
fmt.Printf(" - Log level : %s\n", csConfig.Common.LogLevel)
|
||
|
fmt.Printf(" - Log Media : %s\n", csConfig.Common.LogMedia)
|
||
|
}
|
||
|
|
||
|
if csConfig.Crowdsec != nil {
|
||
|
fmt.Printf("Crowdsec:\n")
|
||
|
fmt.Printf(" - Acquisition File : %s\n", csConfig.Crowdsec.AcquisitionFilePath)
|
||
|
fmt.Printf(" - Parsers routines : %d\n", csConfig.Crowdsec.ParserRoutinesCount)
|
||
|
if csConfig.Crowdsec.AcquisitionDirPath != "" {
|
||
|
fmt.Printf(" - Acquisition Folder : %s\n", csConfig.Crowdsec.AcquisitionDirPath)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if csConfig.Cscli != nil {
|
||
|
fmt.Printf("cscli:\n")
|
||
|
fmt.Printf(" - Output : %s\n", csConfig.Cscli.Output)
|
||
|
fmt.Printf(" - Hub Branch : %s\n", csConfig.Cscli.HubBranch)
|
||
|
fmt.Printf(" - Hub Folder : %s\n", csConfig.Cscli.HubDir)
|
||
|
}
|
||
|
|
||
|
if csConfig.API != nil {
|
||
|
if csConfig.API.Client != nil && csConfig.API.Client.Credentials != nil {
|
||
|
fmt.Printf("API Client:\n")
|
||
|
fmt.Printf(" - URL : %s\n", csConfig.API.Client.Credentials.URL)
|
||
|
fmt.Printf(" - Login : %s\n", csConfig.API.Client.Credentials.Login)
|
||
|
fmt.Printf(" - Credentials File : %s\n", csConfig.API.Client.CredentialsFilePath)
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server != nil {
|
||
|
fmt.Printf("Local API Server:\n")
|
||
|
fmt.Printf(" - Listen URL : %s\n", csConfig.API.Server.ListenURI)
|
||
|
fmt.Printf(" - Profile File : %s\n", csConfig.API.Server.ProfilesPath)
|
||
|
|
||
|
if csConfig.API.Server.TLS != nil {
|
||
|
if csConfig.API.Server.TLS.CertFilePath != "" {
|
||
|
fmt.Printf(" - Cert File : %s\n", csConfig.API.Server.TLS.CertFilePath)
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server.TLS.KeyFilePath != "" {
|
||
|
fmt.Printf(" - Key File : %s\n", csConfig.API.Server.TLS.KeyFilePath)
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server.TLS.CACertPath != "" {
|
||
|
fmt.Printf(" - CA Cert : %s\n", csConfig.API.Server.TLS.CACertPath)
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server.TLS.CRLPath != "" {
|
||
|
fmt.Printf(" - CRL : %s\n", csConfig.API.Server.TLS.CRLPath)
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server.TLS.CacheExpiration != nil {
|
||
|
fmt.Printf(" - Cache Expiration : %s\n", csConfig.API.Server.TLS.CacheExpiration)
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server.TLS.ClientVerification != "" {
|
||
|
fmt.Printf(" - Client Verification : %s\n", csConfig.API.Server.TLS.ClientVerification)
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server.TLS.AllowedAgentsOU != nil {
|
||
|
for _, ou := range csConfig.API.Server.TLS.AllowedAgentsOU {
|
||
|
fmt.Printf(" - Allowed Agents OU : %s\n", ou)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server.TLS.AllowedBouncersOU != nil {
|
||
|
for _, ou := range csConfig.API.Server.TLS.AllowedBouncersOU {
|
||
|
fmt.Printf(" - Allowed Bouncers OU : %s\n", ou)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fmt.Printf(" - Trusted IPs: \n")
|
||
|
|
||
|
for _, ip := range csConfig.API.Server.TrustedIPs {
|
||
|
fmt.Printf(" - %s\n", ip)
|
||
|
}
|
||
|
|
||
|
if csConfig.API.Server.OnlineClient != nil && csConfig.API.Server.OnlineClient.Credentials != nil {
|
||
|
fmt.Printf("Central API:\n")
|
||
|
fmt.Printf(" - URL : %s\n", csConfig.API.Server.OnlineClient.Credentials.URL)
|
||
|
fmt.Printf(" - Login : %s\n", csConfig.API.Server.OnlineClient.Credentials.Login)
|
||
|
fmt.Printf(" - Credentials File : %s\n", csConfig.API.Server.OnlineClient.CredentialsFilePath)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if csConfig.DbConfig != nil {
|
||
|
fmt.Printf(" - Database:\n")
|
||
|
fmt.Printf(" - Type : %s\n", csConfig.DbConfig.Type)
|
||
|
|
||
|
switch csConfig.DbConfig.Type {
|
||
|
case "sqlite":
|
||
|
fmt.Printf(" - Path : %s\n", csConfig.DbConfig.DbPath)
|
||
|
default:
|
||
|
fmt.Printf(" - Host : %s\n", csConfig.DbConfig.Host)
|
||
|
fmt.Printf(" - Port : %d\n", csConfig.DbConfig.Port)
|
||
|
fmt.Printf(" - User : %s\n", csConfig.DbConfig.User)
|
||
|
fmt.Printf(" - DB Name : %s\n", csConfig.DbConfig.DbName)
|
||
|
}
|
||
|
|
||
|
if csConfig.DbConfig.Flush != nil {
|
||
|
if *csConfig.DbConfig.Flush.MaxAge != "" {
|
||
|
fmt.Printf(" - Flush age : %s\n", *csConfig.DbConfig.Flush.MaxAge)
|
||
|
}
|
||
|
if *csConfig.DbConfig.Flush.MaxItems != 0 {
|
||
|
fmt.Printf(" - Flush size : %d\n", *csConfig.DbConfig.Flush.MaxItems)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
case "json":
|
||
|
data, err := json.MarshalIndent(csConfig, "", " ")
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("failed to marshal configuration: %w", err)
|
||
|
}
|
||
|
|
||
|
fmt.Printf("%s\n", string(data))
|
||
|
case "raw":
|
||
|
data, err := yaml.Marshal(csConfig)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("failed to marshal configuration: %w", err)
|
||
|
}
|
||
|
|
||
|
fmt.Printf("%s\n", string(data))
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
|
||
|
func NewConfigShowCmd() *cobra.Command {
|
||
|
cmdConfigShow := &cobra.Command{
|
||
|
Use: "show",
|
||
|
Short: "Displays current config",
|
||
|
Long: `Displays the current cli configuration.`,
|
||
|
Args: cobra.ExactArgs(0),
|
||
|
DisableAutoGenTag: true,
|
||
|
RunE: runConfigShow,
|
||
|
}
|
||
|
|
||
|
flags := cmdConfigShow.Flags()
|
||
|
flags.StringP("key", "", "", "Display only this value (Config.API.Server.ListenURI)")
|
||
|
|
||
|
return cmdConfigShow
|
||
|
}
|