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  }