Skip to content

Commit b466c53

Browse files
Merge branch 'main' into pre-commit-hook
2 parents bb1bc23 + de3f5af commit b466c53

File tree

12 files changed

+186
-8
lines changed

12 files changed

+186
-8
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/MakeNowJust/heredoc v1.0.0
1111
github.com/bouk/monkey v1.0.0
1212
github.com/gofrs/flock v0.12.1
13-
github.com/golang-jwt/jwt/v5 v5.2.1
13+
github.com/golang-jwt/jwt/v5 v5.2.2
1414
github.com/gomarkdown/markdown v0.0.0-20241102151059-6bc1ffdc6e8c
1515
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
1616
github.com/google/uuid v1.6.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -418,8 +418,8 @@ github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeH
418418
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
419419
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
420420
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
421-
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
422-
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
421+
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
422+
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
423423
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
424424
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
425425
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=

internal/commands/.scripts/up.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ wget https://sca-downloads.s3.amazonaws.com/cli/latest/ScaResolver-linux64.tar.g
44
tar -xzvf ScaResolver-linux64.tar.gz -C /tmp
55
rm -rf ScaResolver-linux64.tar.gz
66
# ignore mock and wrappers packages, as they checked by integration tests
7-
go test $(go list ./... | grep -v "mock" | grep -v "wrappers" | grep -v "bitbucketserver" | grep -v "logger") -timeout 20m -coverprofile cover.out
7+
go test $(go list ./... | grep -v "mock" | grep -v "wrappers" | grep -v "bitbucketserver" | grep -v "logger") -timeout 25m -coverprofile cover.out

