From a246d9eec6fe512c7c04a25055b210269587798e Mon Sep 17 00:00:00 2001 From: cx-Margarita-LevitM Date: Wed, 29 Oct 2025 21:21:06 +0200 Subject: [PATCH 1/5] Fix bug number AST-115497 --- internal/services/realtimeengine/common.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/services/realtimeengine/common.go b/internal/services/realtimeengine/common.go index ed25aa752..ee7babdc0 100644 --- a/internal/services/realtimeengine/common.go +++ b/internal/services/realtimeengine/common.go @@ -3,7 +3,6 @@ package realtimeengine import ( "os" - errorconstants "github.com/checkmarx/ast-cli/internal/constants/errors" "github.com/checkmarx/ast-cli/internal/params" "github.com/checkmarx/ast-cli/internal/wrappers" "github.com/pkg/errors" @@ -37,7 +36,7 @@ func EnsureLicense(jwtWrapper wrappers.JWTWrapper) error { if aiAllowed || assistAllowed { return nil } - return errors.Wrap(err, errorconstants.NoASCALicense) + return errors.New("User has a valid license for AI Protection or Checkmarx One Assist") } // ValidateFilePath validates that the file path exists and is accessible. From f8557e26b6fabdd116f6daba5ea1f42b57a65df5 Mon Sep 17 00:00:00 2001 From: cx-Margarita-LevitM Date: Thu, 30 Oct 2025 09:37:31 +0200 Subject: [PATCH 2/5] Fix bug number AST-115497 --- internal/constants/errors/errors.go | 2 +- internal/services/realtimeengine/common.go | 3 ++- internal/services/realtimeengine/ossrealtime/oss-realtime.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/constants/errors/errors.go b/internal/constants/errors/errors.go index 62c207a7a..e9cc42627 100644 --- a/internal/constants/errors/errors.go +++ b/internal/constants/errors/errors.go @@ -27,8 +27,8 @@ const ( NoPermissionToUpdateApplication = "you do not have permission to update the application" FailedToUpdateApplication = "failed to update application" ApplicationNotFound = "Application not found" + ErrMissingAIFeatureLicense = "User does not have the required license for AI-assisted functionality." - // asca Engine FileExtensionIsRequired = "file must have an extension" // Realtime diff --git a/internal/services/realtimeengine/common.go b/internal/services/realtimeengine/common.go index ee7babdc0..2b786746a 100644 --- a/internal/services/realtimeengine/common.go +++ b/internal/services/realtimeengine/common.go @@ -3,6 +3,7 @@ package realtimeengine import ( "os" + errorconstants "github.com/checkmarx/ast-cli/internal/constants/errors" "github.com/checkmarx/ast-cli/internal/params" "github.com/checkmarx/ast-cli/internal/wrappers" "github.com/pkg/errors" @@ -36,7 +37,7 @@ func EnsureLicense(jwtWrapper wrappers.JWTWrapper) error { if aiAllowed || assistAllowed { return nil } - return errors.New("User has a valid license for AI Protection or Checkmarx One Assist") + return errors.New(errorconstants.ErrMissingAIFeatureLicense) } // ValidateFilePath validates that the file path exists and is accessible. diff --git a/internal/services/realtimeengine/ossrealtime/oss-realtime.go b/internal/services/realtimeengine/ossrealtime/oss-realtime.go index 966933590..b2c5e0cfb 100644 --- a/internal/services/realtimeengine/ossrealtime/oss-realtime.go +++ b/internal/services/realtimeengine/ossrealtime/oss-realtime.go @@ -61,7 +61,7 @@ func (o *OssRealtimeService) RunOssRealtimeScan(filePath, ignoredFilePath string } if err := realtimeengine.EnsureLicense(o.JwtWrapper); err != nil { - return nil, errorconstants.NewRealtimeEngineError("failed to ensure license").Error() + return nil, errorconstants.NewRealtimeEngineError(err.Error()).Error() } if err := realtimeengine.ValidateFilePath(filePath); err != nil { From 46f881d3721a2762f8961b56e6fa827a881adfaf Mon Sep 17 00:00:00 2001 From: cx-Margarita-LevitM Date: Sun, 2 Nov 2025 08:36:31 +0200 Subject: [PATCH 3/5] Fix after review --- internal/commands/secrets-realtime.go | 2 +- .../realtimeengine/containersrealtime/containers-realtime.go | 2 +- .../services/realtimeengine/secretsrealtime/secrets-realtime.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/commands/secrets-realtime.go b/internal/commands/secrets-realtime.go index f780acb86..d309197f5 100644 --- a/internal/commands/secrets-realtime.go +++ b/internal/commands/secrets-realtime.go @@ -30,7 +30,7 @@ func RunScanSecretsRealtimeCommand( err = printer.Print(cmd.OutOrStdout(), results, printer.FormatJSON) if err != nil { - return errorconstants.NewRealtimeEngineError("failed to return secrets").Error() + return errorconstants.NewRealtimeEngineError(err.Error()).Error() } return nil diff --git a/internal/services/realtimeengine/containersrealtime/containers-realtime.go b/internal/services/realtimeengine/containersrealtime/containers-realtime.go index 6705788aa..a035e80a1 100644 --- a/internal/services/realtimeengine/containersrealtime/containers-realtime.go +++ b/internal/services/realtimeengine/containersrealtime/containers-realtime.go @@ -81,7 +81,7 @@ func (c *ContainersRealtimeService) RunContainersRealtimeScan(filePath, ignoredF return nil, errorconstants.NewRealtimeEngineError(errorconstants.RealtimeEngineNotAvailable).Error() } if err := realtimeengine.EnsureLicense(c.JwtWrapper); err != nil { - return nil, errorconstants.NewRealtimeEngineError("failed to ensure license").Error() + return nil, errorconstants.NewRealtimeEngineError(err.Error()).Error() } if err := realtimeengine.ValidateFilePath(filePath); err != nil { return nil, errorconstants.NewRealtimeEngineError("invalid file path").Error() diff --git a/internal/services/realtimeengine/secretsrealtime/secrets-realtime.go b/internal/services/realtimeengine/secretsrealtime/secrets-realtime.go index 6fd2e50d9..05527804a 100644 --- a/internal/services/realtimeengine/secretsrealtime/secrets-realtime.go +++ b/internal/services/realtimeengine/secretsrealtime/secrets-realtime.go @@ -86,7 +86,7 @@ func (s *SecretsRealtimeService) RunSecretsRealtimeScan(filePath, ignoredFilePat } if err := realtimeengine.EnsureLicense(s.JwtWrapper); err != nil { - return nil, errorconstants.NewRealtimeEngineError("failed to ensure license").Error() + return nil, errorconstants.NewRealtimeEngineError(err.Error()).Error() } if err := realtimeengine.ValidateFilePath(filePath); err != nil { From 17de57f50174c3be79f51a7395a7774e2047a488 Mon Sep 17 00:00:00 2001 From: cx-Margarita-LevitM Date: Sun, 2 Nov 2025 13:18:24 +0200 Subject: [PATCH 4/5] Update error message in the test --- .../containersrealtime/containers-realtime_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/services/realtimeengine/containersrealtime/containers-realtime_test.go b/internal/services/realtimeengine/containersrealtime/containers-realtime_test.go index 327153f26..383da63cd 100644 --- a/internal/services/realtimeengine/containersrealtime/containers-realtime_test.go +++ b/internal/services/realtimeengine/containersrealtime/containers-realtime_test.go @@ -63,7 +63,7 @@ func TestRunContainersRealtimeScan_InvalidLicense_Fails(t *testing.T) { result, err := service.RunContainersRealtimeScan("../../../commands/data/containers/testdata/Dockerfile", "") assert.Error(t, err) assert.Nil(t, result) - assert.Contains(t, err.Error(), "realtime engine error: failed to ensure license") + assert.Contains(t, err.Error(), "User does not have the required license for AI-assisted functionality.") } func TestRunContainersRealtimeScan_FeatureFlagDisabled_Fails(t *testing.T) { From 69c1242d8e51b47d3facb4595c186cfc6db492c9 Mon Sep 17 00:00:00 2001 From: cx-Margarita-LevitM Date: Mon, 3 Nov 2025 08:25:12 +0200 Subject: [PATCH 5/5] Update error message in the test --- .../containersrealtime/containers-realtime_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/services/realtimeengine/containersrealtime/containers-realtime_test.go b/internal/services/realtimeengine/containersrealtime/containers-realtime_test.go index 383da63cd..de193081d 100644 --- a/internal/services/realtimeengine/containersrealtime/containers-realtime_test.go +++ b/internal/services/realtimeengine/containersrealtime/containers-realtime_test.go @@ -63,7 +63,7 @@ func TestRunContainersRealtimeScan_InvalidLicense_Fails(t *testing.T) { result, err := service.RunContainersRealtimeScan("../../../commands/data/containers/testdata/Dockerfile", "") assert.Error(t, err) assert.Nil(t, result) - assert.Contains(t, err.Error(), "User does not have the required license for AI-assisted functionality.") + assert.Contains(t, err.Error(), "JWT wrapper is not initialized, cannot ensure license") } func TestRunContainersRealtimeScan_FeatureFlagDisabled_Fails(t *testing.T) {