github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/flag/global_flags.go (about)

     1  package flag
     2  
     3  import (
     4  	"os"
     5  	"time"
     6  
     7  	"github.com/spf13/cobra"
     8  
     9  	"github.com/devseccon/trivy/pkg/utils/fsutils"
    10  )
    11  
    12  var (
    13  	ConfigFileFlag = Flag{
    14  		Name:       "config",
    15  		ConfigName: "config",
    16  		Shorthand:  "c",
    17  		Default:    "trivy.yaml",
    18  		Usage:      "config path",
    19  		Persistent: true,
    20  	}
    21  	ShowVersionFlag = Flag{
    22  		Name:       "version",
    23  		ConfigName: "version",
    24  		Shorthand:  "v",
    25  		Default:    false,
    26  		Usage:      "show version",
    27  		Persistent: true,
    28  	}
    29  	QuietFlag = Flag{
    30  		Name:       "quiet",
    31  		ConfigName: "quiet",
    32  		Shorthand:  "q",
    33  		Default:    false,
    34  		Usage:      "suppress progress bar and log output",
    35  		Persistent: true,
    36  	}
    37  	DebugFlag = Flag{
    38  		Name:       "debug",
    39  		ConfigName: "debug",
    40  		Shorthand:  "d",
    41  		Default:    false,
    42  		Usage:      "debug mode",
    43  		Persistent: true,
    44  	}
    45  	InsecureFlag = Flag{
    46  		Name:       "insecure",
    47  		ConfigName: "insecure",
    48  		Default:    false,
    49  		Usage:      "allow insecure server connections",
    50  		Persistent: true,
    51  	}
    52  	TimeoutFlag = Flag{
    53  		Name:       "timeout",
    54  		ConfigName: "timeout",
    55  		Default:    time.Second * 300, // 5 mins
    56  		Usage:      "timeout",
    57  		Persistent: true,
    58  	}
    59  	CacheDirFlag = Flag{
    60  		Name:       "cache-dir",
    61  		ConfigName: "cache.dir",
    62  		Default:    fsutils.CacheDir(),
    63  		Usage:      "cache directory",
    64  		Persistent: true,
    65  	}
    66  	GenerateDefaultConfigFlag = Flag{
    67  		Name:       "generate-default-config",
    68  		ConfigName: "generate-default-config",
    69  		Default:    false,
    70  		Usage:      "write the default config to trivy-default.yaml",
    71  		Persistent: true,
    72  	}
    73  )
    74  
    75  // GlobalFlagGroup composes global flags
    76  type GlobalFlagGroup struct {
    77  	ConfigFile            *Flag
    78  	ShowVersion           *Flag // spf13/cobra can't override the logic of version printing like VersionPrinter in urfave/cli. -v needs to be defined ourselves.
    79  	Quiet                 *Flag
    80  	Debug                 *Flag
    81  	Insecure              *Flag
    82  	Timeout               *Flag
    83  	CacheDir              *Flag
    84  	GenerateDefaultConfig *Flag
    85  }
    86  
    87  // GlobalOptions defines flags and other configuration parameters for all the subcommands
    88  type GlobalOptions struct {
    89  	ConfigFile            string
    90  	ShowVersion           bool
    91  	Quiet                 bool
    92  	Debug                 bool
    93  	Insecure              bool
    94  	Timeout               time.Duration
    95  	CacheDir              string
    96  	GenerateDefaultConfig bool
    97  }
    98  
    99  func NewGlobalFlagGroup() *GlobalFlagGroup {
   100  	return &GlobalFlagGroup{
   101  		ConfigFile:            &ConfigFileFlag,
   102  		ShowVersion:           &ShowVersionFlag,
   103  		Quiet:                 &QuietFlag,
   104  		Debug:                 &DebugFlag,
   105  		Insecure:              &InsecureFlag,
   106  		Timeout:               &TimeoutFlag,
   107  		CacheDir:              &CacheDirFlag,
   108  		GenerateDefaultConfig: &GenerateDefaultConfigFlag,
   109  	}
   110  }
   111  
   112  func (f *GlobalFlagGroup) flags() []*Flag {
   113  	return []*Flag{
   114  		f.ConfigFile,
   115  		f.ShowVersion,
   116  		f.Quiet,
   117  		f.Debug,
   118  		f.Insecure,
   119  		f.Timeout,
   120  		f.CacheDir,
   121  		f.GenerateDefaultConfig,
   122  	}
   123  }
   124  
   125  func (f *GlobalFlagGroup) AddFlags(cmd *cobra.Command) {
   126  	for _, flag := range f.flags() {
   127  		addFlag(cmd, flag)
   128  	}
   129  }
   130  
   131  func (f *GlobalFlagGroup) Bind(cmd *cobra.Command) error {
   132  	for _, flag := range f.flags() {
   133  		if err := bind(cmd, flag); err != nil {
   134  			return err
   135  		}
   136  	}
   137  	return nil
   138  }
   139  
   140  func (f *GlobalFlagGroup) ToOptions() GlobalOptions {
   141  	// Keep TRIVY_NON_SSL for backward compatibility
   142  	insecure := getBool(f.Insecure) || os.Getenv("TRIVY_NON_SSL") != ""
   143  
   144  	return GlobalOptions{
   145  		ConfigFile:            getString(f.ConfigFile),
   146  		ShowVersion:           getBool(f.ShowVersion),
   147  		Quiet:                 getBool(f.Quiet),
   148  		Debug:                 getBool(f.Debug),
   149  		Insecure:              insecure,
   150  		Timeout:               getDuration(f.Timeout),
   151  		CacheDir:              getString(f.CacheDir),
   152  		GenerateDefaultConfig: getBool(f.GenerateDefaultConfig),
   153  	}
   154  }