internal/commands/root_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ func assertError(t *testing.T, err error, expectedMessage string) {
206206
func clearFlags() {
207207
mock.Flags = wrappers.FeatureFlagsResponseModel{}
208208
mock.Flag = wrappers.FeatureFlagResponseModel{}
209+
mock.FFErr = nil
209210
wrappers.ClearCache()
210211
}
211212

internal/commands/scan.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ const (
8888
configIncremental = "incremental"
8989
configFastScan = "fastScanMode"
9090
configPresetName = "presetName"
91+
configPresetID = "presetId"
9192
configEngineVerbose = "engineVerbose"
9293
configLanguageMode = "languageMode"
9394
ConfigContainersFilesFilterKey = "filesFilter"
@@ -553,7 +554,10 @@ func scanCreateSubCommand(
553554
false,
554555
"Incremental SAST scan should be performed.",
555556
)
557+
556558
createScanCmd.PersistentFlags().String(commonParams.PresetName, "", "The name of the Checkmarx preset to use.")
559+
createScanCmd.PersistentFlags().String(commonParams.IacsPresetIDFlag, "", commonParams.IacsPresetIDUsage)
560+
557561
createScanCmd.PersistentFlags().String(
558562
commonParams.ScaResolverFlag,
559563
"",
@@ -898,6 +902,7 @@ func addKicsScan(cmd *cobra.Command, resubmitConfig []wrappers.Config) map[strin
898902
kicsMapConfig[resultsMapType] = commonParams.KicsType
899903
kicsConfig.Filter = deprecatedFlagValue(cmd, commonParams.KicsFilterFlag, commonParams.IacsFilterFlag)
900904
kicsConfig.Platforms = deprecatedFlagValue(cmd, commonParams.KicsPlatformsFlag, commonParams.IacsPlatformsFlag)
905+
kicsConfig.PresetID, _ = cmd.Flags().GetString(commonParams.IacsPresetIDFlag)
901906
for _, config := range resubmitConfig {
902907
if config.Type == commonParams.KicsType {
903908
resubmitFilter := config.Value[configFilterKey]
@@ -908,6 +913,10 @@ func addKicsScan(cmd *cobra.Command, resubmitConfig []wrappers.Config) map[strin
908913
if resubmitPlatforms != nil && kicsConfig.Platforms == "" {
909914
kicsConfig.Platforms = resubmitPlatforms.(string)
910915
}
916+
resubmitPresetID := config.Value[configPresetID]
917+
if resubmitPresetID != nil && kicsConfig.PresetID == "" {
918+
kicsConfig.PresetID = resubmitPresetID.(string)
919+
}
911920
}
912921
}
913922
kicsMapConfig[resultsMapValue] = &kicsConfig
@@ -1123,7 +1132,7 @@ func validateScanTypes(cmd *cobra.Command, jwtWrapper wrappers.JWTWrapper, featu
11231132
var scanTypes []string
11241133
var SCSScanTypes []string
11251134

1126-
containerEngineCLIEnabled, _ := featureFlagsWrapper.GetSpecificFlag(wrappers.ContainerEngineCLIEnabled)
1135+
runContainerEngineCLI := isContainersEngineEnabled(featureFlagsWrapper)
11271136
allowedEngines, err := jwtWrapper.GetAllowedEngines(featureFlagsWrapper)
11281137
if err != nil {
11291138
err = errors.Errorf("Error validating scan types: %v", err)
@@ -1140,7 +1149,7 @@ func validateScanTypes(cmd *cobra.Command, jwtWrapper wrappers.JWTWrapper, featu
11401149

11411150
scanTypes = strings.Split(userScanTypes, ",")
11421151
for _, scanType := range scanTypes {
1143-
if !allowedEngines[scanType] || (scanType == commonParams.ContainersType && !(containerEngineCLIEnabled.Status)) {
1152+
if !allowedEngines[scanType] || (scanType == commonParams.ContainersType && !(runContainerEngineCLI)) {
11441153
keys := reflect.ValueOf(allowedEngines).MapKeys()
11451154
err = errors.Errorf(engineNotAllowed, scanType, scanType, keys)
11461155
return err
@@ -1156,7 +1165,7 @@ func validateScanTypes(cmd *cobra.Command, jwtWrapper wrappers.JWTWrapper, featu
11561165

11571166
} else {
11581167
for k := range allowedEngines {
1159-
if k == commonParams.ContainersType && !(containerEngineCLIEnabled.Status) {
1168+
if k == commonParams.ContainersType && !(runContainerEngineCLI) {
11601169
continue
11611170
}
11621171
scanTypes = append(scanTypes, k)
@@ -1169,6 +1178,16 @@ func validateScanTypes(cmd *cobra.Command, jwtWrapper wrappers.JWTWrapper, featu
11691178
return nil
11701179
}
11711180

1181+
func isContainersEngineEnabled(featureFlagsWrapper wrappers.FeatureFlagsWrapper) bool {
1182+
containerEngineCLIEnabled, err := featureFlagsWrapper.GetSpecificFlag(wrappers.ContainerEngineCLIEnabled)
1183+
if err != nil {
1184+
logger.PrintfIfVerbose("Failed to fetch CONTAINER_ENGINE_CLI_ENABLED FF, defaulting to `false`. Error: %s", err)
1185+
return false
1186+
}
1187+
1188+
return containerEngineCLIEnabled.Status
1189+
}
1190+
11721191
func scanTypeEnabled(scanType string) bool {
11731192
scanTypes := strings.Split(actualScanTypes, ",")
11741193
for _, a := range scanTypes {
@@ -2791,6 +2810,12 @@ func validateCreateScanFlags(cmd *cobra.Command) error {
27912810
return errors.Errorf("Invalid value for --project-private-package flag. The value must be true or false.")
27922811
}
27932812

2813+
if kicsPresetID, _ := cmd.Flags().GetString(commonParams.IacsPresetIDFlag); kicsPresetID != "" {
2814+
if _, err := uuid.Parse(kicsPresetID); err != nil {
2815+
return fmt.Errorf("Invalid value for --%s flag. Must be a valid UUID.", commonParams.IacsPresetIDFlag)
2816+
}
2817+
}
2818+
27942819
return nil
27952820
}
27962821

internal/commands/scan_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ const (
5858
additionalParamsError = "flag needs an argument: --additional-params"
5959
scanCommand = "scan"
6060
kicsRealtimeCommand = "kics-realtime"
61+
kicsPresetIDIncorrectValueError = "Invalid value for --iac-security-preset-id flag. Must be a valid UUID."
6162
InvalidEngineMessage = "Please verify if engine is installed"
6263
SCSScoreCardError = "SCS scan failed to start: Scorecard scan is missing required flags, please include in the ast-cli arguments: " +
6364
"--scs-repo-url your_repo_url --scs-repo-token your_repo_token"
@@ -514,6 +515,18 @@ func TestScanWorkFlowWithKicsPlatformsDeprecated(t *testing.T) {
514515
assert.NilError(t, err)
515516
}
516517

518+
func TestScanWorkFlowWithKicsPresetID(t *testing.T) {
519+
baseArgs := []string{"scan", "create", "--project-name", "kicsPresetIDMock", "-b", "dummy_branch", "-s", dummyRepo, "--iac-security-preset-id", "4801dea3-b365-4934-a810-ebf481f646c3"}
520+
err := executeTestCommand(createASTTestCommand(), baseArgs...)
521+
assert.NilError(t, err)
522+
}
523+
524+
func TestScanWorkFlowWithInvalidKicsPresetID(t *testing.T) {
525+
baseArgs := []string{"scan", "create", "--project-name", "kicsPresetIDMock", "-b", "dummy_branch", "-s", dummyRepo, "--iac-security-preset-id", "invalid uuid"}
526+
err := executeTestCommand(createASTTestCommand(), baseArgs...)
527+
assert.Error(t, err, kicsPresetIDIncorrectValueError, err.Error())
528+
}
529+
517530
func TestScanWorkFlowWithScaFilter(t *testing.T) {
518531
baseArgs := []string{"scan", "create", "--project-name", "scaFilterMock", "-b", "dummy_branch", "-s", dummyRepo, "--sca-filter", "!jQuery"}
519532
cmd := createASTTestCommand()
@@ -1945,3 +1958,22 @@ func TestValidateScanTypes(t *testing.T) {
19451958
})
19461959
}
19471960
}
1961+
1962+
func TestIsContainersEngineEnabled_FlagEnabled(t *testing.T) {
1963+
clearFlags()
1964+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.ContainerEngineCLIEnabled, Status: true}
1965+
mock.FFErr = nil
1966+
1967+
result := isContainersEngineEnabled(mock.FeatureFlagsMockWrapper{})
1968+
assert.Assert(t, result, "expected result to be true")
1969+
}
1970+
1971+
func TestIsContainersEngineEnabled_FlagRetrievalFails(t *testing.T) {
1972+
clearFlags()
1973+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.ContainerEngineCLIEnabled, Status: false}
1974+
mock.FFErr = errors.New("something went wrong while fetching ff")
1975+
1976+
result := isContainersEngineEnabled(mock.FeatureFlagsMockWrapper{})
1977+
1978+
assert.Assert(t, !result, "expected result to be false")
1979+
}

internal/params/flags.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ const (
140140
KicsPlatformsFlagUsage = "KICS Platform Flag. Use ',' as the delimiter for arrays."
141141
IacsPlatformsFlag = "iac-security-platforms"
142142
IacsPlatformsFlagUsage = "IaC Security Platform Flag"
143+
IacsPresetIDFlag = "iac-security-preset-id"
144+
IacsPresetIDUsage = "The ID of the IaC Security Preset to use (must be a valid UUID)."
143145
ApikeyOverrideFlag = "apikey-override"
144146
ExploitablePathFlag = "sca-exploitable-path"
145147
LastSastScanTime = "sca-last-sast-scan-time"

internal/services/export.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const (
1717
delayValueForReport = 3
1818
pendingStatus = "Pending"
1919
completedStatus = "Completed"
20-
pollingTimeout = 5 // minutes
20+
pollingTimeout = 15 // minutes
2121
)
2222

2323
func GetExportPackage(exportWrapper wrappers.ExportWrapper, scanID string, scaHideDevAndTestDep bool) (*wrappers.ScaPackageCollectionExport, error) {
@@ -112,6 +112,9 @@ func pollForCompletion(exportWrapper wrappers.ExportWrapper, exportID string) (*
112112
logger.PrintIfVerbose("Polling for export report generation completion")
113113

114114
for pollingResp.ExportStatus == exportingStatus || pollingResp.ExportStatus == pendingStatus {
115+
116+
logger.Printf("SCA Export Status is: %s", pollingResp.ExportStatus)
117+
115118
select {
116119
case <-timeout:
117120
return nil, errors.Errorf("export generating failed - Timed out after 5 minutes")

internal/wrappers/mock/feature-flags-mock.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
var Flags wrappers.FeatureFlagsResponseModel
1010
var Flag wrappers.FeatureFlagResponseModel
11+
var FFErr error
1112

1213
type FeatureFlagsMockWrapper struct {
1314
}
@@ -22,5 +23,8 @@ func (f FeatureFlagsMockWrapper) GetAll() (*wrappers.FeatureFlagsResponseModel,
2223

2324
func (f FeatureFlagsMockWrapper) GetSpecificFlag(specificFlag string) (*wrappers.FeatureFlagResponseModel, error) {
2425
fmt.Println("Called GetSpecificFlag in FeatureFlagsMockWrapper with flag:", specificFlag)
26+
if FFErr != nil {
27+
return nil, FFErr
28+
}
2529
return &Flag, nil
2630
}

internal/wrappers/scans.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ type SastConfig struct {
132132
type KicsConfig struct {
133133
Filter string `json:"filter,omitempty"`
134134
Platforms string `json:"platforms,omitempty"`
135+
PresetID string `json:"presetId,omitempty"`
135136
}
136137

137138
type ScaConfig struct {

0 commit comments

Comments
 (0)