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 }