github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/pkg/scanners/universal/scanner.go (about) 1 package universal 2 3 import ( 4 "context" 5 "io/fs" 6 7 "github.com/aquasecurity/defsec/pkg/scan" 8 "github.com/aquasecurity/defsec/pkg/scanners/options" 9 "github.com/aquasecurity/trivy-iac/pkg/scanners" 10 "github.com/aquasecurity/trivy-iac/pkg/scanners/azure/arm" 11 "github.com/aquasecurity/trivy-iac/pkg/scanners/cloudformation" 12 "github.com/aquasecurity/trivy-iac/pkg/scanners/dockerfile" 13 "github.com/aquasecurity/trivy-iac/pkg/scanners/helm" 14 "github.com/aquasecurity/trivy-iac/pkg/scanners/json" 15 "github.com/aquasecurity/trivy-iac/pkg/scanners/kubernetes" 16 "github.com/aquasecurity/trivy-iac/pkg/scanners/terraform" 17 "github.com/aquasecurity/trivy-iac/pkg/scanners/toml" 18 "github.com/aquasecurity/trivy-iac/pkg/scanners/yaml" 19 ) 20 21 type nestableFSScanners interface { 22 scanners.FSScanner 23 options.ConfigurableScanner 24 } 25 26 var _ scanners.FSScanner = (*Scanner)(nil) 27 28 type Scanner struct { 29 fsScanners []nestableFSScanners 30 } 31 32 func New(opts ...options.ScannerOption) *Scanner { 33 s := &Scanner{ 34 fsScanners: []nestableFSScanners{ 35 terraform.New(opts...), 36 cloudformation.New(opts...), 37 dockerfile.NewScanner(opts...), 38 kubernetes.NewScanner(opts...), 39 json.NewScanner(opts...), 40 yaml.NewScanner(opts...), 41 toml.NewScanner(opts...), 42 helm.New(opts...), 43 arm.New(opts...), 44 }, 45 } 46 return s 47 } 48 49 func (s *Scanner) Name() string { 50 return "Universal" 51 } 52 53 func (s *Scanner) ScanFS(ctx context.Context, fs fs.FS, dir string) (scan.Results, error) { 54 var results scan.Results 55 for _, inner := range s.fsScanners { 56 innerResults, err := inner.ScanFS(ctx, fs, dir) 57 if err != nil { 58 return nil, err 59 } 60 results = append(results, innerResults...) 61 } 62 return results, nil 63 }