github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/internal/task/package_tasks.go (about)

     1  package task
     2  
     3  import (
     4  	"github.com/anchore/syft/syft/cataloging/pkgcataloging"
     5  	"github.com/anchore/syft/syft/pkg"
     6  	"github.com/anchore/syft/syft/pkg/cataloger/alpine"
     7  	"github.com/anchore/syft/syft/pkg/cataloger/arch"
     8  	"github.com/anchore/syft/syft/pkg/cataloger/binary"
     9  	"github.com/anchore/syft/syft/pkg/cataloger/cpp"
    10  	"github.com/anchore/syft/syft/pkg/cataloger/dart"
    11  	"github.com/anchore/syft/syft/pkg/cataloger/debian"
    12  	"github.com/anchore/syft/syft/pkg/cataloger/dotnet"
    13  	"github.com/anchore/syft/syft/pkg/cataloger/elixir"
    14  	"github.com/anchore/syft/syft/pkg/cataloger/erlang"
    15  	"github.com/anchore/syft/syft/pkg/cataloger/gentoo"
    16  	"github.com/anchore/syft/syft/pkg/cataloger/githubactions"
    17  	"github.com/anchore/syft/syft/pkg/cataloger/golang"
    18  	"github.com/anchore/syft/syft/pkg/cataloger/haskell"
    19  	"github.com/anchore/syft/syft/pkg/cataloger/java"
    20  	"github.com/anchore/syft/syft/pkg/cataloger/javascript"
    21  	"github.com/anchore/syft/syft/pkg/cataloger/kernel"
    22  	"github.com/anchore/syft/syft/pkg/cataloger/nix"
    23  	"github.com/anchore/syft/syft/pkg/cataloger/php"
    24  	"github.com/anchore/syft/syft/pkg/cataloger/python"
    25  	"github.com/anchore/syft/syft/pkg/cataloger/r"
    26  	"github.com/anchore/syft/syft/pkg/cataloger/redhat"
    27  	"github.com/anchore/syft/syft/pkg/cataloger/ruby"
    28  	"github.com/anchore/syft/syft/pkg/cataloger/rust"
    29  	sbomCataloger "github.com/anchore/syft/syft/pkg/cataloger/sbom"
    30  	"github.com/anchore/syft/syft/pkg/cataloger/swift"
    31  	"github.com/anchore/syft/syft/pkg/cataloger/wordpress"
    32  )
    33  
    34  //nolint:funlen
    35  func DefaultPackageTaskFactories() PackageTaskFactories {
    36  	return []packageTaskFactory{
    37  		// OS package installed catalogers ///////////////////////////////////////////////////////////////////////////
    38  		newSimplePackageTaskFactory(arch.NewDBCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "alpm", "archlinux"),
    39  		newSimplePackageTaskFactory(alpine.NewDBCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "apk", "alpine"),
    40  		newSimplePackageTaskFactory(debian.NewDBCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "dpkg", "debian"),
    41  		newSimplePackageTaskFactory(gentoo.NewPortageCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "portage", "gentoo"),
    42  		newSimplePackageTaskFactory(redhat.NewDBCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "rpm", "redhat"),
    43  
    44  		// OS package declared catalogers ///////////////////////////////////////////////////////////////////////////
    45  		newSimplePackageTaskFactory(redhat.NewArchiveCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.OSTag, "linux", "rpm", "redhat"),
    46  
    47  		// language-specific package installed catalogers ///////////////////////////////////////////////////////////////////////////
    48  		newSimplePackageTaskFactory(cpp.NewConanInfoCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "cpp", "conan"),
    49  		newSimplePackageTaskFactory(javascript.NewPackageCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "javascript", "node"),
    50  		newSimplePackageTaskFactory(php.NewComposerInstalledCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "php", "composer"),
    51  		newSimplePackageTaskFactory(r.NewPackageCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "r"),
    52  		newSimplePackageTaskFactory(ruby.NewInstalledGemSpecCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "ruby", "gem", "gemspec"),
    53  		newSimplePackageTaskFactory(rust.NewAuditBinaryCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "rust", "binary"),
    54  
    55  		// language-specific package declared catalogers ///////////////////////////////////////////////////////////////////////////
    56  		newSimplePackageTaskFactory(cpp.NewConanCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "cpp", "conan"),
    57  		newSimplePackageTaskFactory(dart.NewPubspecLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "dart"),
    58  		newSimplePackageTaskFactory(dotnet.NewDotnetDepsCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "dotnet", "c#"),
    59  		newSimplePackageTaskFactory(elixir.NewMixLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "elixir"),
    60  		newSimplePackageTaskFactory(erlang.NewRebarLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "erlang"),
    61  		newSimplePackageTaskFactory(erlang.NewOTPCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "erlang", "otp"),
    62  		newSimplePackageTaskFactory(haskell.NewHackageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "haskell", "hackage", "cabal"),
    63  		newPackageTaskFactory(
    64  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
    65  				return golang.NewGoModuleFileCataloger(cfg.PackagesConfig.Golang)
    66  			},
    67  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "go", "golang", "gomod",
    68  		),
    69  		newSimplePackageTaskFactory(java.NewGradleLockfileCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "java", "gradle"),
    70  		newPackageTaskFactory(
    71  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
    72  				return java.NewPomCataloger(cfg.PackagesConfig.JavaArchive)
    73  			},
    74  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "java", "maven",
    75  		),
    76  		newPackageTaskFactory(
    77  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
    78  				return javascript.NewLockCataloger(cfg.PackagesConfig.JavaScript)
    79  			},
    80  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "javascript", "node", "npm",
    81  		),
    82  		newSimplePackageTaskFactory(php.NewComposerLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "php", "composer"),
    83  		newSimplePackageTaskFactory(php.NewPeclCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, pkgcataloging.ImageTag, "php", "pecl"),
    84  		newPackageTaskFactory(
    85  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
    86  				return python.NewPackageCataloger(cfg.PackagesConfig.Python)
    87  			},
    88  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "python",
    89  		),
    90  		newSimplePackageTaskFactory(ruby.NewGemFileLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "ruby", "gem"),
    91  		newSimplePackageTaskFactory(ruby.NewGemSpecCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "ruby", "gem", "gemspec"),
    92  		newSimplePackageTaskFactory(rust.NewCargoLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "rust", "cargo"),
    93  		newSimplePackageTaskFactory(swift.NewCocoapodsCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "swift", "cocoapods"),
    94  		newSimplePackageTaskFactory(swift.NewSwiftPackageManagerCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "swift", "spm"),
    95  
    96  		// language-specific package for both image and directory scans (but not necessarily declared) ////////////////////////////////////////
    97  		newSimplePackageTaskFactory(dotnet.NewDotnetPortableExecutableCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "dotnet", "c#", "binary"),
    98  		newSimplePackageTaskFactory(python.NewInstalledPackageCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "python"),
    99  		newPackageTaskFactory(
   100  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   101  				return golang.NewGoModuleBinaryCataloger(cfg.PackagesConfig.Golang)
   102  			},
   103  			pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "go", "golang", "gomod", "binary",
   104  		),
   105  		newPackageTaskFactory(
   106  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   107  				return java.NewArchiveCataloger(cfg.PackagesConfig.JavaArchive)
   108  			},
   109  			pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "java", "maven",
   110  		),
   111  		newSimplePackageTaskFactory(java.NewNativeImageCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "java"),
   112  		newSimplePackageTaskFactory(nix.NewStoreCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "nix"),
   113  
   114  		// other package catalogers ///////////////////////////////////////////////////////////////////////////
   115  		newPackageTaskFactory(
   116  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   117  				return binary.NewClassifierCataloger(cfg.PackagesConfig.Binary)
   118  			},
   119  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "binary",
   120  		),
   121  		newSimplePackageTaskFactory(binary.NewELFPackageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "binary", "elf-package"),
   122  		newSimplePackageTaskFactory(githubactions.NewActionUsageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, "github", "github-actions"),
   123  		newSimplePackageTaskFactory(githubactions.NewWorkflowUsageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, "github", "github-actions"),
   124  		newPackageTaskFactory(
   125  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   126  				return kernel.NewLinuxKernelCataloger(cfg.PackagesConfig.LinuxKernel)
   127  			},
   128  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "linux", "kernel",
   129  		),
   130  		newSimplePackageTaskFactory(sbomCataloger.NewCataloger, "sbom"), // note: not evidence of installed packages
   131  		newSimplePackageTaskFactory(wordpress.NewWordpressPluginCataloger, pkgcataloging.DirectoryTag, pkgcataloging.ImageTag, "wordpress"),
   132  	}
   133  }