From e820e14e5ad54dcb9e99727791149aa1d264bf8a Mon Sep 17 00:00:00 2001 From: Assaf Attias <49212512+attiasas@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:22:25 +0300 Subject: [PATCH] Convert file exclusion for directory exclusion for JAS scanners (#95) --- cli/docs/flags.go | 2 +- commands/audit/sca/common.go | 5 +++-- jas/common.go | 15 ++++++++++++--- jas/common_test.go | 21 +++++++++++++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/cli/docs/flags.go b/cli/docs/flags.go index 32f3c12e..fb697ee8 100644 --- a/cli/docs/flags.go +++ b/cli/docs/flags.go @@ -208,7 +208,7 @@ var flagsMap = map[string]components.Flag{ ExclusionsAudit: components.NewStringFlag( Exclusions, "List of exclusions separated by semicolons, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.", - components.WithStrDefaultValue(strings.Join(sca.DefaultExcludePatterns, ";")), + components.WithStrDefaultValue(strings.Join(sca.DefaultScaExcludePatterns, ";")), ), Mvn: components.NewBoolFlag(Mvn, "Set to true to request audit for a Maven project."), Gradle: components.NewBoolFlag(Gradle, "Set to true to request audit for a Gradle project."), diff --git a/commands/audit/sca/common.go b/commands/audit/sca/common.go index a07a09bf..218d3108 100644 --- a/commands/audit/sca/common.go +++ b/commands/audit/sca/common.go @@ -19,7 +19,8 @@ import ( xrayUtils "github.com/jfrog/jfrog-client-go/xray/services/utils" ) -var DefaultExcludePatterns = []string{"*.git*", "*node_modules*", "*target*", "*venv*", "*test*"} +// Exclude pattern for directories. +var DefaultScaExcludePatterns = []string{"*.git*", "*node_modules*", "*target*", "*venv*", "*test*"} var CurationErrorMsgToUserTemplate = "Failed to retrieve the dependencies tree for the %s project. Please contact your " + "Artifactory administrator to verify pass-through for Curation audit is enabled for your project" @@ -27,7 +28,7 @@ var CurationErrorMsgToUserTemplate = "Failed to retrieve the dependencies tree f func GetExcludePattern(params utils.AuditParams) string { exclusions := params.Exclusions() if len(exclusions) == 0 { - exclusions = append(exclusions, DefaultExcludePatterns...) + exclusions = append(exclusions, DefaultScaExcludePatterns...) } return fspatterns.PrepareExcludePathPattern(exclusions, clientutils.WildCardPattern, params.IsRecursiveScan()) } diff --git a/jas/common.go b/jas/common.go index 6127b638..bd2b8720 100644 --- a/jas/common.go +++ b/jas/common.go @@ -35,7 +35,8 @@ const ( ) var ( - DefaultExcludePatterns = []string{"**/.git/**", "**/*test*/**", "**/*venv*/**", NodeModulesPattern, "**/target/**"} + // Exclude pattern for files. + DefaultJasExcludePatterns = []string{"**/.git/**", "**/*test*/**", "**/*venv*/**", NodeModulesPattern, "**/target/**"} mapSeverityToScore = map[string]string{ "": "0.0", @@ -258,18 +259,26 @@ func GetSourceRoots(module jfrogappsconfig.Module, scanner *jfrogappsconfig.Scan func GetExcludePatterns(module jfrogappsconfig.Module, scanner *jfrogappsconfig.Scanner, exclusions ...string) []string { if len(exclusions) > 0 { - return exclusions + return convertToFilesExcludePatterns(exclusions) } excludePatterns := module.ExcludePatterns if scanner != nil { excludePatterns = append(excludePatterns, scanner.ExcludePatterns...) } if len(excludePatterns) == 0 { - return DefaultExcludePatterns + return DefaultJasExcludePatterns } return excludePatterns } +func convertToFilesExcludePatterns(excludePatterns []string) []string { + patterns := []string{} + for _, excludePattern := range excludePatterns { + patterns = append(patterns, "**/"+excludePattern+"/**") + } + return patterns +} + func SetAnalyticsMetricsDataForAnalyzerManager(msi string, technologies []techutils.Technology) func() { errMsg := "failed %s %s environment variable. Cause: %s" resetAnalyzerManageJfMsiVar, err := clientutils.SetEnvWithResetCallback(utils.JfMsiEnvVariable, msi) diff --git a/jas/common_test.go b/jas/common_test.go index aa127655..414e0844 100644 --- a/jas/common_test.go +++ b/jas/common_test.go @@ -91,6 +91,27 @@ func TestAddScoreToRunRules(t *testing.T) { } } +func TestConvertToFilesExcludePatterns(t *testing.T) { + tests := []struct { + name string + excludePatterns []string + expectedOutput []string + }{ + { + excludePatterns: []string{}, + expectedOutput: []string{}, + }, + { + excludePatterns: []string{"*.git*", "*node_modules*", "*target*", "*venv*", "*test*"}, + expectedOutput: []string{"**/*.git*/**", "**/*node_modules*/**", "**/*target*/**", "**/*venv*/**", "**/*test*/**"}, + }, + } + + for _, test := range tests { + assert.Equal(t, test.expectedOutput, convertToFilesExcludePatterns(test.excludePatterns)) + } +} + func TestSetAnalyticsMetricsDataForAnalyzerManager(t *testing.T) { type args struct { msi string