Skip to content

Commit 50964b2

Browse files
merge with main after conflicts
2 parents bc7a3b1 + ac076c5 commit 50964b2

File tree

9 files changed

+84
-46
lines changed

9 files changed

+84
-46
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/Checkmarx/containers-resolver v1.0.11
77
github.com/Checkmarx/gen-ai-prompts v0.0.0-20240807143411-708ceec12b63
88
github.com/Checkmarx/gen-ai-wrapper v1.0.2
9-
github.com/Checkmarx/manifest-parser v0.0.9
9+
github.com/Checkmarx/manifest-parser v0.1.0
1010
github.com/Checkmarx/secret-detection v0.0.3-0.20250327150305-31c2c3be9edf
1111
github.com/MakeNowJust/heredoc v1.0.0
1212
github.com/bouk/monkey v1.0.0
@@ -140,7 +140,7 @@ require (
140140
github.com/go-openapi/jsonreference v0.21.0 // indirect
141141
github.com/go-openapi/swag v0.23.1 // indirect
142142
github.com/go-restruct/restruct v1.2.0-alpha // indirect
143-
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
143+
github.com/go-viper/mapstructure/v2 v2.3.0 // indirect
144144
github.com/gobwas/glob v0.2.3 // indirect
145145
github.com/gogo/protobuf v1.3.2 // indirect
146146
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ github.com/Checkmarx/gen-ai-prompts v0.0.0-20240807143411-708ceec12b63 h1:SCuTcE
7575
github.com/Checkmarx/gen-ai-prompts v0.0.0-20240807143411-708ceec12b63/go.mod h1:MI6lfLerXU+5eTV/EPTDavgnV3owz3GPT4g/msZBWPo=
7676
github.com/Checkmarx/gen-ai-wrapper v1.0.2 h1:T6X40+4hYnwfDsvkjWs9VIcE6s1O+8DUu0+sDdCY3GI=
7777
github.com/Checkmarx/gen-ai-wrapper v1.0.2/go.mod h1:xwRLefezwNNnRGu1EjGS6wNiR9FVV/eP9D+oXwLViVM=
78-
github.com/Checkmarx/manifest-parser v0.0.9 h1:+H63riEKjhOuneTZ0eYzvwABHia04RZTuojtz2EJKz8=
79-
github.com/Checkmarx/manifest-parser v0.0.9/go.mod h1:hh5FX5FdDieU8CKQEkged4hfOaSylpJzub8PRFXa4kA=
78+
github.com/Checkmarx/manifest-parser v0.1.0 h1:swnzQpBFbJap7dgoj39oI6MaIqUlnVuBp5VJzeLVevQ=
79+
github.com/Checkmarx/manifest-parser v0.1.0/go.mod h1:hh5FX5FdDieU8CKQEkged4hfOaSylpJzub8PRFXa4kA=
8080
github.com/Checkmarx/secret-detection v0.0.3-0.20250327150305-31c2c3be9edf h1:lKiogedU3WzWBc/xI6Xj1BhX2Gp1QBJj8C+czY7CcaE=
8181
github.com/Checkmarx/secret-detection v0.0.3-0.20250327150305-31c2c3be9edf/go.mod h1:mtAHOm1mHGh7MVu6JdYUyitANsLcHNLUTBIh9pTERNI=
8282
github.com/CycloneDX/cyclonedx-go v0.9.2 h1:688QHn2X/5nRezKe2ueIVCt+NRqf7fl3AVQk+vaFcIo=
@@ -421,8 +421,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZ
421421
github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
422422
github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
423423
github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
424-
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
425-
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
424+
github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk=
425+
github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
426426
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
427427
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
428428
github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=

internal/commands/data/manifests/requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ Django>=3.0,<4.0
5959

6060
# Less than or equal
6161

62-
requests<=2.25.1
62+
requests<=2.32.4
6363

6464
# Compatible release (PEP 440)
6565

66-
urllib3\~=1.26.0
66+
urllib3\~=2.5.0
6767

6868
# Not equal
6969

internal/commands/result.go

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,13 +1785,7 @@ func exportJSONResults(targetFile string, results *wrappers.ScanResultsCollectio
17851785
func exportJSONReportResults(jsonWrapper wrappers.ResultsJSONWrapper, summary *wrappers.ResultSummary, summaryRpt string, featureFlagsWrapper wrappers.FeatureFlagsWrapper) error {
17861786
jsonReportsPayload := &wrappers.JSONReportsPayload{}
17871787
pollingResp := &wrappers.JSONPollingResponse{}
1788-
flagResponse, _ := wrappers.GetSpecificFeatureFlag(featureFlagsWrapper, wrappers.NewScanReportEnabled)
1789-
newScanReportEnabled := flagResponse.Status
1790-
if newScanReportEnabled {
1791-
jsonReportsPayload.ReportName = reportNameImprovedScanReport
1792-
} else {
1793-
jsonReportsPayload.ReportName = reportNameScanReport
1794-
}
1788+
jsonReportsPayload.ReportName = reportNameImprovedScanReport
17951789

17961790
jsonOptionsSections, jsonOptionsEngines := parseJSONOptions(summary.EnginesEnabled, jsonReportsPayload.ReportName)
17971791

@@ -1889,19 +1883,11 @@ func exportPdfResults(pdfWrapper wrappers.ResultsPdfWrapper, summary *wrappers.R
18891883
pdfOptions string, featureFlagsWrapper wrappers.FeatureFlagsWrapper) error {
18901884
pdfReportsPayload := &wrappers.PdfReportsPayload{}
18911885
pollingResp := &wrappers.PdfPollingResponse{}
1892-
flagResponse, _ := wrappers.GetSpecificFeatureFlag(featureFlagsWrapper, wrappers.NewScanReportEnabled)
1893-
newScanReportEnabled := flagResponse.Status
1894-
if newScanReportEnabled {
1895-
pdfReportsPayload.ReportName = reportNameImprovedScanReport
1896-
} else {
1897-
pdfReportsPayload.ReportName = reportNameScanReport
1898-
}
1899-
1886+
pdfReportsPayload.ReportName = reportNameImprovedScanReport
19001887
pdfOptionsSections, pdfOptionsEngines, err := parsePDFOptions(pdfOptions, summary.EnginesEnabled, pdfReportsPayload.ReportName)
19011888
if err != nil {
19021889
return err
19031890
}
1904-
19051891
pdfReportsPayload.ReportType = CliType
19061892
pdfReportsPayload.FileFormat = printer.FormatPDF
19071893
pdfReportsPayload.Data.ScanID = summary.ScanID

internal/commands/result_test.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,6 @@ func TestRunGetBFLByScanIdAndQueryIdWithFormatList(t *testing.T) {
635635

636636
func TestRunGetResultsGeneratingPdfReportWithInvalidEmail(t *testing.T) {
637637
clearFlags()
638-
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.NewScanReportEnabled, Status: false}
639638
err := execCmdNotNilAssertion(t,
640639
"results", "show",
641640
"--report-format", "pdf",
@@ -646,7 +645,6 @@ func TestRunGetResultsGeneratingPdfReportWithInvalidEmail(t *testing.T) {
646645

647646
func TestRunGetResultsGeneratingPdfReportWithInvalidOptions(t *testing.T) {
648647
clearFlags()
649-
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.NewScanReportEnabled, Status: false}
650648
err := execCmdNotNilAssertion(t,
651649
"results", "show",
652650
"--report-format", "pdf",
@@ -657,7 +655,6 @@ func TestRunGetResultsGeneratingPdfReportWithInvalidOptions(t *testing.T) {
657655

658656
func TestRunGetResultsGeneratingPdfReportWithInvalidImprovedOptions(t *testing.T) {
659657
clearFlags()
660-
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.NewScanReportEnabled, Status: false}
661658
err := execCmdNotNilAssertion(t,
662659
"results", "show",
663660
"--report-format", "pdf",
@@ -668,7 +665,6 @@ func TestRunGetResultsGeneratingPdfReportWithInvalidImprovedOptions(t *testing.T
668665

669666
func TestRunGetResultsGeneratingPdfReportWithEmailAndOptions(t *testing.T) {
670667
clearFlags()
671-
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.NewScanReportEnabled, Status: false}
672668
cmd := createASTTestCommand()
673669
err := executeTestCommand(cmd,
674670
"results", "show",
@@ -681,7 +677,6 @@ func TestRunGetResultsGeneratingPdfReportWithEmailAndOptions(t *testing.T) {
681677

682678
func TestRunGetResultsGeneratingPdfReportWithOptionsImprovedMappingHappens(t *testing.T) {
683679
clearFlags()
684-
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.NewScanReportEnabled, Status: true}
685680
cmd := createASTTestCommand()
686681
err := executeTestCommand(cmd,
687682
"results", "show",
@@ -694,7 +689,6 @@ func TestRunGetResultsGeneratingPdfReportWithOptionsImprovedMappingHappens(t *te
694689

695690
func TestRunGetResultsGeneratingPdfReportWithInvalidOptionsImproved(t *testing.T) {
696691
clearFlags()
697-
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.NewScanReportEnabled, Status: true}
698692
cmd := createASTTestCommand()
699693
err := executeTestCommand(cmd,
700694
"results", "show",
@@ -707,7 +701,6 @@ func TestRunGetResultsGeneratingPdfReportWithInvalidOptionsImproved(t *testing.T
707701

708702
func TestRunGetResultsGeneratingPdfReportWithOptions(t *testing.T) {
709703
clearFlags()
710-
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.NewScanReportEnabled, Status: false}
711704
cmd := createASTTestCommand()
712705
err := executeTestCommand(cmd,
713706
"results", "show",
@@ -726,7 +719,6 @@ func TestRunGetResultsGeneratingPdfReportWithOptions(t *testing.T) {
726719

727720
func TestRunGetResultsGeneratingJsonV2Report(t *testing.T) {
728721
clearFlags()
729-
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.NewScanReportEnabled, Status: false}
730722
cmd := createASTTestCommand()
731723
err := executeTestCommand(cmd,
732724
"results", "show",

internal/commands/scan.go

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"strconv"
2020
"strings"
2121
"time"
22+
"unicode"
2223

2324
"github.com/checkmarx/ast-cli/internal/commands/asca"
2425
"github.com/checkmarx/ast-cli/internal/commands/scarealtime"
@@ -1546,9 +1547,9 @@ func runScaResolver(sourceDir, scaResolver, scaResolverParams, projectName strin
15461547
scaResolverResultsFile,
15471548
}
15481549
if scaResolverParams != "" {
1549-
args = append(args, scaResolverParams)
1550+
parsedscaResolverParams := parseArgs(scaResolverParams)
1551+
args = append(args, parsedscaResolverParams...)
15501552
}
1551-
15521553
log.Println(fmt.Sprintf("Using SCA resolver: %s %v", scaResolver, args))
15531554
out, err := exec.Command(scaResolver, args...).Output()
15541555
logger.PrintIfVerbose(string(out))
@@ -1719,6 +1720,7 @@ func getScaResolverFlags(cmd *cobra.Command) (scaResolverParams, scaResolver str
17191720
scaResolver = ""
17201721
scaResolverParams = ""
17211722
}
1723+
logger.PrintfIfVerbose("Sca-Resolver params:: %v", scaResolverParams)
17221724
return scaResolverParams, scaResolver
17231725
}
17241726

@@ -2971,3 +2973,34 @@ func validateBooleanString(value string) error {
29712973
}
29722974
return nil
29732975
}
2976+
2977+
func parseArgs(input string) []string {
2978+
var args []string
2979+
var current strings.Builder
2980+
var quote rune
2981+
inQuotes := false
2982+
2983+
for i, r := range input {
2984+
switch {
2985+
case (r == '\'' || r == '"') && !inQuotes:
2986+
inQuotes = true
2987+
quote = r
2988+
case r == quote && inQuotes:
2989+
inQuotes = false
2990+
case unicode.IsSpace(r) && !inQuotes:
2991+
if current.Len() > 0 {
2992+
args = append(args, current.String())
2993+
current.Reset()
2994+
}
2995+
default:
2996+
current.WriteRune(r)
2997+
}
2998+
2999+
// Append last token if input ends
3000+
if i == len(input)-1 && current.Len() > 0 {
3001+
args = append(args, current.String())
3002+
}
3003+
}
3004+
3005+
return args
3006+
}

internal/commands/scan_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2326,3 +2326,40 @@ func TestValidateScanTypes(t *testing.T) {
23262326
})
23272327
}
23282328
}
2329+
2330+
func TestCreateScanWith_ScaResolver_Source_as_Zip(t *testing.T) {
2331+
clearFlags()
2332+
baseArgs := []string{
2333+
"scan",
2334+
"create",
2335+
"--project-name",
2336+
"MOCK",
2337+
"-s",
2338+
"data/sources.zip",
2339+
"-b",
2340+
"dummy_branch",
2341+
"--sca-resolver",
2342+
"ScaResolver.exe",
2343+
}
2344+
err := execCmdNotNilAssertion(t, baseArgs...)
2345+
assert.Assert(t, strings.Contains(err.Error(), ScaResolverZipNotSupportedErr), err.Error())
2346+
}
2347+
2348+
func Test_parseArgs(t *testing.T) {
2349+
tests := []struct {
2350+
inputString string
2351+
lenOfArgs int
2352+
}{
2353+
{"--log-level Debug --break-on-manifest-failure", 3},
2354+
{`test test1`, 2},
2355+
{"--gradle-parameters='-Prepository.proxy.url=123 -Prepository.proxy.username=123 -Prepository.proxy.password=123' --log-level Debug", 3},
2356+
}
2357+
2358+
for _, test := range tests {
2359+
fmt.Println("test ::", test)
2360+
result := parseArgs(test.inputString)
2361+
if len(result) != test.lenOfArgs {
2362+
t.Errorf(" test case failed for params %v", test)
2363+
}
2364+
}
2365+
}

internal/wrappers/feature-flags.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ const CVSSV3Enabled = "CVSS_V3_ENABLED"
1313
const MinioEnabled = "MINIO_ENABLED"
1414
const SastCustomStateEnabled = "SAST_CUSTOM_STATES_ENABLED"
1515
const SCSEngineCLIEnabled = "NEW_2MS_SCORECARD_RESULTS_CLI_ENABLED"
16-
const NewScanReportEnabled = "NEW_SAST_SCAN_REPORT_ENABLED"
1716
const RiskManagementEnabled = "RISK_MANAGEMENT_IDES_PROJECT_RESULTS_SCORES_API_ENABLED"
1817
const OssRealtimeEnabled = "OSS_REALTIME_ENABLED"
1918
const maxRetries = 3
@@ -55,15 +54,6 @@ var FeatureFlagsBaseMap = []CommandFlags{
5554
},
5655
},
5756
},
58-
{
59-
CommandName: "cx results show",
60-
FeatureFlags: []FlagBase{
61-
{
62-
Name: NewScanReportEnabled,
63-
Default: false,
64-
},
65-
},
66-
},
6757
{
6858
CommandName: "cx triage update",
6959
FeatureFlags: []FlagBase{

test/integration/data/manifests/requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ Django>=3.0,<4.0
5959

6060
# Less than or equal
6161

62-
requests<=2.25.1
62+
requests<=2.32.4
6363

6464
# Compatible release (PEP 440)
6565

66-
urllib3\~=1.26.0
66+
urllib3\~=2.5.0
6767

6868
# Not equal
6969

0 commit comments

Comments
 (0)