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  }