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

     1  package artifact
     2  
     3  import (
     4  	"context"
     5  	"sort"
     6  
     7  	"github.com/devseccon/trivy/pkg/fanal/analyzer"
     8  	"github.com/devseccon/trivy/pkg/fanal/types"
     9  	"github.com/devseccon/trivy/pkg/fanal/walker"
    10  	"github.com/devseccon/trivy/pkg/misconf"
    11  )
    12  
    13  type Option struct {
    14  	AnalyzerGroup     analyzer.Group // It is empty in OSS
    15  	DisabledAnalyzers []analyzer.Type
    16  	DisabledHandlers  []types.HandlerType
    17  	SkipFiles         []string
    18  	SkipDirs          []string
    19  	FilePatterns      []string
    20  	NoProgress        bool
    21  	Insecure          bool
    22  	Offline           bool
    23  	AppDirs           []string
    24  	SBOMSources       []string
    25  	RekorURL          string
    26  	Parallel          int
    27  	AWSRegion         string
    28  	AWSEndpoint       string
    29  	FileChecksum      bool // For SPDX
    30  
    31  	// Git repositories
    32  	RepoBranch string
    33  	RepoCommit string
    34  	RepoTag    string
    35  
    36  	// For image scanning
    37  	ImageOption types.ImageOptions
    38  
    39  	MisconfScannerOption misconf.ScannerOption
    40  	SecretScannerOption  analyzer.SecretScannerOption
    41  	LicenseScannerOption analyzer.LicenseScannerOption
    42  
    43  	// File walk
    44  	WalkOption WalkOption
    45  }
    46  
    47  // WalkOption is a struct that allows users to define a custom walking behavior.
    48  // This option is only available when using Trivy as an imported library and not through CLI flags.
    49  type WalkOption struct {
    50  	ErrorCallback walker.ErrorCallback
    51  }
    52  
    53  func (o *Option) AnalyzerOptions() analyzer.AnalyzerOptions {
    54  	return analyzer.AnalyzerOptions{
    55  		Group:                o.AnalyzerGroup,
    56  		FilePatterns:         o.FilePatterns,
    57  		Parallel:             o.Parallel,
    58  		DisabledAnalyzers:    o.DisabledAnalyzers,
    59  		MisconfScannerOption: o.MisconfScannerOption,
    60  		SecretScannerOption:  o.SecretScannerOption,
    61  		LicenseScannerOption: o.LicenseScannerOption,
    62  	}
    63  }
    64  
    65  func (o *Option) ConfigAnalyzerOptions() analyzer.ConfigAnalyzerOptions {
    66  	return analyzer.ConfigAnalyzerOptions{
    67  		FilePatterns:         o.FilePatterns,
    68  		DisabledAnalyzers:    o.DisabledAnalyzers,
    69  		MisconfScannerOption: o.MisconfScannerOption,
    70  		SecretScannerOption:  o.SecretScannerOption,
    71  	}
    72  }
    73  
    74  func (o *Option) Sort() {
    75  	sort.Slice(o.DisabledAnalyzers, func(i, j int) bool {
    76  		return o.DisabledAnalyzers[i] < o.DisabledAnalyzers[j]
    77  	})
    78  	sort.Strings(o.SkipFiles)
    79  	sort.Strings(o.SkipDirs)
    80  	sort.Strings(o.FilePatterns)
    81  }
    82  
    83  type Artifact interface {
    84  	Inspect(ctx context.Context) (reference types.ArtifactReference, err error)
    85  	Clean(reference types.ArtifactReference) error
    86  }