mirror of
https://github.com/aquasecurity/trivy.git
synced 2025-12-22 07:10:41 -08:00
* refactor: rename Value to Default * refactor: support allowed values for CLI flags * docs: auto-generate * test: fix * test: add tests for flags
157 lines
3.8 KiB
Go
157 lines
3.8 KiB
Go
package flag
|
|
|
|
import (
|
|
"github.com/aquasecurity/trivy/pkg/types"
|
|
)
|
|
|
|
var (
|
|
SkipDirsFlag = Flag{
|
|
Name: "skip-dirs",
|
|
ConfigName: "scan.skip-dirs",
|
|
Default: []string{},
|
|
Usage: "specify the directories where the traversal is skipped",
|
|
}
|
|
SkipFilesFlag = Flag{
|
|
Name: "skip-files",
|
|
ConfigName: "scan.skip-files",
|
|
Default: []string{},
|
|
Usage: "specify the file paths to skip traversal",
|
|
}
|
|
OfflineScanFlag = Flag{
|
|
Name: "offline-scan",
|
|
ConfigName: "scan.offline",
|
|
Default: false,
|
|
Usage: "do not issue API requests to identify dependencies",
|
|
}
|
|
ScannersFlag = Flag{
|
|
Name: "scanners",
|
|
ConfigName: "scan.scanners",
|
|
Default: types.Scanners{
|
|
types.VulnerabilityScanner,
|
|
types.SecretScanner,
|
|
}.StringSlice(),
|
|
Values: types.Scanners{
|
|
types.VulnerabilityScanner,
|
|
types.MisconfigScanner,
|
|
types.SecretScanner,
|
|
types.LicenseScanner,
|
|
}.StringSlice(),
|
|
Aliases: []Alias{
|
|
{
|
|
Name: "security-checks",
|
|
ConfigName: "scan.security-checks",
|
|
Deprecated: true, // --security-checks was renamed to --scanners
|
|
},
|
|
},
|
|
Usage: "comma-separated list of what security issues to detect",
|
|
}
|
|
FilePatternsFlag = Flag{
|
|
Name: "file-patterns",
|
|
ConfigName: "scan.file-patterns",
|
|
Default: []string{},
|
|
Usage: "specify config file patterns",
|
|
}
|
|
SlowFlag = Flag{
|
|
Name: "slow",
|
|
ConfigName: "scan.slow",
|
|
Default: false,
|
|
Usage: "scan over time with lower CPU and memory utilization",
|
|
}
|
|
SBOMSourcesFlag = Flag{
|
|
Name: "sbom-sources",
|
|
ConfigName: "scan.sbom-sources",
|
|
Default: []string{},
|
|
Values: []string{"oci", "rekor"},
|
|
Usage: "[EXPERIMENTAL] try to retrieve SBOM from the specified sources",
|
|
}
|
|
RekorURLFlag = Flag{
|
|
Name: "rekor-url",
|
|
ConfigName: "scan.rekor-url",
|
|
Default: "https://rekor.sigstore.dev",
|
|
Usage: "[EXPERIMENTAL] address of rekor STL server",
|
|
}
|
|
IncludeDevDepsFlag = Flag{
|
|
Name: "include-dev-deps",
|
|
ConfigName: "include-dev-deps",
|
|
Default: false,
|
|
Usage: "include development dependencies in the report (supported: npm)",
|
|
}
|
|
)
|
|
|
|
type ScanFlagGroup struct {
|
|
SkipDirs *Flag
|
|
SkipFiles *Flag
|
|
OfflineScan *Flag
|
|
Scanners *Flag
|
|
FilePatterns *Flag
|
|
Slow *Flag
|
|
SBOMSources *Flag
|
|
RekorURL *Flag
|
|
IncludeDevDeps *Flag
|
|
}
|
|
|
|
type ScanOptions struct {
|
|
Target string
|
|
SkipDirs []string
|
|
SkipFiles []string
|
|
OfflineScan bool
|
|
Scanners types.Scanners
|
|
FilePatterns []string
|
|
Slow bool
|
|
SBOMSources []string
|
|
RekorURL string
|
|
IncludeDevDeps bool
|
|
}
|
|
|
|
func NewScanFlagGroup() *ScanFlagGroup {
|
|
return &ScanFlagGroup{
|
|
SkipDirs: &SkipDirsFlag,
|
|
SkipFiles: &SkipFilesFlag,
|
|
OfflineScan: &OfflineScanFlag,
|
|
Scanners: &ScannersFlag,
|
|
FilePatterns: &FilePatternsFlag,
|
|
Slow: &SlowFlag,
|
|
SBOMSources: &SBOMSourcesFlag,
|
|
RekorURL: &RekorURLFlag,
|
|
IncludeDevDeps: &IncludeDevDepsFlag,
|
|
}
|
|
}
|
|
|
|
func (f *ScanFlagGroup) Name() string {
|
|
return "Scan"
|
|
}
|
|
|
|
func (f *ScanFlagGroup) Flags() []*Flag {
|
|
return []*Flag{
|
|
f.SkipDirs,
|
|
f.SkipFiles,
|
|
f.OfflineScan,
|
|
f.Scanners,
|
|
f.FilePatterns,
|
|
f.Slow,
|
|
f.SBOMSources,
|
|
f.RekorURL,
|
|
f.IncludeDevDeps,
|
|
}
|
|
}
|
|
|
|
func (f *ScanFlagGroup) ToOptions(args []string) (ScanOptions, error) {
|
|
var target string
|
|
if len(args) == 1 {
|
|
target = args[0]
|
|
}
|
|
|
|
return ScanOptions{
|
|
Target: target,
|
|
SkipDirs: getStringSlice(f.SkipDirs),
|
|
SkipFiles: getStringSlice(f.SkipFiles),
|
|
OfflineScan: getBool(f.OfflineScan),
|
|
Scanners: getUnderlyingStringSlice[types.Scanner](f.Scanners),
|
|
FilePatterns: getStringSlice(f.FilePatterns),
|
|
Slow: getBool(f.Slow),
|
|
SBOMSources: getStringSlice(f.SBOMSources),
|
|
RekorURL: getString(f.RekorURL),
|
|
IncludeDevDeps: getBool(f.IncludeDevDeps),
|
|
}, nil
|
|
}
|