github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/source/sourceproviders/source_providers.go (about) 1 package sourceproviders 2 3 import ( 4 "github.com/anchore/go-collections" 5 "github.com/anchore/stereoscope" 6 "github.com/anchore/stereoscope/pkg/image" 7 "github.com/anchore/syft/syft/source" 8 "github.com/anchore/syft/syft/source/directorysource" 9 "github.com/anchore/syft/syft/source/filesource" 10 "github.com/anchore/syft/syft/source/stereoscopesource" 11 ) 12 13 const ( 14 FileTag = stereoscope.FileTag 15 DirTag = stereoscope.DirTag 16 PullTag = stereoscope.PullTag 17 ) 18 19 // All returns all the configured source providers known to syft 20 func All(userInput string, cfg *Config) []collections.TaggedValue[source.Provider] { 21 if cfg == nil { 22 cfg = DefaultConfig() 23 } 24 stereoscopeProviders := stereoscopeSourceProviders(userInput, cfg) 25 26 return collections.TaggedValueSet[source.Provider]{}. 27 // --from file, dir, oci-archive, etc. 28 Join(stereoscopeProviders.Select(FileTag, DirTag)...). 29 Join(tagProvider(filesource.NewSourceProvider(userInput, cfg.Exclude, cfg.DigestAlgorithms, cfg.Alias), FileTag)). 30 Join(tagProvider(directorysource.NewSourceProvider(userInput, cfg.Exclude, cfg.Alias, cfg.BasePath), DirTag)). 31 32 // --from docker, registry, etc. 33 Join(stereoscopeProviders.Select(PullTag)...) 34 } 35 36 func stereoscopeSourceProviders(userInput string, cfg *Config) collections.TaggedValueSet[source.Provider] { 37 var registry image.RegistryOptions 38 if cfg.RegistryOptions != nil { 39 registry = *cfg.RegistryOptions 40 } 41 stereoscopeProviders := stereoscopesource.Providers(stereoscopesource.ProviderConfig{ 42 StereoscopeImageProviderConfig: stereoscope.ImageProviderConfig{ 43 UserInput: userInput, 44 Platform: cfg.Platform, 45 Registry: registry, 46 }, 47 Alias: cfg.Alias, 48 Exclude: cfg.Exclude, 49 }) 50 return stereoscopeProviders 51 } 52 53 func tagProvider(provider source.Provider, tags ...string) collections.TaggedValue[source.Provider] { 54 return collections.NewTaggedValue(provider, append([]string{provider.Name()}, tags...)...) 55 }