github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/java/config.go (about)

     1  package java
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/anchore/syft/syft/cataloging"
     7  	"github.com/anchore/syft/syft/pkg/cataloger/java/internal/maven"
     8  )
     9  
    10  type ArchiveCatalogerConfig struct {
    11  	cataloging.ArchiveSearchConfig `yaml:",inline" json:"" mapstructure:",squash"`
    12  
    13  	// 	UseNetwork enables network operations for java package metadata enrichment, such as fetching parent POMs and license information.
    14  	// app-config: java.use-network
    15  	UseNetwork bool `yaml:"use-network" json:"use-network" mapstructure:"use-network"`
    16  
    17  	// UseMavenLocalRepository enables searching the local maven repository (~/.m2/repository by default) for parent POMs and other metadata.
    18  	// app-config: java.use-maven-local-repository
    19  	UseMavenLocalRepository bool `yaml:"use-maven-localrepository" json:"use-maven-localrepository" mapstructure:"use-maven-localrepository"`
    20  
    21  	// MavenLocalRepositoryDir specifies the location of the local maven repository. When not set, defaults to ~/.m2/repository.
    22  	// app-config: java.maven-local-repository-dir
    23  	MavenLocalRepositoryDir string `yaml:"maven-localrepository-dir" json:"maven-localrepository-dir" mapstructure:"maven-localrepository-dir"`
    24  
    25  	// MavenBaseURL specifies the base URL(s) to use for fetching POMs and metadata from maven central or other repositories. When not set, defaults to https://repo1.maven.org/maven2.
    26  	// app-config: java.maven-url
    27  	MavenBaseURL string `yaml:"maven-base-url" json:"maven-base-url" mapstructure:"maven-base-url"`
    28  
    29  	// MaxParentRecursiveDepth limits how many parent POMs will be fetched recursively before stopping. This prevents infinite loops or excessively deep parent chains.
    30  	// app-config: java.max-parent-recursive-depth
    31  	MaxParentRecursiveDepth int `yaml:"max-parent-recursive-depth" json:"max-parent-recursive-depth" mapstructure:"max-parent-recursive-depth"`
    32  
    33  	// ResolveTransitiveDependencies enables resolving transitive dependencies for java packages found within archives.
    34  	// app-config: java.resolve-transitive-dependencies
    35  	ResolveTransitiveDependencies bool `yaml:"resolve-transitive-dependencies" json:"resolve-transitive-dependencies" mapstructure:"resolve-transitive-dependencies"`
    36  }
    37  
    38  func DefaultArchiveCatalogerConfig() ArchiveCatalogerConfig {
    39  	mavenCfg := maven.DefaultConfig()
    40  	return ArchiveCatalogerConfig{
    41  		ArchiveSearchConfig:           cataloging.DefaultArchiveSearchConfig(),
    42  		UseNetwork:                    mavenCfg.UseNetwork,
    43  		UseMavenLocalRepository:       mavenCfg.UseLocalRepository,
    44  		MavenLocalRepositoryDir:       mavenCfg.LocalRepositoryDir,
    45  		MavenBaseURL:                  strings.Join(mavenCfg.Repositories, ","),
    46  		MaxParentRecursiveDepth:       mavenCfg.MaxParentRecursiveDepth,
    47  		ResolveTransitiveDependencies: false,
    48  	}
    49  }
    50  
    51  func (j ArchiveCatalogerConfig) WithUseNetwork(input bool) ArchiveCatalogerConfig {
    52  	j.UseNetwork = input
    53  	return j
    54  }
    55  
    56  func (j ArchiveCatalogerConfig) WithUseMavenLocalRepository(input bool) ArchiveCatalogerConfig {
    57  	j.UseMavenLocalRepository = input
    58  	return j
    59  }
    60  
    61  func (j ArchiveCatalogerConfig) WithMavenLocalRepositoryDir(input string) ArchiveCatalogerConfig {
    62  	j.MavenLocalRepositoryDir = input
    63  	return j
    64  }
    65  
    66  func (j ArchiveCatalogerConfig) WithMavenBaseURL(input string) ArchiveCatalogerConfig {
    67  	if input != "" {
    68  		j.MavenBaseURL = input
    69  	}
    70  	return j
    71  }
    72  
    73  func (j ArchiveCatalogerConfig) WithResolveTransitiveDependencies(resolveTransitiveDependencies bool) ArchiveCatalogerConfig {
    74  	j.ResolveTransitiveDependencies = resolveTransitiveDependencies
    75  	return j
    76  }
    77  
    78  func (j ArchiveCatalogerConfig) WithArchiveTraversal(search cataloging.ArchiveSearchConfig, maxDepth int) ArchiveCatalogerConfig {
    79  	j.MaxParentRecursiveDepth = maxDepth
    80  	j.ArchiveSearchConfig = search
    81  	return j
    82  }
    83  
    84  func (j ArchiveCatalogerConfig) mavenConfig() maven.Config {
    85  	return maven.Config{
    86  		UseNetwork:              j.UseNetwork,
    87  		UseLocalRepository:      j.UseMavenLocalRepository,
    88  		LocalRepositoryDir:      j.MavenLocalRepositoryDir,
    89  		Repositories:            strings.Split(j.MavenBaseURL, ","),
    90  		MaxParentRecursiveDepth: j.MaxParentRecursiveDepth,
    91  	}
    92  }