github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/terraform/parser/module_retrieval.go (about)

     1  package parser
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io/fs"
     7  
     8  	"github.com/khulnasoft-lab/defsec/pkg/scanners/terraform/parser/resolvers"
     9  )
    10  
    11  type ModuleResolver interface {
    12  	Resolve(context.Context, fs.FS, resolvers.Options) (filesystem fs.FS, prefix string, downloadPath string, applies bool, err error)
    13  }
    14  
    15  var defaultResolvers = []ModuleResolver{
    16  	resolvers.Cache,
    17  	resolvers.Local,
    18  	resolvers.Remote,
    19  	resolvers.Registry,
    20  }
    21  
    22  func resolveModule(ctx context.Context, current fs.FS, opt resolvers.Options) (filesystem fs.FS, sourcePrefix string, downloadPath string, err error) {
    23  	opt.Debug("Resolving module '%s' with source: '%s'...", opt.Name, opt.Source)
    24  	for _, resolver := range defaultResolvers {
    25  		if filesystem, prefix, path, applies, err := resolver.Resolve(ctx, current, opt); err != nil {
    26  			return nil, "", "", err
    27  		} else if applies {
    28  			opt.Debug("Module path is %s", path)
    29  			return filesystem, prefix, path, nil
    30  		}
    31  	}
    32  	return nil, "", "", fmt.Errorf("failed to resolve module '%s' with source: %s", opt.Name, opt.Source)
    33  }