github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/flag/db_flags.go (about) 1 package flag 2 3 import ( 4 "golang.org/x/xerrors" 5 6 "github.com/devseccon/trivy/pkg/log" 7 ) 8 9 const defaultDBRepository = "ghcr.io/aquasecurity/trivy-db" 10 const defaultJavaDBRepository = "ghcr.io/aquasecurity/trivy-java-db" 11 12 var ( 13 ResetFlag = Flag{ 14 Name: "reset", 15 ConfigName: "reset", 16 Default: false, 17 Usage: "remove all caches and database", 18 } 19 DownloadDBOnlyFlag = Flag{ 20 Name: "download-db-only", 21 ConfigName: "db.download-only", 22 Default: false, 23 Usage: "download/update vulnerability database but don't run a scan", 24 } 25 SkipDBUpdateFlag = Flag{ 26 Name: "skip-db-update", 27 ConfigName: "db.skip-update", 28 Default: false, 29 Usage: "skip updating vulnerability database", 30 Aliases: []Alias{ 31 { 32 Name: "skip-update", 33 Deprecated: true, // --skip-update was renamed to --skip-db-update 34 }, 35 }, 36 } 37 DownloadJavaDBOnlyFlag = Flag{ 38 Name: "download-java-db-only", 39 ConfigName: "db.download-java-only", 40 Default: false, 41 Usage: "download/update Java index database but don't run a scan", 42 } 43 SkipJavaDBUpdateFlag = Flag{ 44 Name: "skip-java-db-update", 45 ConfigName: "db.java-skip-update", 46 Default: false, 47 Usage: "skip updating Java index database", 48 } 49 NoProgressFlag = Flag{ 50 Name: "no-progress", 51 ConfigName: "db.no-progress", 52 Default: false, 53 Usage: "suppress progress bar", 54 } 55 DBRepositoryFlag = Flag{ 56 Name: "db-repository", 57 ConfigName: "db.repository", 58 Default: defaultDBRepository, 59 Usage: "OCI repository to retrieve trivy-db from", 60 } 61 JavaDBRepositoryFlag = Flag{ 62 Name: "java-db-repository", 63 ConfigName: "db.java-repository", 64 Default: defaultJavaDBRepository, 65 Usage: "OCI repository to retrieve trivy-java-db from", 66 } 67 LightFlag = Flag{ 68 Name: "light", 69 ConfigName: "db.light", 70 Default: false, 71 Usage: "deprecated", 72 Deprecated: true, 73 } 74 ) 75 76 // DBFlagGroup composes common printer flag structs used for commands requiring DB logic. 77 type DBFlagGroup struct { 78 Reset *Flag 79 DownloadDBOnly *Flag 80 SkipDBUpdate *Flag 81 DownloadJavaDBOnly *Flag 82 SkipJavaDBUpdate *Flag 83 NoProgress *Flag 84 DBRepository *Flag 85 JavaDBRepository *Flag 86 Light *Flag // deprecated 87 } 88 89 type DBOptions struct { 90 Reset bool 91 DownloadDBOnly bool 92 SkipDBUpdate bool 93 DownloadJavaDBOnly bool 94 SkipJavaDBUpdate bool 95 NoProgress bool 96 DBRepository string 97 JavaDBRepository string 98 Light bool // deprecated 99 } 100 101 // NewDBFlagGroup returns a default DBFlagGroup 102 func NewDBFlagGroup() *DBFlagGroup { 103 return &DBFlagGroup{ 104 Reset: &ResetFlag, 105 DownloadDBOnly: &DownloadDBOnlyFlag, 106 SkipDBUpdate: &SkipDBUpdateFlag, 107 DownloadJavaDBOnly: &DownloadJavaDBOnlyFlag, 108 SkipJavaDBUpdate: &SkipJavaDBUpdateFlag, 109 Light: &LightFlag, 110 NoProgress: &NoProgressFlag, 111 DBRepository: &DBRepositoryFlag, 112 JavaDBRepository: &JavaDBRepositoryFlag, 113 } 114 } 115 116 func (f *DBFlagGroup) Name() string { 117 return "DB" 118 } 119 120 func (f *DBFlagGroup) Flags() []*Flag { 121 return []*Flag{ 122 f.Reset, 123 f.DownloadDBOnly, 124 f.SkipDBUpdate, 125 f.DownloadJavaDBOnly, 126 f.SkipJavaDBUpdate, 127 f.NoProgress, 128 f.DBRepository, 129 f.JavaDBRepository, 130 f.Light, 131 } 132 } 133 134 func (f *DBFlagGroup) ToOptions() (DBOptions, error) { 135 skipDBUpdate := getBool(f.SkipDBUpdate) 136 skipJavaDBUpdate := getBool(f.SkipJavaDBUpdate) 137 downloadDBOnly := getBool(f.DownloadDBOnly) 138 downloadJavaDBOnly := getBool(f.DownloadJavaDBOnly) 139 light := getBool(f.Light) 140 141 if downloadDBOnly && skipDBUpdate { 142 return DBOptions{}, xerrors.New("--skip-db-update and --download-db-only options can not be specified both") 143 } 144 if downloadJavaDBOnly && skipJavaDBUpdate { 145 return DBOptions{}, xerrors.New("--skip-java-db-update and --download-java-db-only options can not be specified both") 146 } 147 if light { 148 log.Logger.Warn("'--light' option is deprecated and will be removed. See also: https://github.com/devseccon/trivy/discussions/1649") 149 } 150 151 return DBOptions{ 152 Reset: getBool(f.Reset), 153 DownloadDBOnly: downloadDBOnly, 154 SkipDBUpdate: skipDBUpdate, 155 DownloadJavaDBOnly: downloadJavaDBOnly, 156 SkipJavaDBUpdate: skipJavaDBUpdate, 157 Light: light, 158 NoProgress: getBool(f.NoProgress), 159 DBRepository: getString(f.DBRepository), 160 JavaDBRepository: getString(f.JavaDBRepository), 161 }, nil 162 }