From 25b4523ff11bed6531cf225686e2e09a64ad8e87 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Mon, 12 Jan 2026 14:33:54 +0200 Subject: [PATCH 01/12] getLicenseDetails --- src/main/license/JwtClaims.ts | 25 +++++++++++++++++++++++++ src/main/wrapper/CxConstants.ts | 1 + src/main/wrapper/CxWrapper.ts | 26 +++++++++++++++++++++++++- 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/main/license/JwtClaims.ts diff --git a/src/main/license/JwtClaims.ts b/src/main/license/JwtClaims.ts new file mode 100644 index 0000000..0ca5e79 --- /dev/null +++ b/src/main/license/JwtClaims.ts @@ -0,0 +1,25 @@ +/** + * Represents license-related information extracted from the JWT token + */ +export class JwtClaims { + tenantName: string; + dastEnabled: boolean; + allowedEngines: string[]; + + constructor(tenantName: string, dastEnabled: boolean, allowedEngines: string[]) { + this.tenantName = tenantName; + this.dastEnabled = dastEnabled; + this.allowedEngines = allowedEngines; + } + + /** + * Creates a JwtClaims instance from a JSON object + */ + static fromJson(json: any): JwtClaims { + return new JwtClaims( + json.tenantName || '', + json.dastEnabled || false, + json.allowedEngines || [] + ); + } +} diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 3f9450f..1896af0 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -21,6 +21,7 @@ export enum CxConstants { CMD_REMEDIATION = "remediation", SUB_CMD_REMEDIATION_SCA = "sca", SUB_CMD_TENANT = "tenant", + SUB_CMD_LICENSE = "license", KICS_REMEDIATION_RESULTS_FILE = "--results-file", KICS_REMEDIATION_KICS_FILE = "--kics-files", KICS_REMEDIATION_SIMILARITY_IDS = "--similarity-ids", diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index c271e18..7560b90 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -9,6 +9,9 @@ import * as os from "os"; import CxBFL from "../bfl/CxBFL"; import path = require('path'); import { getTrimmedMapValue } from "./utils"; +import { JwtClaims } from "../license/JwtClaims"; + +export { JwtClaims } from "../license/JwtClaims"; type ParamTypeMap = Map; @@ -651,4 +654,25 @@ export class CxWrapper { } return r; } -} \ No newline at end of file + + /** + * Gets license details from the JWT token + */ + async getLicenseDetails(): Promise { + const commands: string[] = [ + CxConstants.CMD_UTILS, + CxConstants.SUB_CMD_LICENSE, + CxConstants.FORMAT, + CxConstants.FORMAT_JSON + ]; + commands.push(...this.initializeCommands(false)); + + const exec = new ExecutionService(); + const output = await exec.executeCommands(this.config.pathToExecutable, commands); + + if (output.exitCode === 0 && output.payload) { + return JwtClaims.fromJson(output.payload); + } + return null; + } +} From 7ae77cd51c0f686c437d860a942d9d2b6b119dc4 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Mon, 12 Jan 2026 15:41:13 +0200 Subject: [PATCH 02/12] remove unused export --- src/main/wrapper/CxWrapper.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 7560b90..332884c 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -11,8 +11,6 @@ import path = require('path'); import { getTrimmedMapValue } from "./utils"; import { JwtClaims } from "../license/JwtClaims"; -export { JwtClaims } from "../license/JwtClaims"; - type ParamTypeMap = Map; export class CxWrapper { From 0f70cfda1b15ddead0786bf6c368b353d4ae4893 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Tue, 13 Jan 2026 11:11:02 +0200 Subject: [PATCH 03/12] Use dastEnabled --- src/main/license/JwtClaims.ts | 25 ------------------------- src/main/wrapper/CxConstants.ts | 2 +- src/main/wrapper/CxWrapper.ts | 33 +++++++++++---------------------- 3 files changed, 12 insertions(+), 48 deletions(-) delete mode 100644 src/main/license/JwtClaims.ts diff --git a/src/main/license/JwtClaims.ts b/src/main/license/JwtClaims.ts deleted file mode 100644 index 0ca5e79..0000000 --- a/src/main/license/JwtClaims.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Represents license-related information extracted from the JWT token - */ -export class JwtClaims { - tenantName: string; - dastEnabled: boolean; - allowedEngines: string[]; - - constructor(tenantName: string, dastEnabled: boolean, allowedEngines: string[]) { - this.tenantName = tenantName; - this.dastEnabled = dastEnabled; - this.allowedEngines = allowedEngines; - } - - /** - * Creates a JwtClaims instance from a JSON object - */ - static fromJson(json: any): JwtClaims { - return new JwtClaims( - json.tenantName || '', - json.dastEnabled || false, - json.allowedEngines || [] - ); - } -} diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 1896af0..cdc8d35 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -21,7 +21,6 @@ export enum CxConstants { CMD_REMEDIATION = "remediation", SUB_CMD_REMEDIATION_SCA = "sca", SUB_CMD_TENANT = "tenant", - SUB_CMD_LICENSE = "license", KICS_REMEDIATION_RESULTS_FILE = "--results-file", KICS_REMEDIATION_KICS_FILE = "--kics-files", KICS_REMEDIATION_SIMILARITY_IDS = "--similarity-ids", @@ -120,6 +119,7 @@ export enum CxConstants { AI_GUIDED_REMEDIATION_KEY = "scan.config.plugins.aiGuidedRemediation", STANDALONE_KEY = "scan.config.plugins.cxdevassist", ASSIST_KEY = "scan.config.plugins.cxoneassist", + DAST_ENABLED_KEY = "scan.config.plugins.dastenabled", AI_MCP_SERVER_KEY = "scan.config.plugins.aiMcpServer", TELEMETRY = "telemetry", SUB_CMD_TELEMETRY_AI = "ai", diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 332884c..2725051 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -9,7 +9,6 @@ import * as os from "os"; import CxBFL from "../bfl/CxBFL"; import path = require('path'); import { getTrimmedMapValue } from "./utils"; -import { JwtClaims } from "../license/JwtClaims"; type ParamTypeMap = Map; @@ -513,6 +512,17 @@ export class CxWrapper { return value?.toLowerCase() === "true"; } + async dastEnabled(): Promise { + const commands: string[] = [CxConstants.CMD_UTILS, CxConstants.SUB_CMD_TENANT]; + commands.push(...this.initializeCommands(false)); + + const exec = new ExecutionService(); + const output = await exec.executeMapTenantOutputCommands(this.config.pathToExecutable, commands); + + const value = getTrimmedMapValue(output, CxConstants.DAST_ENABLED_KEY); + return value?.toLowerCase() === "true"; + } + async aiMcpServerEnabled(): Promise { const commands: string[] = [CxConstants.CMD_UTILS, CxConstants.SUB_CMD_TENANT]; commands.push(...this.initializeCommands(false)); @@ -652,25 +662,4 @@ export class CxWrapper { } return r; } - - /** - * Gets license details from the JWT token - */ - async getLicenseDetails(): Promise { - const commands: string[] = [ - CxConstants.CMD_UTILS, - CxConstants.SUB_CMD_LICENSE, - CxConstants.FORMAT, - CxConstants.FORMAT_JSON - ]; - commands.push(...this.initializeCommands(false)); - - const exec = new ExecutionService(); - const output = await exec.executeCommands(this.config.pathToExecutable, commands); - - if (output.exitCode === 0 && output.payload) { - return JwtClaims.fromJson(output.payload); - } - return null; - } } From 72e2347f2ff0c2b557efad2ee8850b7839e88a93 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Tue, 13 Jan 2026 14:28:37 +0200 Subject: [PATCH 04/12] add environmentsList --- src/main/environment/CxEnvironment.ts | 35 +++++++++++++++++++++++++++ src/main/wrapper/CxConstants.ts | 2 ++ src/main/wrapper/CxWrapper.ts | 8 ++++++ src/main/wrapper/ExecutionService.ts | 5 ++++ 4 files changed, 50 insertions(+) create mode 100644 src/main/environment/CxEnvironment.ts diff --git a/src/main/environment/CxEnvironment.ts b/src/main/environment/CxEnvironment.ts new file mode 100644 index 0000000..d0c6c55 --- /dev/null +++ b/src/main/environment/CxEnvironment.ts @@ -0,0 +1,35 @@ +export default class CxEnvironment { + id: string; + name: string; + url: string; + scanType: string; + createdAt: string; + riskRating: string; + lastScanTime: string; + lastStatus: string + + static parseEnvironment(resultObject: any): CxEnvironment[] { + let environments: CxEnvironment[] = []; + + const parseEnvironment = (result: any): CxEnvironment => { + const environment = new CxEnvironment(); + environment.id = result.EnvironmentID; + environment.name = result.Domain; + environment.url = result.URL; + environment.scanType = result.ScanType; + environment.createdAt = result.Created; + environment.riskRating = result.RiskRating; + environment.lastScanTime = result.LastScanTime; + environment.lastStatus = result.LastStatus; + return environment; + } + + if (resultObject instanceof Array) { + environments = resultObject.map((result: any) => parseEnvironment(result)); + } else { + const environment = parseEnvironment(resultObject) + environments.push(environment); + } + return environments; + } +} diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index cdc8d35..de6ece3 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -30,6 +30,7 @@ export enum CxConstants { CMD_AUTH = "auth", SUB_CMD_VALIDATE = "validate", CMD_PROJECT = "project", + CMD_ENVIRONMENTS = "environments", SUB_CMD_BRANCHES = "branches", CMD_SCAN = "scan", SUB_CMD_SHOW = "show", @@ -98,6 +99,7 @@ export enum CxConstants { SCAN_SECRETS = "CxSecrets", SCAN_CONTAINERS_REALTIME = "CxContainersRealtime", PROJECT_TYPE = "CxProject", + ENVIRONMENT_TYPE = "CxEnvironment", PREDICATE_TYPE = "CxPredicate", CODE_BASHING_TYPE = "CxCodeBashing", KICS_REALTIME_TYPE = "CxKicsRealTime", diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 2725051..823d394 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -275,6 +275,14 @@ export class CxWrapper { return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } + async environmentsList(filters: string): Promise { + const validated_filters = this.filterArguments(filters); + const commands: string[] = ([CxConstants.CMD_ENVIRONMENTS, CxConstants.SUB_CMD_LIST] as string[]).concat(validated_filters); + commands.push(...this.initializeCommands(true)); + const exec = new ExecutionService(); + return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.ENVIRONMENT_TYPE); + } + async projectBranches(projectId: string, filters: string): Promise { // Verify and add possible branch filter by name const validated_filters = this.filterArguments(CxConstants.BRANCH_NAME + filters) diff --git a/src/main/wrapper/ExecutionService.ts b/src/main/wrapper/ExecutionService.ts index 0df0136..130997f 100644 --- a/src/main/wrapper/ExecutionService.ts +++ b/src/main/wrapper/ExecutionService.ts @@ -27,6 +27,7 @@ import CxOssResult from "../oss/CxOss"; import CxSecretsResult from "../secrets/CxSecrets"; import CxContainerRealtimeResult from "../containersRealtime/CxContainerRealtime"; import CxIacResult from "../iacRealtime/CxIac"; +import CxEnvironment from "../environment/CxEnvironment"; let skipValue = false; const fileSourceFlag = "--file-source" @@ -229,6 +230,10 @@ export class ExecutionService { const projects = CxProject.parseProject(resultObject); cxCommandOutput.payload = projects; break; + case CxConstants.ENVIRONMENT_TYPE: + const environments = CxEnvironment.parseEnvironment(resultObject); + cxCommandOutput.payload = environments; + break; case CxConstants.CODE_BASHING_TYPE: const codeBashing = CxCodeBashing.parseCodeBashing(resultObject); cxCommandOutput.payload = codeBashing; From 0c3a53bc15b8468a167558be61b6a99b67438359 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Thu, 15 Jan 2026 09:51:21 +0200 Subject: [PATCH 05/12] rename environment to dastEnvironment --- .../CxDastEnvironment.ts} | 14 +- src/main/wrapper/CxConstants.ts | 266 ++++---- src/main/wrapper/CxWrapper.ts | 2 +- src/main/wrapper/ExecutionService.ts | 631 ++++++++++-------- 4 files changed, 497 insertions(+), 416 deletions(-) rename src/main/{environment/CxEnvironment.ts => dast/CxDastEnvironment.ts} (60%) diff --git a/src/main/environment/CxEnvironment.ts b/src/main/dast/CxDastEnvironment.ts similarity index 60% rename from src/main/environment/CxEnvironment.ts rename to src/main/dast/CxDastEnvironment.ts index d0c6c55..06a8d91 100644 --- a/src/main/environment/CxEnvironment.ts +++ b/src/main/dast/CxDastEnvironment.ts @@ -1,4 +1,4 @@ -export default class CxEnvironment { +export default class CxDastEnvironment { id: string; name: string; url: string; @@ -8,11 +8,11 @@ export default class CxEnvironment { lastScanTime: string; lastStatus: string - static parseEnvironment(resultObject: any): CxEnvironment[] { - let environments: CxEnvironment[] = []; + static parseDastEnvironment(resultObject: any): CxDastEnvironment[] { + let environments: CxDastEnvironment[] = []; - const parseEnvironment = (result: any): CxEnvironment => { - const environment = new CxEnvironment(); + const parseDastEnvironmentResult = (result: any): CxDastEnvironment => { + const environment = new CxDastEnvironment(); environment.id = result.EnvironmentID; environment.name = result.Domain; environment.url = result.URL; @@ -25,9 +25,9 @@ export default class CxEnvironment { } if (resultObject instanceof Array) { - environments = resultObject.map((result: any) => parseEnvironment(result)); + environments = resultObject.map((result: any) => parseDastEnvironmentResult(result)); } else { - const environment = parseEnvironment(resultObject) + const environment = parseDastEnvironmentResult(resultObject) environments.push(environment); } return environments; diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index de6ece3..6aed8a6 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -1,135 +1,135 @@ export enum CxConstants { - VULNERABILITIES = "--vulnerability-identifiers", - IGNORE__FILE_PATH = "--ignored-file-path", - SOURCE = "-s", - VERBOSE = "-v", - PROJECT_NAME = "--project-name", - SCAN_TYPES_SUB_CMD = "--scan-type", - SCAN_TYPES = "--scan-types", - SAST_PRESET_NAME = "--sast-preset-name", - FILE_FILTER = "--file-filter", - AGENT = "--agent", - BRANCH = "--branch", - BRANCH_NAME = "branch-name=", - CLIENT_ID = "--client-id", - CLIENT_SECRET = "--client-secret", - API_KEY = "--apikey", - TENANT = "--tenant", - BASE_URI = "--base-uri", - BASE_AUTH_URI = "--base-auth-uri", - CMD_UTILS = "utils", - CMD_REMEDIATION = "remediation", - SUB_CMD_REMEDIATION_SCA = "sca", - SUB_CMD_TENANT = "tenant", - KICS_REMEDIATION_RESULTS_FILE = "--results-file", - KICS_REMEDIATION_KICS_FILE = "--kics-files", - KICS_REMEDIATION_SIMILARITY_IDS = "--similarity-ids", - SCA_REMEDIATION_PACKAGE_FILES = "--package-files", - SCA_REMEDIATION_PACKAGE = "--package", - SCA_REMEDIATION_PACKAGE_VERSION = "--package-version", - CMD_AUTH = "auth", - SUB_CMD_VALIDATE = "validate", - CMD_PROJECT = "project", - CMD_ENVIRONMENTS = "environments", - SUB_CMD_BRANCHES = "branches", - CMD_SCAN = "scan", - SUB_CMD_SHOW = "show", - SUB_CMD_CANCEL = "cancel", - SUB_CMD_LIST = "list", - SUB_CMD_CREATE = "create", - CMD_TRIAGE = "triage", - SUB_CMD_UPDATE = "update", - SUB_CMD_GET_STATES = "get-states", - ALL_STATES_FLAG = "--all", - CMD_RESULT = "results", - CMD_RISK_MANAGEMENT = "risk-management", - CMD_LIMIT = "--limit", - SUB_CMD_BFL = "bfl", - CMD_CODE_BASHING = "codebashing", - CMD_KICS_REALTIME = "kics-realtime", - CMD_SCA_REALTIME = "sca-realtime", - CMD_SCA_REALTIME_PROJECT_DIR = "--project-dir", - CMD_CHAT = "chat", - KICS = "kics", - CMD_CHAT_APIKEY = "--chat-apikey", - CMD_CHAT_FILE = "--result-file", - CMD_CHAT_LINE = "--result-line", - CMD_CHAT_SEVERITY = "--result-severity", - CMD_CHAT_VULNERABILITY = "--result-vulnerability", - CMD_CHAT_INPUT = "--user-input", - CMD_CHAT_CONVERSATION_ID = "--conversation-id", - CMD_CHAT_MODEL = "--model", - CMD_MASK_SECRETS = "mask", - CMD_SAST_CHAT_RESULT_ID = "--sast-result-id", - CMD_SAST_CHAT_RESULT_RESULTS_FILE = "--scan-results-file", - CMD_SAST_CHAT_RESULT_SOURCE_FILE = "--source-dir", - SCAN_INFO_FORMAT = "--scan-info-format", - FORMAT = "--format", - FORMAT_JSON = "json", - FORMAT_HTML = "html", - FORMAT_JSON_FILE = ".json", - FORMAT_HTML_FILE = ".html", - FORMAT_HTML_CLI = "summaryHTML", - FILTER = "--filter", - SCAN_ID = "--scan-id", - CMD_ASCA = "asca", - SOURCE_FILE = "--file-source", - ASCA_UPDATE_VERSION = "--asca-latest-version", - CMD_OSS = "oss-realtime", - CMD_SECRETS = "secrets-realtime", - CMD_CONTAINERS_REALTIME = "containers-realtime", - CMD_IAC_REALTIME = "iac-realtime", - PROJECT_ID = "--project-id", - SIMILARITY_ID = "--similarity-id", - QUERY_ID = "--query-id", - STATE = "--state", - STATE_ID = "--state-id", - COMMENT = "--comment", - SEVERITY = "--severity", - REPORT_FORMAT = "--report-format", - OUTPUT_NAME = "--output-name", - OUTPUT_PATH = "--output-path", - FILE_SOURCES = "--file", - ADDITONAL_PARAMS = "--additional-params", - ENGINE = "--engine", - SCAN_TYPE = "CxScan", - SCAN_ASCA = "CxAsca", - SCAN_OSS = "CxOss", - SCAN_IAC = "CxIac", - SCAN_SECRETS = "CxSecrets", - SCAN_CONTAINERS_REALTIME = "CxContainersRealtime", - PROJECT_TYPE = "CxProject", - ENVIRONMENT_TYPE = "CxEnvironment", - PREDICATE_TYPE = "CxPredicate", - CODE_BASHING_TYPE = "CxCodeBashing", - KICS_REALTIME_TYPE = "CxKicsRealTime", - SCA_REALTIME_TYPE = "CxScaRealTime", - CHAT_TYPE = "CxChat", - MASK_TYPE = "CxMask", - LEARN_MORE_DESCRIPTIONS_TYPE = "CxLearnMoreDescriptions", - KICS_REMEDIATION_TYPE = "CxKicsRemediation", - BFL_TYPE = "CxBFL", - SAST = "sast", - LANGUAGE = "--language", - VULNERABILITY_TYPE = "--vulnerability-type", - CWE_ID = "--cwe-id", - SEVERITY_HIGH = "high", - SEVERITY_MEDIUM = "medium", - STATE_CONFIRMED = "confirmed", - CMD_LEARN_MORE = "learn-more", - IDE_SCANS_KEY = "scan.config.plugins.ideScans", - AI_GUIDED_REMEDIATION_KEY = "scan.config.plugins.aiGuidedRemediation", - STANDALONE_KEY = "scan.config.plugins.cxdevassist", - ASSIST_KEY = "scan.config.plugins.cxoneassist", - DAST_ENABLED_KEY = "scan.config.plugins.dastenabled", - AI_MCP_SERVER_KEY = "scan.config.plugins.aiMcpServer", - TELEMETRY = "telemetry", - SUB_CMD_TELEMETRY_AI = "ai", - AI_PROVIDER = "--ai-provider", - TYPE = "--type", - SUB_TYPE = "--sub-type", - PROBLEM_SEVERITY = "--problem-severity", - SCAN_TYPE_FLAG = "--scan-type", - STATUS = "--status", - TOTAL_COUNT = "--total-count", + VULNERABILITIES = '--vulnerability-identifiers', + IGNORE__FILE_PATH = '--ignored-file-path', + SOURCE = '-s', + VERBOSE = '-v', + PROJECT_NAME = '--project-name', + SCAN_TYPES_SUB_CMD = '--scan-type', + SCAN_TYPES = '--scan-types', + SAST_PRESET_NAME = '--sast-preset-name', + FILE_FILTER = '--file-filter', + AGENT = '--agent', + BRANCH = '--branch', + BRANCH_NAME = 'branch-name=', + CLIENT_ID = '--client-id', + CLIENT_SECRET = '--client-secret', + API_KEY = '--apikey', + TENANT = '--tenant', + BASE_URI = '--base-uri', + BASE_AUTH_URI = '--base-auth-uri', + CMD_UTILS = 'utils', + CMD_REMEDIATION = 'remediation', + SUB_CMD_REMEDIATION_SCA = 'sca', + SUB_CMD_TENANT = 'tenant', + KICS_REMEDIATION_RESULTS_FILE = '--results-file', + KICS_REMEDIATION_KICS_FILE = '--kics-files', + KICS_REMEDIATION_SIMILARITY_IDS = '--similarity-ids', + SCA_REMEDIATION_PACKAGE_FILES = '--package-files', + SCA_REMEDIATION_PACKAGE = '--package', + SCA_REMEDIATION_PACKAGE_VERSION = '--package-version', + CMD_AUTH = 'auth', + SUB_CMD_VALIDATE = 'validate', + CMD_PROJECT = 'project', + CMD_ENVIRONMENTS = 'environments', + SUB_CMD_BRANCHES = 'branches', + CMD_SCAN = 'scan', + SUB_CMD_SHOW = 'show', + SUB_CMD_CANCEL = 'cancel', + SUB_CMD_LIST = 'list', + SUB_CMD_CREATE = 'create', + CMD_TRIAGE = 'triage', + SUB_CMD_UPDATE = 'update', + SUB_CMD_GET_STATES = 'get-states', + ALL_STATES_FLAG = '--all', + CMD_RESULT = 'results', + CMD_RISK_MANAGEMENT = 'risk-management', + CMD_LIMIT = '--limit', + SUB_CMD_BFL = 'bfl', + CMD_CODE_BASHING = 'codebashing', + CMD_KICS_REALTIME = 'kics-realtime', + CMD_SCA_REALTIME = 'sca-realtime', + CMD_SCA_REALTIME_PROJECT_DIR = '--project-dir', + CMD_CHAT = 'chat', + KICS = 'kics', + CMD_CHAT_APIKEY = '--chat-apikey', + CMD_CHAT_FILE = '--result-file', + CMD_CHAT_LINE = '--result-line', + CMD_CHAT_SEVERITY = '--result-severity', + CMD_CHAT_VULNERABILITY = '--result-vulnerability', + CMD_CHAT_INPUT = '--user-input', + CMD_CHAT_CONVERSATION_ID = '--conversation-id', + CMD_CHAT_MODEL = '--model', + CMD_MASK_SECRETS = 'mask', + CMD_SAST_CHAT_RESULT_ID = '--sast-result-id', + CMD_SAST_CHAT_RESULT_RESULTS_FILE = '--scan-results-file', + CMD_SAST_CHAT_RESULT_SOURCE_FILE = '--source-dir', + SCAN_INFO_FORMAT = '--scan-info-format', + FORMAT = '--format', + FORMAT_JSON = 'json', + FORMAT_HTML = 'html', + FORMAT_JSON_FILE = '.json', + FORMAT_HTML_FILE = '.html', + FORMAT_HTML_CLI = 'summaryHTML', + FILTER = '--filter', + SCAN_ID = '--scan-id', + CMD_ASCA = 'asca', + SOURCE_FILE = '--file-source', + ASCA_UPDATE_VERSION = '--asca-latest-version', + CMD_OSS = 'oss-realtime', + CMD_SECRETS = 'secrets-realtime', + CMD_CONTAINERS_REALTIME = 'containers-realtime', + CMD_IAC_REALTIME = 'iac-realtime', + PROJECT_ID = '--project-id', + SIMILARITY_ID = '--similarity-id', + QUERY_ID = '--query-id', + STATE = '--state', + STATE_ID = '--state-id', + COMMENT = '--comment', + SEVERITY = '--severity', + REPORT_FORMAT = '--report-format', + OUTPUT_NAME = '--output-name', + OUTPUT_PATH = '--output-path', + FILE_SOURCES = '--file', + ADDITONAL_PARAMS = '--additional-params', + ENGINE = '--engine', + SCAN_TYPE = 'CxScan', + SCAN_ASCA = 'CxAsca', + SCAN_OSS = 'CxOss', + SCAN_IAC = 'CxIac', + SCAN_SECRETS = 'CxSecrets', + SCAN_CONTAINERS_REALTIME = 'CxContainersRealtime', + PROJECT_TYPE = 'CxProject', + DAST_ENVIRONMENT_TYPE = 'CxDastEnvironment', + PREDICATE_TYPE = 'CxPredicate', + CODE_BASHING_TYPE = 'CxCodeBashing', + KICS_REALTIME_TYPE = 'CxKicsRealTime', + SCA_REALTIME_TYPE = 'CxScaRealTime', + CHAT_TYPE = 'CxChat', + MASK_TYPE = 'CxMask', + LEARN_MORE_DESCRIPTIONS_TYPE = 'CxLearnMoreDescriptions', + KICS_REMEDIATION_TYPE = 'CxKicsRemediation', + BFL_TYPE = 'CxBFL', + SAST = 'sast', + LANGUAGE = '--language', + VULNERABILITY_TYPE = '--vulnerability-type', + CWE_ID = '--cwe-id', + SEVERITY_HIGH = 'high', + SEVERITY_MEDIUM = 'medium', + STATE_CONFIRMED = 'confirmed', + CMD_LEARN_MORE = 'learn-more', + IDE_SCANS_KEY = 'scan.config.plugins.ideScans', + AI_GUIDED_REMEDIATION_KEY = 'scan.config.plugins.aiGuidedRemediation', + STANDALONE_KEY = 'scan.config.plugins.cxdevassist', + ASSIST_KEY = 'scan.config.plugins.cxoneassist', + DAST_ENABLED_KEY = 'scan.config.plugins.dastenabled', + AI_MCP_SERVER_KEY = 'scan.config.plugins.aiMcpServer', + TELEMETRY = 'telemetry', + SUB_CMD_TELEMETRY_AI = 'ai', + AI_PROVIDER = '--ai-provider', + TYPE = '--type', + SUB_TYPE = '--sub-type', + PROBLEM_SEVERITY = '--problem-severity', + SCAN_TYPE_FLAG = '--scan-type', + STATUS = '--status', + TOTAL_COUNT = '--total-count', } diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 823d394..7d83adc 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -280,7 +280,7 @@ export class CxWrapper { const commands: string[] = ([CxConstants.CMD_ENVIRONMENTS, CxConstants.SUB_CMD_LIST] as string[]).concat(validated_filters); commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.ENVIRONMENT_TYPE); + return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.DAST_ENVIRONMENT_TYPE); } async projectBranches(projectId: string, filters: string): Promise { diff --git a/src/main/wrapper/ExecutionService.ts b/src/main/wrapper/ExecutionService.ts index 130997f..9f46378 100644 --- a/src/main/wrapper/ExecutionService.ts +++ b/src/main/wrapper/ExecutionService.ts @@ -27,310 +27,391 @@ import CxOssResult from "../oss/CxOss"; import CxSecretsResult from "../secrets/CxSecrets"; import CxContainerRealtimeResult from "../containersRealtime/CxContainerRealtime"; import CxIacResult from "../iacRealtime/CxIac"; -import CxEnvironment from "../environment/CxEnvironment"; +import CxDastEnvironment from '../dast/CxDastEnvironment'; let skipValue = false; -const fileSourceFlag = "--file-source" +const fileSourceFlag = '--file-source'; function isJsonString(s: string) { - try { - const stringObject = s.split('\n')[0]; - JSON.parse(stringObject); - } catch (e) { - return false; - } - return true; + try { + const stringObject = s.split('\n')[0]; + JSON.parse(stringObject); + } catch (e) { + return false; + } + return true; } function transformation(commands: string[]): string[] { - skipValue = false; // Reset the flag before processing - const result: string[] = commands.map(transform); - return result; + skipValue = false; // Reset the flag before processing + const result: string[] = commands.map(transform); + return result; } function transform(n: string) { - -// in case the file name looks like this: 'var express require('express');.js' we won't delete "'" - if (skipValue) { - skipValue = false; - let r = ""; - if (n) r = n.replace(/["]/g, "").replace("/[, ]/g", ","); - return r; - } - // If the current string is "--file-source", set the flag - if (n === fileSourceFlag) { - skipValue = true; - } - - let r = ""; - if (n) r = n.replace(/["']/g, "").replace("/[, ]/g", ","); + // in case the file name looks like this: 'var express require('express');.js' we won't delete "'" + if (skipValue) { + skipValue = false; + let r = ''; + if (n) r = n.replace(/["]/g, '').replace('/[, ]/g', ','); return r; + } + // If the current string is "--file-source", set the flag + if (n === fileSourceFlag) { + skipValue = true; + } + + let r = ''; + if (n) r = n.replace(/["']/g, '').replace('/[, ]/g', ','); + return r; } export class ExecutionService { - private fsObject: any = undefined + private fsObject: any = undefined; - executeCommands(pathToExecutable: string, commands: string[], output?: string): Promise { - return (new Promise((resolve, reject) => { - let stderr = ""; - let stdout = ""; + executeCommands(pathToExecutable: string, commands: string[], output?: string): Promise { + return new Promise((resolve, reject) => { + let stderr = ''; + let stdout = ''; - this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); - this.fsObject.on('error', (data: { toString: () => string; }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - reject() - }); - this.fsObject.on('exit', (code: number) => { + this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); + this.fsObject.on('error', (data: { toString: () => string }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + reject(); + }); + this.fsObject.on('exit', (code: number) => { + logger.info('Exit code received from AST-CLI: ' + code); + if (code == 1) { + stderr = stdout; + } + resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output)); + }); + this.fsObject.stdout.on('data', (data: { toString: () => string }) => { + if (data) { + logger.info(data.toString().replace('\n', '')); + stdout += data.toString(); + } + }); + this.fsObject.stderr.on('data', (data: { toString: () => string }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + }); + }); + } - logger.info("Exit code received from AST-CLI: " + code); - if (code == 1) { - stderr = stdout - } - resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output)); - }); - this.fsObject.stdout.on('data', (data: { toString: () => string; }) => { - if (data) { - logger.info(data.toString().replace('\n', '')); - stdout += data.toString(); - } - }); - this.fsObject.stderr.on('data', (data: { toString: () => string; }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - }); - })); - } + executeKicsCommands(pathToExecutable: string, commands: string[], output?: string): [Promise, any] { + return [ + new Promise((resolve, reject) => { + let stderr = ''; + let stdout = ''; - executeKicsCommands(pathToExecutable: string, commands: string[], output?: string): [Promise, any] { - return [new Promise((resolve, reject) => { - let stderr = ""; - let stdout = ""; + this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); + this.fsObject.on('error', (data: { toString: () => string }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + reject(); + }); + this.fsObject.on('exit', (code: number) => { + logger.info('Exit code received from AST-CLI: ' + code); + if (code == 1) { + stderr = stdout; + } + resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output)); + }); + this.fsObject.stdout.on('data', (data: { toString: () => string }) => { + if (data) { + logger.info(data.toString().replace('\n', '')); + stdout += data.toString(); + } + }); + this.fsObject.stderr.on('data', (data: { toString: () => string }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + }); + }), + this.fsObject, + ]; + } - this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); - this.fsObject.on('error', (data: { toString: () => string; }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - reject() - }); - this.fsObject.on('exit', (code: number) => { - logger.info("Exit code received from AST-CLI: " + code); - if (code == 1) { - stderr = stdout - } - resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output)); - }); - this.fsObject.stdout.on('data', (data: { toString: () => string; }) => { - if (data) { - logger.info(data.toString().replace('\n', '')); - stdout += data.toString(); - } - }); - this.fsObject.stderr.on('data', (data: { toString: () => string; }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - }); - }), this.fsObject]; - } + executeMapTenantOutputCommands(pathToExecutable: string, commands: string[]): Promise> { + return new Promise((resolve, reject) => { + let stderr = ''; + let stdout = ''; - executeMapTenantOutputCommands(pathToExecutable: string, commands: string[]): Promise> { - return (new Promise((resolve, reject) => { - let stderr = ""; - let stdout = ""; + this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); + this.fsObject.on('error', (data: { toString: () => string }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + reject(); + }); + this.fsObject.on('exit', (code: number) => { + logger.info('Exit code received from AST-CLI: ' + code); + if (code == 1) { + stderr = stdout; + reject(stderr); + } + resolve(ExecutionService.onCloseMapTenantOutputCommand(code, stderr, stdout)); + }); + this.fsObject.stdout.on('data', (data: { toString: () => string }) => { + if (data) { + logger.info(data.toString().replace('\n', '')); + stdout += data.toString(); + } + }); + this.fsObject.stderr.on('data', (data: { toString: () => string }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + }); + }); + } - this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); - this.fsObject.on('error', (data: { toString: () => string; }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - reject() - }); - this.fsObject.on('exit', (code: number) => { - logger.info("Exit code received from AST-CLI: " + code); - if (code == 1) { - stderr = stdout - reject(stderr) - } - resolve(ExecutionService.onCloseMapTenantOutputCommand(code, stderr, stdout)); - }); - this.fsObject.stdout.on('data', (data: { toString: () => string; }) => { - if (data) { - logger.info(data.toString().replace('\n', '')); - stdout += data.toString(); - } - }); - this.fsObject.stderr.on('data', (data: { toString: () => string; }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - }); - })); + private static onCloseMapTenantOutputCommand(code: number, stderr: string, stdout: string): Map { + const result = new Map(); + if (code == 0) { + const tenantSettingsList = stdout.split('\n'); + tenantSettingsList.forEach((tenantSetting) => { + tenantSetting.includes('Key') + ? result.set( + tenantSetting.split(':')[1], + tenantSettingsList[tenantSettingsList.indexOf(tenantSetting) + 1].split(':')[1] + ) + : null; + }); + } else { + logger.error('Error occurred while executing command: ' + stderr); } + return result; + } - private static onCloseMapTenantOutputCommand(code: number, stderr: string, stdout: string): Map { - const result = new Map(); - if (code == 0) { - const tenantSettingsList = stdout.split('\n'); - tenantSettingsList.forEach(tenantSetting => { - tenantSetting.includes('Key') ? result.set(tenantSetting.split(':')[1], tenantSettingsList[tenantSettingsList.indexOf(tenantSetting) + 1].split(':')[1]) : null; - }); - } else { - logger.error("Error occurred while executing command: " + stderr); + private static onCloseCommand(code: number, stderr: string, stdout: string, output: string): CxCommandOutput { + const cxCommandOutput = new CxCommandOutput(); + cxCommandOutput.exitCode = code; + if (stderr) { + cxCommandOutput.status = stderr; + } + if (stdout) { + const stdoutSplit = stdout.split('\n'); + const data = stdoutSplit.find(isJsonString); + if (data) { + const resultObject = JSON.parse(data); + switch (output) { + case CxConstants.SCAN_TYPE: + const scans = CxScan.parseProject(resultObject); + cxCommandOutput.payload = scans; + break; + case CxConstants.SCAN_ASCA: + const asca = CxAsca.parseScan(resultObject); + cxCommandOutput.payload = [asca]; + break; + case CxConstants.SCAN_OSS: + const oss = CxOssResult.parseResult(resultObject); + cxCommandOutput.payload = [oss]; + break; + case CxConstants.SCAN_IAC: + const iac = CxIacResult.parseResult(resultObject); + cxCommandOutput.payload = [iac]; + break; + case CxConstants.SCAN_CONTAINERS_REALTIME: + const images = CxContainerRealtimeResult.parseResult(resultObject); + cxCommandOutput.payload = [images]; + break; + case CxConstants.SCAN_SECRETS: + const secrets = CxSecretsResult.parseResult(resultObject); + cxCommandOutput.payload = [secrets]; + break; + case CxConstants.PROJECT_TYPE: + const projects = CxProject.parseProject(resultObject); + cxCommandOutput.payload = projects; + break; + case CxConstants.DAST_ENVIRONMENT_TYPE: + const environments = CxDastEnvironment.parseDastEnvironment(resultObject); + cxCommandOutput.payload = environments; + break; + case CxConstants.CODE_BASHING_TYPE: + const codeBashing = CxCodeBashing.parseCodeBashing(resultObject); + cxCommandOutput.payload = codeBashing; + break; + case CxConstants.BFL_TYPE: + const bflNode = CxBFL.parseBFLResponse(resultObject); + cxCommandOutput.payload = bflNode; + break; + case CxConstants.KICS_REALTIME_TYPE: + const kicsResults = CxKicsRealTime.parseKicsRealTimeResponse(resultObject); + cxCommandOutput.payload = [kicsResults]; + break; + case CxConstants.SCA_REALTIME_TYPE: + const scaRealtimeResponse = CxScaRealTime.parseScaRealTimeResponse(resultObject); + cxCommandOutput.payload = [scaRealtimeResponse]; + break; + case CxConstants.LEARN_MORE_DESCRIPTIONS_TYPE: + const learnMore = CxLearnMoreDescriptions.parseLearnMoreDescriptionsResponse(resultObject); + cxCommandOutput.payload = learnMore; + break; + case CxConstants.KICS_REMEDIATION_TYPE: + const kicsRemediationOutput = CxKicsRemediation.parseKicsRemediation(resultObject); + cxCommandOutput.payload = [kicsRemediationOutput]; + break; + case CxConstants.CHAT_TYPE: + const chatOutput = CxChat.parseChat(resultObject); + cxCommandOutput.payload = [chatOutput]; + break; + case CxConstants.MASK_TYPE: + const maskOutput = CxMask.parseMask(resultObject); + cxCommandOutput.payload = [maskOutput]; + break; + default: + cxCommandOutput.payload = resultObject; } - return result; + } } - private static onCloseCommand(code: number, stderr: string, stdout: string, output: string): CxCommandOutput { - const cxCommandOutput = new CxCommandOutput(); - cxCommandOutput.exitCode = code; - if (stderr) { - cxCommandOutput.status = stderr; - } - if (stdout) { - const stdoutSplit = stdout.split('\n'); - const data = stdoutSplit.find(isJsonString); - if (data) { - const resultObject = JSON.parse(data); - switch (output) { - case CxConstants.SCAN_TYPE: - const scans = CxScan.parseProject(resultObject); - cxCommandOutput.payload = scans; - break; - case CxConstants.SCAN_ASCA: - const asca = CxAsca.parseScan(resultObject); - cxCommandOutput.payload = [asca]; - break; - case CxConstants.SCAN_OSS: - const oss = CxOssResult.parseResult(resultObject); - cxCommandOutput.payload = [oss]; - break; - case CxConstants.SCAN_IAC: - const iac = CxIacResult.parseResult(resultObject); - cxCommandOutput.payload = [iac]; - break; - case CxConstants.SCAN_CONTAINERS_REALTIME: - const images = CxContainerRealtimeResult.parseResult(resultObject); - cxCommandOutput.payload = [images]; - break; - case CxConstants.SCAN_SECRETS: - const secrets = CxSecretsResult.parseResult(resultObject); - cxCommandOutput.payload = [secrets]; - break; - case CxConstants.PROJECT_TYPE: - const projects = CxProject.parseProject(resultObject); - cxCommandOutput.payload = projects; - break; - case CxConstants.ENVIRONMENT_TYPE: - const environments = CxEnvironment.parseEnvironment(resultObject); - cxCommandOutput.payload = environments; - break; - case CxConstants.CODE_BASHING_TYPE: - const codeBashing = CxCodeBashing.parseCodeBashing(resultObject); - cxCommandOutput.payload = codeBashing; - break; - case CxConstants.BFL_TYPE: - const bflNode = CxBFL.parseBFLResponse(resultObject); - cxCommandOutput.payload = bflNode; - break; - case CxConstants.KICS_REALTIME_TYPE: - const kicsResults = CxKicsRealTime.parseKicsRealTimeResponse(resultObject); - cxCommandOutput.payload = [kicsResults]; - break; - case CxConstants.SCA_REALTIME_TYPE: - const scaRealtimeResponse = CxScaRealTime.parseScaRealTimeResponse(resultObject); - cxCommandOutput.payload = [scaRealtimeResponse]; - break; - case CxConstants.LEARN_MORE_DESCRIPTIONS_TYPE: - const learnMore = CxLearnMoreDescriptions.parseLearnMoreDescriptionsResponse(resultObject); - cxCommandOutput.payload = learnMore; - break; - case CxConstants.KICS_REMEDIATION_TYPE: - const kicsRemediationOutput = CxKicsRemediation.parseKicsRemediation(resultObject); - cxCommandOutput.payload = [kicsRemediationOutput]; - break; - case CxConstants.CHAT_TYPE: - const chatOutput = CxChat.parseChat(resultObject); - cxCommandOutput.payload = [chatOutput]; - break; - case CxConstants.MASK_TYPE: - const maskOutput = CxMask.parseMask(resultObject); - cxCommandOutput.payload = [maskOutput]; - break; - default: - cxCommandOutput.payload = resultObject; - } - } - } + return cxCommandOutput; + } - return cxCommandOutput; - } + executeResultsCommands(pathToExecutable: string, commands: string[]): Promise { + return new Promise(function (resolve, reject) { + let stderr = ''; + const cxCommandOutput = new CxCommandOutput(); + const cp = spawner.spawn(pathToExecutable, commands); + cp.stderr.on('data', function (chunk: string) { + stderr += chunk; + }); + cp.on('error', reject).on('close', function (code: number) { + logger.info('Exit code received from AST-CLI: ' + code); + logger.info(stderr); + cxCommandOutput.status = stderr; + cxCommandOutput.exitCode = code; + resolve(cxCommandOutput); + }); + cp.stdout.on('data', (data: any) => { + logger.info(`${data}`); + cxCommandOutput.payload = data; + }); + }); + } - executeResultsCommands(pathToExecutable: string, commands: string[]): Promise { - return new Promise(function (resolve, reject) { - let stderr = ''; - const cxCommandOutput = new CxCommandOutput(); - const cp = spawner.spawn(pathToExecutable, commands); - cp.stderr.on('data', function (chunk: string) { - stderr += chunk; - }); - cp.on('error', reject) - .on('close', function (code: number) { - logger.info("Exit code received from AST-CLI: " + code); - logger.info(stderr); - cxCommandOutput.status = stderr; - cxCommandOutput.exitCode = code; - resolve(cxCommandOutput) - }); - cp.stdout.on('data', (data: any) => { - logger.info(`${data}`); - cxCommandOutput.payload = data; - }); + async executeResultsCommandsFile( + scanId: string, + resultType: string, + fileExtension: string, + commands: string[], + pathToExecutable: string, + fileName: string + ): Promise { + const filePath = path.join(os.tmpdir(), fileName + fileExtension); + const read = fs.readFileSync(filePath, 'utf8'); + const cxCommandOutput = new CxCommandOutput(); + // Need to check if file output is json or html + if (fileExtension.includes('json')) { + const read_json = JSON.parse(read.replace(/:([0-9]{15,}),/g, ':"$1",')); + if (read_json.results) { + const r: CxResult[] = read_json.results.map((member: any) => { + const cxScaPackageData = new CxScaPackageData( + member.data.scaPackageData?.id, + member.data.scaPackageData?.locations, + member.data.scaPackageData?.dependencyPaths, + member.data.scaPackageData?.outdated, + member.data.scaPackageData?.fixLink, + member.data.scaPackageData?.supportsQuickFix, + member.data.scaPackageData?.typeOfDependency + ); + const cvss = new CxCvss( + member.vulnerabilityDetails.cvss.version, + member.vulnerabilityDetails.cvss.attackVector, + member.vulnerabilityDetails.cvss.availability, + member.vulnerabilityDetails.cvss.confidentiality, + member.vulnerabilityDetails.cvss.attackComplexity, + member.vulnerabilityDetails.cvss.integrityImpact, + member.vulnerabilityDetails.cvss.scope, + member.vulnerabilityDetails.cvss.privilegesRequired, + member.vulnerabilityDetails.cvss.userInteraction + ); + const cxVulnerabilityDetails = new CxVulnerabilityDetails( + member.vulnerabilityDetails.cweId, + cvss, + member.vulnerabilityDetails.compliances, + member.vulnerabilityDetails.cvssScore, + member.vulnerabilityDetails.cveName + ); + const nodes: CxNode[] = member.data.nodes?.map((node: any) => { + return new CxNode( + node.id, + node.line, + node.name, + node.column, + node.length, + node.method, + node.nodeID, + node.domType, + node.fileName, + node.fullName, + node.typeName, + node.methodLine, + node.definitions + ); + }); + const cxPackageData: CxPackageData[] = member.data.packageData?.map((packages: any) => { + return new CxPackageData(packages.comment, packages.type, packages.url); + }); + const data = new CxData( + cxPackageData, + member.data.packageIdentifier, + cxScaPackageData, + member.data.queryId, + member.data.queryName, + member.data.group, + member.data.resultHash, + member.data.languageName, + nodes, + member.data.recommendedVersion + ); + return new CxResult( + member.type, + member.label, + member.id, + member.status, + member.alternateId, + member.similarityId, + member.state, + member.severity, + member.created, + member.firstFoundAt, + member.foundAt, + member.firstScanId, + member.description, + data, + member.comments, + cxVulnerabilityDetails, + member.descriptionHTML, + member.riskScore, + member.traits + ); }); + cxCommandOutput.payload = r; + } else { + cxCommandOutput.exitCode = 1; + cxCommandOutput.status = 'Error in the json file.'; + } } - - async executeResultsCommandsFile(scanId: string, resultType: string, fileExtension: string, commands: string[], pathToExecutable: string, fileName: string): Promise { - const filePath = path.join(os.tmpdir(), fileName + fileExtension) - const read = fs.readFileSync(filePath, 'utf8'); - const cxCommandOutput = new CxCommandOutput(); - // Need to check if file output is json or html - if (fileExtension.includes("json")) { - const read_json = JSON.parse(read.replace(/:([0-9]{15,}),/g, ':"$1",')); - if (read_json.results) { - const r: CxResult[] = read_json.results.map((member: any) => { - const cxScaPackageData = new CxScaPackageData(member.data.scaPackageData?.id, member.data.scaPackageData?.locations, member.data.scaPackageData?.dependencyPaths, member.data.scaPackageData?.outdated, member.data.scaPackageData?.fixLink, member.data.scaPackageData?.supportsQuickFix, member.data.scaPackageData?.typeOfDependency); - const cvss = new CxCvss(member.vulnerabilityDetails.cvss.version, member.vulnerabilityDetails.cvss.attackVector, member.vulnerabilityDetails.cvss.availability, member.vulnerabilityDetails.cvss.confidentiality, member.vulnerabilityDetails.cvss.attackComplexity, member.vulnerabilityDetails.cvss.integrityImpact, member.vulnerabilityDetails.cvss.scope, member.vulnerabilityDetails.cvss.privilegesRequired, member.vulnerabilityDetails.cvss.userInteraction); - const cxVulnerabilityDetails = new CxVulnerabilityDetails(member.vulnerabilityDetails.cweId, cvss, member.vulnerabilityDetails.compliances, member.vulnerabilityDetails.cvssScore, member.vulnerabilityDetails.cveName); - const nodes: CxNode[] = member.data.nodes?.map((node: any) => { - return new CxNode(node.id, node.line, node.name, node.column, node.length, node.method, node.nodeID, node.domType, node.fileName, node.fullName, node.typeName, node.methodLine, node.definitions) - }); - const cxPackageData: CxPackageData[] = member.data.packageData?.map((packages: any) => { - return new CxPackageData(packages.comment, packages.type, packages.url); - }); - const data = new CxData(cxPackageData, member.data.packageIdentifier, cxScaPackageData, member.data.queryId, member.data.queryName, member.data.group, member.data.resultHash, member.data.languageName, nodes, member.data.recommendedVersion); - return new CxResult(member.type, member.label, member.id, member.status, member.alternateId, member.similarityId, member.state, member.severity, member.created, member.firstFoundAt, member.foundAt, member.firstScanId, member.description, data, member.comments, cxVulnerabilityDetails, member.descriptionHTML,member.riskScore,member.traits); - }); - cxCommandOutput.payload = r; - } else { - cxCommandOutput.exitCode = 1; - cxCommandOutput.status = "Error in the json file." - } - } - // In case of html output - else { - const html_arrray: string[] = [] - html_arrray.push(read) - cxCommandOutput.payload = html_arrray; - } - return cxCommandOutput; + // In case of html output + else { + const html_arrray: string[] = []; + html_arrray.push(read); + cxCommandOutput.payload = html_arrray; } + return cxCommandOutput; + } } From 87c9460b45c98ce95ea433df81975e520233c5f1 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Thu, 15 Jan 2026 09:57:25 +0200 Subject: [PATCH 06/12] fix command name --- src/main/wrapper/CxConstants.ts | 2 +- src/main/wrapper/CxWrapper.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 6aed8a6..9f495bc 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -30,7 +30,7 @@ export enum CxConstants { CMD_AUTH = 'auth', SUB_CMD_VALIDATE = 'validate', CMD_PROJECT = 'project', - CMD_ENVIRONMENTS = 'environments', + CMD_DAST_ENVIRONMENTS = 'dast-environments', SUB_CMD_BRANCHES = 'branches', CMD_SCAN = 'scan', SUB_CMD_SHOW = 'show', diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 7d83adc..fd99bad 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -277,7 +277,9 @@ export class CxWrapper { async environmentsList(filters: string): Promise { const validated_filters = this.filterArguments(filters); - const commands: string[] = ([CxConstants.CMD_ENVIRONMENTS, CxConstants.SUB_CMD_LIST] as string[]).concat(validated_filters); + const commands: string[] = ([CxConstants.CMD_DAST_ENVIRONMENTS, CxConstants.SUB_CMD_LIST] as string[]).concat( + validated_filters + ); commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.DAST_ENVIRONMENT_TYPE); From 9a0013fd146b1b0a7de0edd883708ecb8a8d4656 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Thu, 15 Jan 2026 09:58:01 +0200 Subject: [PATCH 07/12] rename function --- src/main/wrapper/CxWrapper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index fd99bad..6e2d4d1 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -275,7 +275,7 @@ export class CxWrapper { return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } - async environmentsList(filters: string): Promise { + async dastEnvironmentsList(filters: string): Promise { const validated_filters = this.filterArguments(filters); const commands: string[] = ([CxConstants.CMD_DAST_ENVIRONMENTS, CxConstants.SUB_CMD_LIST] as string[]).concat( validated_filters From 0034f676a38a44e69aada9ecc29d489f89f2c0ad Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Thu, 15 Jan 2026 10:28:56 +0200 Subject: [PATCH 08/12] restore tab size --- src/main/wrapper/CxConstants.ts | 266 ++++++++++++++++---------------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 9f495bc..8345abe 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -1,135 +1,135 @@ export enum CxConstants { - VULNERABILITIES = '--vulnerability-identifiers', - IGNORE__FILE_PATH = '--ignored-file-path', - SOURCE = '-s', - VERBOSE = '-v', - PROJECT_NAME = '--project-name', - SCAN_TYPES_SUB_CMD = '--scan-type', - SCAN_TYPES = '--scan-types', - SAST_PRESET_NAME = '--sast-preset-name', - FILE_FILTER = '--file-filter', - AGENT = '--agent', - BRANCH = '--branch', - BRANCH_NAME = 'branch-name=', - CLIENT_ID = '--client-id', - CLIENT_SECRET = '--client-secret', - API_KEY = '--apikey', - TENANT = '--tenant', - BASE_URI = '--base-uri', - BASE_AUTH_URI = '--base-auth-uri', - CMD_UTILS = 'utils', - CMD_REMEDIATION = 'remediation', - SUB_CMD_REMEDIATION_SCA = 'sca', - SUB_CMD_TENANT = 'tenant', - KICS_REMEDIATION_RESULTS_FILE = '--results-file', - KICS_REMEDIATION_KICS_FILE = '--kics-files', - KICS_REMEDIATION_SIMILARITY_IDS = '--similarity-ids', - SCA_REMEDIATION_PACKAGE_FILES = '--package-files', - SCA_REMEDIATION_PACKAGE = '--package', - SCA_REMEDIATION_PACKAGE_VERSION = '--package-version', - CMD_AUTH = 'auth', - SUB_CMD_VALIDATE = 'validate', - CMD_PROJECT = 'project', - CMD_DAST_ENVIRONMENTS = 'dast-environments', - SUB_CMD_BRANCHES = 'branches', - CMD_SCAN = 'scan', - SUB_CMD_SHOW = 'show', - SUB_CMD_CANCEL = 'cancel', - SUB_CMD_LIST = 'list', - SUB_CMD_CREATE = 'create', - CMD_TRIAGE = 'triage', - SUB_CMD_UPDATE = 'update', - SUB_CMD_GET_STATES = 'get-states', - ALL_STATES_FLAG = '--all', - CMD_RESULT = 'results', - CMD_RISK_MANAGEMENT = 'risk-management', - CMD_LIMIT = '--limit', - SUB_CMD_BFL = 'bfl', - CMD_CODE_BASHING = 'codebashing', - CMD_KICS_REALTIME = 'kics-realtime', - CMD_SCA_REALTIME = 'sca-realtime', - CMD_SCA_REALTIME_PROJECT_DIR = '--project-dir', - CMD_CHAT = 'chat', - KICS = 'kics', - CMD_CHAT_APIKEY = '--chat-apikey', - CMD_CHAT_FILE = '--result-file', - CMD_CHAT_LINE = '--result-line', - CMD_CHAT_SEVERITY = '--result-severity', - CMD_CHAT_VULNERABILITY = '--result-vulnerability', - CMD_CHAT_INPUT = '--user-input', - CMD_CHAT_CONVERSATION_ID = '--conversation-id', - CMD_CHAT_MODEL = '--model', - CMD_MASK_SECRETS = 'mask', - CMD_SAST_CHAT_RESULT_ID = '--sast-result-id', - CMD_SAST_CHAT_RESULT_RESULTS_FILE = '--scan-results-file', - CMD_SAST_CHAT_RESULT_SOURCE_FILE = '--source-dir', - SCAN_INFO_FORMAT = '--scan-info-format', - FORMAT = '--format', - FORMAT_JSON = 'json', - FORMAT_HTML = 'html', - FORMAT_JSON_FILE = '.json', - FORMAT_HTML_FILE = '.html', - FORMAT_HTML_CLI = 'summaryHTML', - FILTER = '--filter', - SCAN_ID = '--scan-id', - CMD_ASCA = 'asca', - SOURCE_FILE = '--file-source', - ASCA_UPDATE_VERSION = '--asca-latest-version', - CMD_OSS = 'oss-realtime', - CMD_SECRETS = 'secrets-realtime', - CMD_CONTAINERS_REALTIME = 'containers-realtime', - CMD_IAC_REALTIME = 'iac-realtime', - PROJECT_ID = '--project-id', - SIMILARITY_ID = '--similarity-id', - QUERY_ID = '--query-id', - STATE = '--state', - STATE_ID = '--state-id', - COMMENT = '--comment', - SEVERITY = '--severity', - REPORT_FORMAT = '--report-format', - OUTPUT_NAME = '--output-name', - OUTPUT_PATH = '--output-path', - FILE_SOURCES = '--file', - ADDITONAL_PARAMS = '--additional-params', - ENGINE = '--engine', - SCAN_TYPE = 'CxScan', - SCAN_ASCA = 'CxAsca', - SCAN_OSS = 'CxOss', - SCAN_IAC = 'CxIac', - SCAN_SECRETS = 'CxSecrets', - SCAN_CONTAINERS_REALTIME = 'CxContainersRealtime', - PROJECT_TYPE = 'CxProject', - DAST_ENVIRONMENT_TYPE = 'CxDastEnvironment', - PREDICATE_TYPE = 'CxPredicate', - CODE_BASHING_TYPE = 'CxCodeBashing', - KICS_REALTIME_TYPE = 'CxKicsRealTime', - SCA_REALTIME_TYPE = 'CxScaRealTime', - CHAT_TYPE = 'CxChat', - MASK_TYPE = 'CxMask', - LEARN_MORE_DESCRIPTIONS_TYPE = 'CxLearnMoreDescriptions', - KICS_REMEDIATION_TYPE = 'CxKicsRemediation', - BFL_TYPE = 'CxBFL', - SAST = 'sast', - LANGUAGE = '--language', - VULNERABILITY_TYPE = '--vulnerability-type', - CWE_ID = '--cwe-id', - SEVERITY_HIGH = 'high', - SEVERITY_MEDIUM = 'medium', - STATE_CONFIRMED = 'confirmed', - CMD_LEARN_MORE = 'learn-more', - IDE_SCANS_KEY = 'scan.config.plugins.ideScans', - AI_GUIDED_REMEDIATION_KEY = 'scan.config.plugins.aiGuidedRemediation', - STANDALONE_KEY = 'scan.config.plugins.cxdevassist', - ASSIST_KEY = 'scan.config.plugins.cxoneassist', - DAST_ENABLED_KEY = 'scan.config.plugins.dastenabled', - AI_MCP_SERVER_KEY = 'scan.config.plugins.aiMcpServer', - TELEMETRY = 'telemetry', - SUB_CMD_TELEMETRY_AI = 'ai', - AI_PROVIDER = '--ai-provider', - TYPE = '--type', - SUB_TYPE = '--sub-type', - PROBLEM_SEVERITY = '--problem-severity', - SCAN_TYPE_FLAG = '--scan-type', - STATUS = '--status', - TOTAL_COUNT = '--total-count', + VULNERABILITIES = '--vulnerability-identifiers', + IGNORE__FILE_PATH = '--ignored-file-path', + SOURCE = '-s', + VERBOSE = '-v', + PROJECT_NAME = '--project-name', + SCAN_TYPES_SUB_CMD = '--scan-type', + SCAN_TYPES = '--scan-types', + SAST_PRESET_NAME = '--sast-preset-name', + FILE_FILTER = '--file-filter', + AGENT = '--agent', + BRANCH = '--branch', + BRANCH_NAME = 'branch-name=', + CLIENT_ID = '--client-id', + CLIENT_SECRET = '--client-secret', + API_KEY = '--apikey', + TENANT = '--tenant', + BASE_URI = '--base-uri', + BASE_AUTH_URI = '--base-auth-uri', + CMD_UTILS = 'utils', + CMD_REMEDIATION = 'remediation', + SUB_CMD_REMEDIATION_SCA = 'sca', + SUB_CMD_TENANT = 'tenant', + KICS_REMEDIATION_RESULTS_FILE = '--results-file', + KICS_REMEDIATION_KICS_FILE = '--kics-files', + KICS_REMEDIATION_SIMILARITY_IDS = '--similarity-ids', + SCA_REMEDIATION_PACKAGE_FILES = '--package-files', + SCA_REMEDIATION_PACKAGE = '--package', + SCA_REMEDIATION_PACKAGE_VERSION = '--package-version', + CMD_AUTH = 'auth', + SUB_CMD_VALIDATE = 'validate', + CMD_PROJECT = 'project', + CMD_DAST_ENVIRONMENTS = 'dast-environments', + SUB_CMD_BRANCHES = 'branches', + CMD_SCAN = 'scan', + SUB_CMD_SHOW = 'show', + SUB_CMD_CANCEL = 'cancel', + SUB_CMD_LIST = 'list', + SUB_CMD_CREATE = 'create', + CMD_TRIAGE = 'triage', + SUB_CMD_UPDATE = 'update', + SUB_CMD_GET_STATES = 'get-states', + ALL_STATES_FLAG = '--all', + CMD_RESULT = 'results', + CMD_RISK_MANAGEMENT = 'risk-management', + CMD_LIMIT = '--limit', + SUB_CMD_BFL = 'bfl', + CMD_CODE_BASHING = 'codebashing', + CMD_KICS_REALTIME = 'kics-realtime', + CMD_SCA_REALTIME = 'sca-realtime', + CMD_SCA_REALTIME_PROJECT_DIR = '--project-dir', + CMD_CHAT = 'chat', + KICS = 'kics', + CMD_CHAT_APIKEY = '--chat-apikey', + CMD_CHAT_FILE = '--result-file', + CMD_CHAT_LINE = '--result-line', + CMD_CHAT_SEVERITY = '--result-severity', + CMD_CHAT_VULNERABILITY = '--result-vulnerability', + CMD_CHAT_INPUT = '--user-input', + CMD_CHAT_CONVERSATION_ID = '--conversation-id', + CMD_CHAT_MODEL = '--model', + CMD_MASK_SECRETS = 'mask', + CMD_SAST_CHAT_RESULT_ID = '--sast-result-id', + CMD_SAST_CHAT_RESULT_RESULTS_FILE = '--scan-results-file', + CMD_SAST_CHAT_RESULT_SOURCE_FILE = '--source-dir', + SCAN_INFO_FORMAT = '--scan-info-format', + FORMAT = '--format', + FORMAT_JSON = 'json', + FORMAT_HTML = 'html', + FORMAT_JSON_FILE = '.json', + FORMAT_HTML_FILE = '.html', + FORMAT_HTML_CLI = 'summaryHTML', + FILTER = '--filter', + SCAN_ID = '--scan-id', + CMD_ASCA = 'asca', + SOURCE_FILE = '--file-source', + ASCA_UPDATE_VERSION = '--asca-latest-version', + CMD_OSS = 'oss-realtime', + CMD_SECRETS = 'secrets-realtime', + CMD_CONTAINERS_REALTIME = 'containers-realtime', + CMD_IAC_REALTIME = 'iac-realtime', + PROJECT_ID = '--project-id', + SIMILARITY_ID = '--similarity-id', + QUERY_ID = '--query-id', + STATE = '--state', + STATE_ID = '--state-id', + COMMENT = '--comment', + SEVERITY = '--severity', + REPORT_FORMAT = '--report-format', + OUTPUT_NAME = '--output-name', + OUTPUT_PATH = '--output-path', + FILE_SOURCES = '--file', + ADDITONAL_PARAMS = '--additional-params', + ENGINE = '--engine', + SCAN_TYPE = 'CxScan', + SCAN_ASCA = 'CxAsca', + SCAN_OSS = 'CxOss', + SCAN_IAC = 'CxIac', + SCAN_SECRETS = 'CxSecrets', + SCAN_CONTAINERS_REALTIME = 'CxContainersRealtime', + PROJECT_TYPE = 'CxProject', + DAST_ENVIRONMENT_TYPE = 'CxDastEnvironment', + PREDICATE_TYPE = 'CxPredicate', + CODE_BASHING_TYPE = 'CxCodeBashing', + KICS_REALTIME_TYPE = 'CxKicsRealTime', + SCA_REALTIME_TYPE = 'CxScaRealTime', + CHAT_TYPE = 'CxChat', + MASK_TYPE = 'CxMask', + LEARN_MORE_DESCRIPTIONS_TYPE = 'CxLearnMoreDescriptions', + KICS_REMEDIATION_TYPE = 'CxKicsRemediation', + BFL_TYPE = 'CxBFL', + SAST = 'sast', + LANGUAGE = '--language', + VULNERABILITY_TYPE = '--vulnerability-type', + CWE_ID = '--cwe-id', + SEVERITY_HIGH = 'high', + SEVERITY_MEDIUM = 'medium', + STATE_CONFIRMED = 'confirmed', + CMD_LEARN_MORE = 'learn-more', + IDE_SCANS_KEY = 'scan.config.plugins.ideScans', + AI_GUIDED_REMEDIATION_KEY = 'scan.config.plugins.aiGuidedRemediation', + STANDALONE_KEY = 'scan.config.plugins.cxdevassist', + ASSIST_KEY = 'scan.config.plugins.cxoneassist', + DAST_ENABLED_KEY = 'scan.config.plugins.dastenabled', + AI_MCP_SERVER_KEY = 'scan.config.plugins.aiMcpServer', + TELEMETRY = 'telemetry', + SUB_CMD_TELEMETRY_AI = 'ai', + AI_PROVIDER = '--ai-provider', + TYPE = '--type', + SUB_TYPE = '--sub-type', + PROBLEM_SEVERITY = '--problem-severity', + SCAN_TYPE_FLAG = '--scan-type', + STATUS = '--status', + TOTAL_COUNT = '--total-count', } From 8ffed870b0d44dd57908f95dcd4bd22b6c4adc22 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Thu, 15 Jan 2026 10:29:41 +0200 Subject: [PATCH 09/12] restore spaces --- src/main/wrapper/CxConstants.ts | 266 ++++++++++++++++---------------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 8345abe..6c68212 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -1,135 +1,135 @@ export enum CxConstants { - VULNERABILITIES = '--vulnerability-identifiers', - IGNORE__FILE_PATH = '--ignored-file-path', - SOURCE = '-s', - VERBOSE = '-v', - PROJECT_NAME = '--project-name', - SCAN_TYPES_SUB_CMD = '--scan-type', - SCAN_TYPES = '--scan-types', - SAST_PRESET_NAME = '--sast-preset-name', - FILE_FILTER = '--file-filter', - AGENT = '--agent', - BRANCH = '--branch', - BRANCH_NAME = 'branch-name=', - CLIENT_ID = '--client-id', - CLIENT_SECRET = '--client-secret', - API_KEY = '--apikey', - TENANT = '--tenant', - BASE_URI = '--base-uri', - BASE_AUTH_URI = '--base-auth-uri', - CMD_UTILS = 'utils', - CMD_REMEDIATION = 'remediation', - SUB_CMD_REMEDIATION_SCA = 'sca', - SUB_CMD_TENANT = 'tenant', - KICS_REMEDIATION_RESULTS_FILE = '--results-file', - KICS_REMEDIATION_KICS_FILE = '--kics-files', - KICS_REMEDIATION_SIMILARITY_IDS = '--similarity-ids', - SCA_REMEDIATION_PACKAGE_FILES = '--package-files', - SCA_REMEDIATION_PACKAGE = '--package', - SCA_REMEDIATION_PACKAGE_VERSION = '--package-version', - CMD_AUTH = 'auth', - SUB_CMD_VALIDATE = 'validate', - CMD_PROJECT = 'project', - CMD_DAST_ENVIRONMENTS = 'dast-environments', - SUB_CMD_BRANCHES = 'branches', - CMD_SCAN = 'scan', - SUB_CMD_SHOW = 'show', - SUB_CMD_CANCEL = 'cancel', - SUB_CMD_LIST = 'list', - SUB_CMD_CREATE = 'create', - CMD_TRIAGE = 'triage', - SUB_CMD_UPDATE = 'update', - SUB_CMD_GET_STATES = 'get-states', - ALL_STATES_FLAG = '--all', - CMD_RESULT = 'results', - CMD_RISK_MANAGEMENT = 'risk-management', - CMD_LIMIT = '--limit', - SUB_CMD_BFL = 'bfl', - CMD_CODE_BASHING = 'codebashing', - CMD_KICS_REALTIME = 'kics-realtime', - CMD_SCA_REALTIME = 'sca-realtime', - CMD_SCA_REALTIME_PROJECT_DIR = '--project-dir', - CMD_CHAT = 'chat', - KICS = 'kics', - CMD_CHAT_APIKEY = '--chat-apikey', - CMD_CHAT_FILE = '--result-file', - CMD_CHAT_LINE = '--result-line', - CMD_CHAT_SEVERITY = '--result-severity', - CMD_CHAT_VULNERABILITY = '--result-vulnerability', - CMD_CHAT_INPUT = '--user-input', - CMD_CHAT_CONVERSATION_ID = '--conversation-id', - CMD_CHAT_MODEL = '--model', - CMD_MASK_SECRETS = 'mask', - CMD_SAST_CHAT_RESULT_ID = '--sast-result-id', - CMD_SAST_CHAT_RESULT_RESULTS_FILE = '--scan-results-file', - CMD_SAST_CHAT_RESULT_SOURCE_FILE = '--source-dir', - SCAN_INFO_FORMAT = '--scan-info-format', - FORMAT = '--format', - FORMAT_JSON = 'json', - FORMAT_HTML = 'html', - FORMAT_JSON_FILE = '.json', - FORMAT_HTML_FILE = '.html', - FORMAT_HTML_CLI = 'summaryHTML', - FILTER = '--filter', - SCAN_ID = '--scan-id', - CMD_ASCA = 'asca', - SOURCE_FILE = '--file-source', - ASCA_UPDATE_VERSION = '--asca-latest-version', - CMD_OSS = 'oss-realtime', - CMD_SECRETS = 'secrets-realtime', - CMD_CONTAINERS_REALTIME = 'containers-realtime', - CMD_IAC_REALTIME = 'iac-realtime', - PROJECT_ID = '--project-id', - SIMILARITY_ID = '--similarity-id', - QUERY_ID = '--query-id', - STATE = '--state', - STATE_ID = '--state-id', - COMMENT = '--comment', - SEVERITY = '--severity', - REPORT_FORMAT = '--report-format', - OUTPUT_NAME = '--output-name', - OUTPUT_PATH = '--output-path', - FILE_SOURCES = '--file', - ADDITONAL_PARAMS = '--additional-params', - ENGINE = '--engine', - SCAN_TYPE = 'CxScan', - SCAN_ASCA = 'CxAsca', - SCAN_OSS = 'CxOss', - SCAN_IAC = 'CxIac', - SCAN_SECRETS = 'CxSecrets', - SCAN_CONTAINERS_REALTIME = 'CxContainersRealtime', - PROJECT_TYPE = 'CxProject', - DAST_ENVIRONMENT_TYPE = 'CxDastEnvironment', - PREDICATE_TYPE = 'CxPredicate', - CODE_BASHING_TYPE = 'CxCodeBashing', - KICS_REALTIME_TYPE = 'CxKicsRealTime', - SCA_REALTIME_TYPE = 'CxScaRealTime', - CHAT_TYPE = 'CxChat', - MASK_TYPE = 'CxMask', - LEARN_MORE_DESCRIPTIONS_TYPE = 'CxLearnMoreDescriptions', - KICS_REMEDIATION_TYPE = 'CxKicsRemediation', - BFL_TYPE = 'CxBFL', - SAST = 'sast', - LANGUAGE = '--language', - VULNERABILITY_TYPE = '--vulnerability-type', - CWE_ID = '--cwe-id', - SEVERITY_HIGH = 'high', - SEVERITY_MEDIUM = 'medium', - STATE_CONFIRMED = 'confirmed', - CMD_LEARN_MORE = 'learn-more', - IDE_SCANS_KEY = 'scan.config.plugins.ideScans', - AI_GUIDED_REMEDIATION_KEY = 'scan.config.plugins.aiGuidedRemediation', - STANDALONE_KEY = 'scan.config.plugins.cxdevassist', - ASSIST_KEY = 'scan.config.plugins.cxoneassist', - DAST_ENABLED_KEY = 'scan.config.plugins.dastenabled', - AI_MCP_SERVER_KEY = 'scan.config.plugins.aiMcpServer', - TELEMETRY = 'telemetry', - SUB_CMD_TELEMETRY_AI = 'ai', - AI_PROVIDER = '--ai-provider', - TYPE = '--type', - SUB_TYPE = '--sub-type', - PROBLEM_SEVERITY = '--problem-severity', - SCAN_TYPE_FLAG = '--scan-type', - STATUS = '--status', - TOTAL_COUNT = '--total-count', + VULNERABILITIES = '--vulnerability-identifiers', + IGNORE__FILE_PATH = '--ignored-file-path', + SOURCE = '-s', + VERBOSE = '-v', + PROJECT_NAME = '--project-name', + SCAN_TYPES_SUB_CMD = '--scan-type', + SCAN_TYPES = '--scan-types', + SAST_PRESET_NAME = '--sast-preset-name', + FILE_FILTER = '--file-filter', + AGENT = '--agent', + BRANCH = '--branch', + BRANCH_NAME = 'branch-name=', + CLIENT_ID = '--client-id', + CLIENT_SECRET = '--client-secret', + API_KEY = '--apikey', + TENANT = '--tenant', + BASE_URI = '--base-uri', + BASE_AUTH_URI = '--base-auth-uri', + CMD_UTILS = 'utils', + CMD_REMEDIATION = 'remediation', + SUB_CMD_REMEDIATION_SCA = 'sca', + SUB_CMD_TENANT = 'tenant', + KICS_REMEDIATION_RESULTS_FILE = '--results-file', + KICS_REMEDIATION_KICS_FILE = '--kics-files', + KICS_REMEDIATION_SIMILARITY_IDS = '--similarity-ids', + SCA_REMEDIATION_PACKAGE_FILES = '--package-files', + SCA_REMEDIATION_PACKAGE = '--package', + SCA_REMEDIATION_PACKAGE_VERSION = '--package-version', + CMD_AUTH = 'auth', + SUB_CMD_VALIDATE = 'validate', + CMD_PROJECT = 'project', + CMD_DAST_ENVIRONMENTS = 'dast-environments', + SUB_CMD_BRANCHES = 'branches', + CMD_SCAN = 'scan', + SUB_CMD_SHOW = 'show', + SUB_CMD_CANCEL = 'cancel', + SUB_CMD_LIST = 'list', + SUB_CMD_CREATE = 'create', + CMD_TRIAGE = 'triage', + SUB_CMD_UPDATE = 'update', + SUB_CMD_GET_STATES = 'get-states', + ALL_STATES_FLAG = '--all', + CMD_RESULT = 'results', + CMD_RISK_MANAGEMENT = 'risk-management', + CMD_LIMIT = '--limit', + SUB_CMD_BFL = 'bfl', + CMD_CODE_BASHING = 'codebashing', + CMD_KICS_REALTIME = 'kics-realtime', + CMD_SCA_REALTIME = 'sca-realtime', + CMD_SCA_REALTIME_PROJECT_DIR = '--project-dir', + CMD_CHAT = 'chat', + KICS = 'kics', + CMD_CHAT_APIKEY = '--chat-apikey', + CMD_CHAT_FILE = '--result-file', + CMD_CHAT_LINE = '--result-line', + CMD_CHAT_SEVERITY = '--result-severity', + CMD_CHAT_VULNERABILITY = '--result-vulnerability', + CMD_CHAT_INPUT = '--user-input', + CMD_CHAT_CONVERSATION_ID = '--conversation-id', + CMD_CHAT_MODEL = '--model', + CMD_MASK_SECRETS = 'mask', + CMD_SAST_CHAT_RESULT_ID = '--sast-result-id', + CMD_SAST_CHAT_RESULT_RESULTS_FILE = '--scan-results-file', + CMD_SAST_CHAT_RESULT_SOURCE_FILE = '--source-dir', + SCAN_INFO_FORMAT = '--scan-info-format', + FORMAT = '--format', + FORMAT_JSON = 'json', + FORMAT_HTML = 'html', + FORMAT_JSON_FILE = '.json', + FORMAT_HTML_FILE = '.html', + FORMAT_HTML_CLI = 'summaryHTML', + FILTER = '--filter', + SCAN_ID = '--scan-id', + CMD_ASCA = 'asca', + SOURCE_FILE = '--file-source', + ASCA_UPDATE_VERSION = '--asca-latest-version', + CMD_OSS = 'oss-realtime', + CMD_SECRETS = 'secrets-realtime', + CMD_CONTAINERS_REALTIME = 'containers-realtime', + CMD_IAC_REALTIME = 'iac-realtime', + PROJECT_ID = '--project-id', + SIMILARITY_ID = '--similarity-id', + QUERY_ID = '--query-id', + STATE = '--state', + STATE_ID = '--state-id', + COMMENT = '--comment', + SEVERITY = '--severity', + REPORT_FORMAT = '--report-format', + OUTPUT_NAME = '--output-name', + OUTPUT_PATH = '--output-path', + FILE_SOURCES = '--file', + ADDITONAL_PARAMS = '--additional-params', + ENGINE = '--engine', + SCAN_TYPE = 'CxScan', + SCAN_ASCA = 'CxAsca', + SCAN_OSS = 'CxOss', + SCAN_IAC = 'CxIac', + SCAN_SECRETS = 'CxSecrets', + SCAN_CONTAINERS_REALTIME = 'CxContainersRealtime', + PROJECT_TYPE = 'CxProject', + DAST_ENVIRONMENT_TYPE = 'CxDastEnvironment', + PREDICATE_TYPE = 'CxPredicate', + CODE_BASHING_TYPE = 'CxCodeBashing', + KICS_REALTIME_TYPE = 'CxKicsRealTime', + SCA_REALTIME_TYPE = 'CxScaRealTime', + CHAT_TYPE = 'CxChat', + MASK_TYPE = 'CxMask', + LEARN_MORE_DESCRIPTIONS_TYPE = 'CxLearnMoreDescriptions', + KICS_REMEDIATION_TYPE = 'CxKicsRemediation', + BFL_TYPE = 'CxBFL', + SAST = 'sast', + LANGUAGE = '--language', + VULNERABILITY_TYPE = '--vulnerability-type', + CWE_ID = '--cwe-id', + SEVERITY_HIGH = 'high', + SEVERITY_MEDIUM = 'medium', + STATE_CONFIRMED = 'confirmed', + CMD_LEARN_MORE = 'learn-more', + IDE_SCANS_KEY = 'scan.config.plugins.ideScans', + AI_GUIDED_REMEDIATION_KEY = 'scan.config.plugins.aiGuidedRemediation', + STANDALONE_KEY = 'scan.config.plugins.cxdevassist', + ASSIST_KEY = 'scan.config.plugins.cxoneassist', + DAST_ENABLED_KEY = 'scan.config.plugins.dastenabled', + AI_MCP_SERVER_KEY = 'scan.config.plugins.aiMcpServer', + TELEMETRY = 'telemetry', + SUB_CMD_TELEMETRY_AI = 'ai', + AI_PROVIDER = '--ai-provider', + TYPE = '--type', + SUB_TYPE = '--sub-type', + PROBLEM_SEVERITY = '--problem-severity', + SCAN_TYPE_FLAG = '--scan-type', + STATUS = '--status', + TOTAL_COUNT = '--total-count', } From ffed78d9494bc23714428cca39128654aa42f539 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Thu, 15 Jan 2026 10:36:51 +0200 Subject: [PATCH 10/12] try to restore spaces --- src/main/wrapper/CxConstants.ts | 263 ++++++++++++++++---------------- 1 file changed, 131 insertions(+), 132 deletions(-) diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 6c68212..d2e003b 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -1,135 +1,134 @@ export enum CxConstants { - VULNERABILITIES = '--vulnerability-identifiers', - IGNORE__FILE_PATH = '--ignored-file-path', - SOURCE = '-s', - VERBOSE = '-v', - PROJECT_NAME = '--project-name', - SCAN_TYPES_SUB_CMD = '--scan-type', - SCAN_TYPES = '--scan-types', - SAST_PRESET_NAME = '--sast-preset-name', - FILE_FILTER = '--file-filter', - AGENT = '--agent', - BRANCH = '--branch', - BRANCH_NAME = 'branch-name=', - CLIENT_ID = '--client-id', - CLIENT_SECRET = '--client-secret', - API_KEY = '--apikey', - TENANT = '--tenant', - BASE_URI = '--base-uri', - BASE_AUTH_URI = '--base-auth-uri', - CMD_UTILS = 'utils', - CMD_REMEDIATION = 'remediation', - SUB_CMD_REMEDIATION_SCA = 'sca', - SUB_CMD_TENANT = 'tenant', - KICS_REMEDIATION_RESULTS_FILE = '--results-file', - KICS_REMEDIATION_KICS_FILE = '--kics-files', - KICS_REMEDIATION_SIMILARITY_IDS = '--similarity-ids', - SCA_REMEDIATION_PACKAGE_FILES = '--package-files', - SCA_REMEDIATION_PACKAGE = '--package', - SCA_REMEDIATION_PACKAGE_VERSION = '--package-version', - CMD_AUTH = 'auth', - SUB_CMD_VALIDATE = 'validate', - CMD_PROJECT = 'project', - CMD_DAST_ENVIRONMENTS = 'dast-environments', - SUB_CMD_BRANCHES = 'branches', - CMD_SCAN = 'scan', - SUB_CMD_SHOW = 'show', - SUB_CMD_CANCEL = 'cancel', - SUB_CMD_LIST = 'list', - SUB_CMD_CREATE = 'create', - CMD_TRIAGE = 'triage', - SUB_CMD_UPDATE = 'update', - SUB_CMD_GET_STATES = 'get-states', - ALL_STATES_FLAG = '--all', - CMD_RESULT = 'results', - CMD_RISK_MANAGEMENT = 'risk-management', - CMD_LIMIT = '--limit', - SUB_CMD_BFL = 'bfl', - CMD_CODE_BASHING = 'codebashing', - CMD_KICS_REALTIME = 'kics-realtime', - CMD_SCA_REALTIME = 'sca-realtime', - CMD_SCA_REALTIME_PROJECT_DIR = '--project-dir', - CMD_CHAT = 'chat', - KICS = 'kics', - CMD_CHAT_APIKEY = '--chat-apikey', - CMD_CHAT_FILE = '--result-file', - CMD_CHAT_LINE = '--result-line', - CMD_CHAT_SEVERITY = '--result-severity', - CMD_CHAT_VULNERABILITY = '--result-vulnerability', - CMD_CHAT_INPUT = '--user-input', - CMD_CHAT_CONVERSATION_ID = '--conversation-id', - CMD_CHAT_MODEL = '--model', - CMD_MASK_SECRETS = 'mask', - CMD_SAST_CHAT_RESULT_ID = '--sast-result-id', - CMD_SAST_CHAT_RESULT_RESULTS_FILE = '--scan-results-file', - CMD_SAST_CHAT_RESULT_SOURCE_FILE = '--source-dir', - SCAN_INFO_FORMAT = '--scan-info-format', - FORMAT = '--format', - FORMAT_JSON = 'json', - FORMAT_HTML = 'html', - FORMAT_JSON_FILE = '.json', - FORMAT_HTML_FILE = '.html', - FORMAT_HTML_CLI = 'summaryHTML', - FILTER = '--filter', - SCAN_ID = '--scan-id', - CMD_ASCA = 'asca', - SOURCE_FILE = '--file-source', - ASCA_UPDATE_VERSION = '--asca-latest-version', - CMD_OSS = 'oss-realtime', - CMD_SECRETS = 'secrets-realtime', - CMD_CONTAINERS_REALTIME = 'containers-realtime', - CMD_IAC_REALTIME = 'iac-realtime', - PROJECT_ID = '--project-id', - SIMILARITY_ID = '--similarity-id', - QUERY_ID = '--query-id', - STATE = '--state', - STATE_ID = '--state-id', - COMMENT = '--comment', - SEVERITY = '--severity', - REPORT_FORMAT = '--report-format', - OUTPUT_NAME = '--output-name', - OUTPUT_PATH = '--output-path', - FILE_SOURCES = '--file', - ADDITONAL_PARAMS = '--additional-params', - ENGINE = '--engine', - SCAN_TYPE = 'CxScan', - SCAN_ASCA = 'CxAsca', - SCAN_OSS = 'CxOss', - SCAN_IAC = 'CxIac', - SCAN_SECRETS = 'CxSecrets', - SCAN_CONTAINERS_REALTIME = 'CxContainersRealtime', - PROJECT_TYPE = 'CxProject', + VULNERABILITIES = "--vulnerability-identifiers", + IGNORE__FILE_PATH = "--ignored-file-path", + SOURCE = "-s", + VERBOSE = "-v", + PROJECT_NAME = "--project-name", + SCAN_TYPES_SUB_CMD = "--scan-type", + SCAN_TYPES = "--scan-types", + SAST_PRESET_NAME = "--sast-preset-name", + FILE_FILTER = "--file-filter", + AGENT = "--agent", + BRANCH = "--branch", + BRANCH_NAME = "branch-name=", + CLIENT_ID = "--client-id", + CLIENT_SECRET = "--client-secret", + API_KEY = "--apikey", + TENANT = "--tenant", + BASE_URI = "--base-uri", + BASE_AUTH_URI = "--base-auth-uri", + CMD_UTILS = "utils", + CMD_REMEDIATION = "remediation", + SUB_CMD_REMEDIATION_SCA = "sca", + SUB_CMD_TENANT = "tenant", + KICS_REMEDIATION_RESULTS_FILE = "--results-file", + KICS_REMEDIATION_KICS_FILE = "--kics-files", + KICS_REMEDIATION_SIMILARITY_IDS = "--similarity-ids", + SCA_REMEDIATION_PACKAGE_FILES = "--package-files", + SCA_REMEDIATION_PACKAGE = "--package", + SCA_REMEDIATION_PACKAGE_VERSION = "--package-version", + CMD_AUTH = "auth", + SUB_CMD_VALIDATE = "validate", + CMD_PROJECT = "project", + SUB_CMD_BRANCHES = "branches", + CMD_SCAN = "scan", + SUB_CMD_SHOW = "show", + SUB_CMD_CANCEL = "cancel", + SUB_CMD_LIST = "list", + SUB_CMD_CREATE = "create", + CMD_TRIAGE = "triage", + SUB_CMD_UPDATE = "update", + SUB_CMD_GET_STATES = "get-states", + ALL_STATES_FLAG = "--all", + CMD_RESULT = "results", + CMD_RISK_MANAGEMENT = "risk-management", + CMD_LIMIT = "--limit", + SUB_CMD_BFL = "bfl", + CMD_CODE_BASHING = "codebashing", + CMD_KICS_REALTIME = "kics-realtime", + CMD_SCA_REALTIME = "sca-realtime", + CMD_SCA_REALTIME_PROJECT_DIR = "--project-dir", + CMD_CHAT = "chat", + KICS = "kics", + CMD_CHAT_APIKEY = "--chat-apikey", + CMD_CHAT_FILE = "--result-file", + CMD_CHAT_LINE = "--result-line", + CMD_CHAT_SEVERITY = "--result-severity", + CMD_CHAT_VULNERABILITY = "--result-vulnerability", + CMD_CHAT_INPUT = "--user-input", + CMD_CHAT_CONVERSATION_ID = "--conversation-id", + CMD_CHAT_MODEL = "--model", + CMD_MASK_SECRETS = "mask", + CMD_SAST_CHAT_RESULT_ID = "--sast-result-id", + CMD_SAST_CHAT_RESULT_RESULTS_FILE = "--scan-results-file", + CMD_SAST_CHAT_RESULT_SOURCE_FILE = "--source-dir", + SCAN_INFO_FORMAT = "--scan-info-format", + FORMAT = "--format", + FORMAT_JSON = "json", + FORMAT_HTML = "html", + FORMAT_JSON_FILE = ".json", + FORMAT_HTML_FILE = ".html", + FORMAT_HTML_CLI = "summaryHTML", + FILTER = "--filter", + SCAN_ID = "--scan-id", + CMD_ASCA = "asca", + SOURCE_FILE = "--file-source", + ASCA_UPDATE_VERSION = "--asca-latest-version", + CMD_OSS = "oss-realtime", + CMD_SECRETS = "secrets-realtime", + CMD_CONTAINERS_REALTIME = "containers-realtime", + CMD_IAC_REALTIME = "iac-realtime", + PROJECT_ID = "--project-id", + SIMILARITY_ID = "--similarity-id", + QUERY_ID = "--query-id", + STATE = "--state", + STATE_ID = "--state-id", + COMMENT = "--comment", + SEVERITY = "--severity", + REPORT_FORMAT = "--report-format", + OUTPUT_NAME = "--output-name", + OUTPUT_PATH = "--output-path", + FILE_SOURCES = "--file", + ADDITONAL_PARAMS = "--additional-params", + ENGINE = "--engine", + SCAN_TYPE = "CxScan", + SCAN_ASCA = "CxAsca", + SCAN_OSS = "CxOss", + SCAN_IAC = "CxIac", + SCAN_SECRETS = "CxSecrets", + SCAN_CONTAINERS_REALTIME = "CxContainersRealtime", + PROJECT_TYPE = "CxProject", DAST_ENVIRONMENT_TYPE = 'CxDastEnvironment', - PREDICATE_TYPE = 'CxPredicate', - CODE_BASHING_TYPE = 'CxCodeBashing', - KICS_REALTIME_TYPE = 'CxKicsRealTime', - SCA_REALTIME_TYPE = 'CxScaRealTime', - CHAT_TYPE = 'CxChat', - MASK_TYPE = 'CxMask', - LEARN_MORE_DESCRIPTIONS_TYPE = 'CxLearnMoreDescriptions', - KICS_REMEDIATION_TYPE = 'CxKicsRemediation', - BFL_TYPE = 'CxBFL', - SAST = 'sast', - LANGUAGE = '--language', - VULNERABILITY_TYPE = '--vulnerability-type', - CWE_ID = '--cwe-id', - SEVERITY_HIGH = 'high', - SEVERITY_MEDIUM = 'medium', - STATE_CONFIRMED = 'confirmed', - CMD_LEARN_MORE = 'learn-more', - IDE_SCANS_KEY = 'scan.config.plugins.ideScans', - AI_GUIDED_REMEDIATION_KEY = 'scan.config.plugins.aiGuidedRemediation', - STANDALONE_KEY = 'scan.config.plugins.cxdevassist', - ASSIST_KEY = 'scan.config.plugins.cxoneassist', - DAST_ENABLED_KEY = 'scan.config.plugins.dastenabled', - AI_MCP_SERVER_KEY = 'scan.config.plugins.aiMcpServer', - TELEMETRY = 'telemetry', - SUB_CMD_TELEMETRY_AI = 'ai', - AI_PROVIDER = '--ai-provider', - TYPE = '--type', - SUB_TYPE = '--sub-type', - PROBLEM_SEVERITY = '--problem-severity', - SCAN_TYPE_FLAG = '--scan-type', - STATUS = '--status', - TOTAL_COUNT = '--total-count', + PREDICATE_TYPE = "CxPredicate", + CODE_BASHING_TYPE = "CxCodeBashing", + KICS_REALTIME_TYPE = "CxKicsRealTime", + SCA_REALTIME_TYPE = "CxScaRealTime", + CHAT_TYPE = "CxChat", + MASK_TYPE = "CxMask", + LEARN_MORE_DESCRIPTIONS_TYPE = "CxLearnMoreDescriptions", + KICS_REMEDIATION_TYPE = "CxKicsRemediation", + BFL_TYPE = "CxBFL", + SAST = "sast", + LANGUAGE = "--language", + VULNERABILITY_TYPE = "--vulnerability-type", + CWE_ID = "--cwe-id", + SEVERITY_HIGH = "high", + SEVERITY_MEDIUM = "medium", + STATE_CONFIRMED = "confirmed", + CMD_LEARN_MORE = "learn-more", + IDE_SCANS_KEY = "scan.config.plugins.ideScans", + AI_GUIDED_REMEDIATION_KEY = "scan.config.plugins.aiGuidedRemediation", + STANDALONE_KEY = "scan.config.plugins.cxdevassist", + ASSIST_KEY = "scan.config.plugins.cxoneassist", + DAST_ENABLED_KEY = "scan.config.plugins.dastenabled", + AI_MCP_SERVER_KEY = "scan.config.plugins.aiMcpServer", + TELEMETRY = "telemetry", + SUB_CMD_TELEMETRY_AI = "ai", + AI_PROVIDER = "--ai-provider", + TYPE = "--type", + SUB_TYPE = "--sub-type", + PROBLEM_SEVERITY = "--problem-severity", + SCAN_TYPE_FLAG = "--scan-type", + STATUS = "--status", + TOTAL_COUNT = "--total-count", } From ad5293e9b25cc9882679d07b1c207ff7994bc20a Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Thu, 15 Jan 2026 10:38:23 +0200 Subject: [PATCH 11/12] fix --- src/main/wrapper/CxConstants.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index d2e003b..421330b 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -30,6 +30,7 @@ export enum CxConstants { CMD_AUTH = "auth", SUB_CMD_VALIDATE = "validate", CMD_PROJECT = "project", + CMD_DAST_ENVIRONMENTS = 'dast-environments', SUB_CMD_BRANCHES = "branches", CMD_SCAN = "scan", SUB_CMD_SHOW = "show", From f9925f1ca915aacd71c56117c9814716e3b00961 Mon Sep 17 00:00:00 2001 From: Ronit Steinberg Date: Thu, 15 Jan 2026 10:40:55 +0200 Subject: [PATCH 12/12] fix --- src/main/wrapper/ExecutionService.ts | 631 ++++++++++++--------------- 1 file changed, 275 insertions(+), 356 deletions(-) diff --git a/src/main/wrapper/ExecutionService.ts b/src/main/wrapper/ExecutionService.ts index 9f46378..2ba9cd3 100644 --- a/src/main/wrapper/ExecutionService.ts +++ b/src/main/wrapper/ExecutionService.ts @@ -27,391 +27,310 @@ import CxOssResult from "../oss/CxOss"; import CxSecretsResult from "../secrets/CxSecrets"; import CxContainerRealtimeResult from "../containersRealtime/CxContainerRealtime"; import CxIacResult from "../iacRealtime/CxIac"; -import CxDastEnvironment from '../dast/CxDastEnvironment'; +import CxDastEnvironment from "../dast/CxDastEnvironment"; let skipValue = false; -const fileSourceFlag = '--file-source'; +const fileSourceFlag = "--file-source" function isJsonString(s: string) { - try { - const stringObject = s.split('\n')[0]; - JSON.parse(stringObject); - } catch (e) { - return false; - } - return true; + try { + const stringObject = s.split('\n')[0]; + JSON.parse(stringObject); + } catch (e) { + return false; + } + return true; } function transformation(commands: string[]): string[] { - skipValue = false; // Reset the flag before processing - const result: string[] = commands.map(transform); - return result; + skipValue = false; // Reset the flag before processing + const result: string[] = commands.map(transform); + return result; } function transform(n: string) { - // in case the file name looks like this: 'var express require('express');.js' we won't delete "'" - if (skipValue) { - skipValue = false; - let r = ''; - if (n) r = n.replace(/["]/g, '').replace('/[, ]/g', ','); - return r; - } - // If the current string is "--file-source", set the flag - if (n === fileSourceFlag) { - skipValue = true; - } - let r = ''; - if (n) r = n.replace(/["']/g, '').replace('/[, ]/g', ','); - return r; +// in case the file name looks like this: 'var express require('express');.js' we won't delete "'" + if (skipValue) { + skipValue = false; + let r = ""; + if (n) r = n.replace(/["]/g, "").replace("/[, ]/g", ","); + return r; + } + // If the current string is "--file-source", set the flag + if (n === fileSourceFlag) { + skipValue = true; + } + + let r = ""; + if (n) r = n.replace(/["']/g, "").replace("/[, ]/g", ","); + return r; } export class ExecutionService { - private fsObject: any = undefined; + private fsObject: any = undefined - executeCommands(pathToExecutable: string, commands: string[], output?: string): Promise { - return new Promise((resolve, reject) => { - let stderr = ''; - let stdout = ''; + executeCommands(pathToExecutable: string, commands: string[], output?: string): Promise { + return (new Promise((resolve, reject) => { + let stderr = ""; + let stdout = ""; - this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); - this.fsObject.on('error', (data: { toString: () => string }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - reject(); - }); - this.fsObject.on('exit', (code: number) => { - logger.info('Exit code received from AST-CLI: ' + code); - if (code == 1) { - stderr = stdout; - } - resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output)); - }); - this.fsObject.stdout.on('data', (data: { toString: () => string }) => { - if (data) { - logger.info(data.toString().replace('\n', '')); - stdout += data.toString(); - } - }); - this.fsObject.stderr.on('data', (data: { toString: () => string }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - }); - }); - } + this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); + this.fsObject.on('error', (data: { toString: () => string; }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + reject() + }); + this.fsObject.on('exit', (code: number) => { - executeKicsCommands(pathToExecutable: string, commands: string[], output?: string): [Promise, any] { - return [ - new Promise((resolve, reject) => { - let stderr = ''; - let stdout = ''; + logger.info("Exit code received from AST-CLI: " + code); + if (code == 1) { + stderr = stdout + } + resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output)); + }); + this.fsObject.stdout.on('data', (data: { toString: () => string; }) => { + if (data) { + logger.info(data.toString().replace('\n', '')); + stdout += data.toString(); + } + }); + this.fsObject.stderr.on('data', (data: { toString: () => string; }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + }); + })); + } - this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); - this.fsObject.on('error', (data: { toString: () => string }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - reject(); - }); - this.fsObject.on('exit', (code: number) => { - logger.info('Exit code received from AST-CLI: ' + code); - if (code == 1) { - stderr = stdout; - } - resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output)); - }); - this.fsObject.stdout.on('data', (data: { toString: () => string }) => { - if (data) { - logger.info(data.toString().replace('\n', '')); - stdout += data.toString(); - } - }); - this.fsObject.stderr.on('data', (data: { toString: () => string }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - }); - }), - this.fsObject, - ]; - } + executeKicsCommands(pathToExecutable: string, commands: string[], output?: string): [Promise, any] { + return [new Promise((resolve, reject) => { + let stderr = ""; + let stdout = ""; - executeMapTenantOutputCommands(pathToExecutable: string, commands: string[]): Promise> { - return new Promise((resolve, reject) => { - let stderr = ''; - let stdout = ''; + this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); + this.fsObject.on('error', (data: { toString: () => string; }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + reject() + }); + this.fsObject.on('exit', (code: number) => { + logger.info("Exit code received from AST-CLI: " + code); + if (code == 1) { + stderr = stdout + } + resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output)); + }); + this.fsObject.stdout.on('data', (data: { toString: () => string; }) => { + if (data) { + logger.info(data.toString().replace('\n', '')); + stdout += data.toString(); + } + }); + this.fsObject.stderr.on('data', (data: { toString: () => string; }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + }); + }), this.fsObject]; + } - this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); - this.fsObject.on('error', (data: { toString: () => string }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - reject(); - }); - this.fsObject.on('exit', (code: number) => { - logger.info('Exit code received from AST-CLI: ' + code); - if (code == 1) { - stderr = stdout; - reject(stderr); - } - resolve(ExecutionService.onCloseMapTenantOutputCommand(code, stderr, stdout)); - }); - this.fsObject.stdout.on('data', (data: { toString: () => string }) => { - if (data) { - logger.info(data.toString().replace('\n', '')); - stdout += data.toString(); - } - }); - this.fsObject.stderr.on('data', (data: { toString: () => string }) => { - if (data) { - logger.error(data.toString().replace('\n', '')); - stderr += data.toString(); - } - }); - }); - } + executeMapTenantOutputCommands(pathToExecutable: string, commands: string[]): Promise> { + return (new Promise((resolve, reject) => { + let stderr = ""; + let stdout = ""; - private static onCloseMapTenantOutputCommand(code: number, stderr: string, stdout: string): Map { - const result = new Map(); - if (code == 0) { - const tenantSettingsList = stdout.split('\n'); - tenantSettingsList.forEach((tenantSetting) => { - tenantSetting.includes('Key') - ? result.set( - tenantSetting.split(':')[1], - tenantSettingsList[tenantSettingsList.indexOf(tenantSetting) + 1].split(':')[1] - ) - : null; - }); - } else { - logger.error('Error occurred while executing command: ' + stderr); + this.fsObject = spawner.spawn(pathToExecutable, transformation(commands)); + this.fsObject.on('error', (data: { toString: () => string; }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + reject() + }); + this.fsObject.on('exit', (code: number) => { + logger.info("Exit code received from AST-CLI: " + code); + if (code == 1) { + stderr = stdout + reject(stderr) + } + resolve(ExecutionService.onCloseMapTenantOutputCommand(code, stderr, stdout)); + }); + this.fsObject.stdout.on('data', (data: { toString: () => string; }) => { + if (data) { + logger.info(data.toString().replace('\n', '')); + stdout += data.toString(); + } + }); + this.fsObject.stderr.on('data', (data: { toString: () => string; }) => { + if (data) { + logger.error(data.toString().replace('\n', '')); + stderr += data.toString(); + } + }); + })); } - return result; - } - private static onCloseCommand(code: number, stderr: string, stdout: string, output: string): CxCommandOutput { - const cxCommandOutput = new CxCommandOutput(); - cxCommandOutput.exitCode = code; - if (stderr) { - cxCommandOutput.status = stderr; - } - if (stdout) { - const stdoutSplit = stdout.split('\n'); - const data = stdoutSplit.find(isJsonString); - if (data) { - const resultObject = JSON.parse(data); - switch (output) { - case CxConstants.SCAN_TYPE: - const scans = CxScan.parseProject(resultObject); - cxCommandOutput.payload = scans; - break; - case CxConstants.SCAN_ASCA: - const asca = CxAsca.parseScan(resultObject); - cxCommandOutput.payload = [asca]; - break; - case CxConstants.SCAN_OSS: - const oss = CxOssResult.parseResult(resultObject); - cxCommandOutput.payload = [oss]; - break; - case CxConstants.SCAN_IAC: - const iac = CxIacResult.parseResult(resultObject); - cxCommandOutput.payload = [iac]; - break; - case CxConstants.SCAN_CONTAINERS_REALTIME: - const images = CxContainerRealtimeResult.parseResult(resultObject); - cxCommandOutput.payload = [images]; - break; - case CxConstants.SCAN_SECRETS: - const secrets = CxSecretsResult.parseResult(resultObject); - cxCommandOutput.payload = [secrets]; - break; - case CxConstants.PROJECT_TYPE: - const projects = CxProject.parseProject(resultObject); - cxCommandOutput.payload = projects; - break; - case CxConstants.DAST_ENVIRONMENT_TYPE: - const environments = CxDastEnvironment.parseDastEnvironment(resultObject); - cxCommandOutput.payload = environments; - break; - case CxConstants.CODE_BASHING_TYPE: - const codeBashing = CxCodeBashing.parseCodeBashing(resultObject); - cxCommandOutput.payload = codeBashing; - break; - case CxConstants.BFL_TYPE: - const bflNode = CxBFL.parseBFLResponse(resultObject); - cxCommandOutput.payload = bflNode; - break; - case CxConstants.KICS_REALTIME_TYPE: - const kicsResults = CxKicsRealTime.parseKicsRealTimeResponse(resultObject); - cxCommandOutput.payload = [kicsResults]; - break; - case CxConstants.SCA_REALTIME_TYPE: - const scaRealtimeResponse = CxScaRealTime.parseScaRealTimeResponse(resultObject); - cxCommandOutput.payload = [scaRealtimeResponse]; - break; - case CxConstants.LEARN_MORE_DESCRIPTIONS_TYPE: - const learnMore = CxLearnMoreDescriptions.parseLearnMoreDescriptionsResponse(resultObject); - cxCommandOutput.payload = learnMore; - break; - case CxConstants.KICS_REMEDIATION_TYPE: - const kicsRemediationOutput = CxKicsRemediation.parseKicsRemediation(resultObject); - cxCommandOutput.payload = [kicsRemediationOutput]; - break; - case CxConstants.CHAT_TYPE: - const chatOutput = CxChat.parseChat(resultObject); - cxCommandOutput.payload = [chatOutput]; - break; - case CxConstants.MASK_TYPE: - const maskOutput = CxMask.parseMask(resultObject); - cxCommandOutput.payload = [maskOutput]; - break; - default: - cxCommandOutput.payload = resultObject; + private static onCloseMapTenantOutputCommand(code: number, stderr: string, stdout: string): Map { + const result = new Map(); + if (code == 0) { + const tenantSettingsList = stdout.split('\n'); + tenantSettingsList.forEach(tenantSetting => { + tenantSetting.includes('Key') ? result.set(tenantSetting.split(':')[1], tenantSettingsList[tenantSettingsList.indexOf(tenantSetting) + 1].split(':')[1]) : null; + }); + } else { + logger.error("Error occurred while executing command: " + stderr); } - } + return result; } - return cxCommandOutput; - } - - executeResultsCommands(pathToExecutable: string, commands: string[]): Promise { - return new Promise(function (resolve, reject) { - let stderr = ''; - const cxCommandOutput = new CxCommandOutput(); - const cp = spawner.spawn(pathToExecutable, commands); - cp.stderr.on('data', function (chunk: string) { - stderr += chunk; - }); - cp.on('error', reject).on('close', function (code: number) { - logger.info('Exit code received from AST-CLI: ' + code); - logger.info(stderr); - cxCommandOutput.status = stderr; + private static onCloseCommand(code: number, stderr: string, stdout: string, output: string): CxCommandOutput { + const cxCommandOutput = new CxCommandOutput(); cxCommandOutput.exitCode = code; - resolve(cxCommandOutput); - }); - cp.stdout.on('data', (data: any) => { - logger.info(`${data}`); - cxCommandOutput.payload = data; - }); - }); - } + if (stderr) { + cxCommandOutput.status = stderr; + } + if (stdout) { + const stdoutSplit = stdout.split('\n'); + const data = stdoutSplit.find(isJsonString); + if (data) { + const resultObject = JSON.parse(data); + switch (output) { + case CxConstants.SCAN_TYPE: + const scans = CxScan.parseProject(resultObject); + cxCommandOutput.payload = scans; + break; + case CxConstants.SCAN_ASCA: + const asca = CxAsca.parseScan(resultObject); + cxCommandOutput.payload = [asca]; + break; + case CxConstants.SCAN_OSS: + const oss = CxOssResult.parseResult(resultObject); + cxCommandOutput.payload = [oss]; + break; + case CxConstants.SCAN_IAC: + const iac = CxIacResult.parseResult(resultObject); + cxCommandOutput.payload = [iac]; + break; + case CxConstants.SCAN_CONTAINERS_REALTIME: + const images = CxContainerRealtimeResult.parseResult(resultObject); + cxCommandOutput.payload = [images]; + break; + case CxConstants.SCAN_SECRETS: + const secrets = CxSecretsResult.parseResult(resultObject); + cxCommandOutput.payload = [secrets]; + break; + case CxConstants.PROJECT_TYPE: + const projects = CxProject.parseProject(resultObject); + cxCommandOutput.payload = projects; + break; + case CxConstants.DAST_ENVIRONMENT_TYPE: + const environments = CxDastEnvironment.parseDastEnvironment(resultObject); + cxCommandOutput.payload = environments; + break; + case CxConstants.CODE_BASHING_TYPE: + const codeBashing = CxCodeBashing.parseCodeBashing(resultObject); + cxCommandOutput.payload = codeBashing; + break; + case CxConstants.BFL_TYPE: + const bflNode = CxBFL.parseBFLResponse(resultObject); + cxCommandOutput.payload = bflNode; + break; + case CxConstants.KICS_REALTIME_TYPE: + const kicsResults = CxKicsRealTime.parseKicsRealTimeResponse(resultObject); + cxCommandOutput.payload = [kicsResults]; + break; + case CxConstants.SCA_REALTIME_TYPE: + const scaRealtimeResponse = CxScaRealTime.parseScaRealTimeResponse(resultObject); + cxCommandOutput.payload = [scaRealtimeResponse]; + break; + case CxConstants.LEARN_MORE_DESCRIPTIONS_TYPE: + const learnMore = CxLearnMoreDescriptions.parseLearnMoreDescriptionsResponse(resultObject); + cxCommandOutput.payload = learnMore; + break; + case CxConstants.KICS_REMEDIATION_TYPE: + const kicsRemediationOutput = CxKicsRemediation.parseKicsRemediation(resultObject); + cxCommandOutput.payload = [kicsRemediationOutput]; + break; + case CxConstants.CHAT_TYPE: + const chatOutput = CxChat.parseChat(resultObject); + cxCommandOutput.payload = [chatOutput]; + break; + case CxConstants.MASK_TYPE: + const maskOutput = CxMask.parseMask(resultObject); + cxCommandOutput.payload = [maskOutput]; + break; + default: + cxCommandOutput.payload = resultObject; + } + } + } + + return cxCommandOutput; + } - async executeResultsCommandsFile( - scanId: string, - resultType: string, - fileExtension: string, - commands: string[], - pathToExecutable: string, - fileName: string - ): Promise { - const filePath = path.join(os.tmpdir(), fileName + fileExtension); - const read = fs.readFileSync(filePath, 'utf8'); - const cxCommandOutput = new CxCommandOutput(); - // Need to check if file output is json or html - if (fileExtension.includes('json')) { - const read_json = JSON.parse(read.replace(/:([0-9]{15,}),/g, ':"$1",')); - if (read_json.results) { - const r: CxResult[] = read_json.results.map((member: any) => { - const cxScaPackageData = new CxScaPackageData( - member.data.scaPackageData?.id, - member.data.scaPackageData?.locations, - member.data.scaPackageData?.dependencyPaths, - member.data.scaPackageData?.outdated, - member.data.scaPackageData?.fixLink, - member.data.scaPackageData?.supportsQuickFix, - member.data.scaPackageData?.typeOfDependency - ); - const cvss = new CxCvss( - member.vulnerabilityDetails.cvss.version, - member.vulnerabilityDetails.cvss.attackVector, - member.vulnerabilityDetails.cvss.availability, - member.vulnerabilityDetails.cvss.confidentiality, - member.vulnerabilityDetails.cvss.attackComplexity, - member.vulnerabilityDetails.cvss.integrityImpact, - member.vulnerabilityDetails.cvss.scope, - member.vulnerabilityDetails.cvss.privilegesRequired, - member.vulnerabilityDetails.cvss.userInteraction - ); - const cxVulnerabilityDetails = new CxVulnerabilityDetails( - member.vulnerabilityDetails.cweId, - cvss, - member.vulnerabilityDetails.compliances, - member.vulnerabilityDetails.cvssScore, - member.vulnerabilityDetails.cveName - ); - const nodes: CxNode[] = member.data.nodes?.map((node: any) => { - return new CxNode( - node.id, - node.line, - node.name, - node.column, - node.length, - node.method, - node.nodeID, - node.domType, - node.fileName, - node.fullName, - node.typeName, - node.methodLine, - node.definitions - ); - }); - const cxPackageData: CxPackageData[] = member.data.packageData?.map((packages: any) => { - return new CxPackageData(packages.comment, packages.type, packages.url); - }); - const data = new CxData( - cxPackageData, - member.data.packageIdentifier, - cxScaPackageData, - member.data.queryId, - member.data.queryName, - member.data.group, - member.data.resultHash, - member.data.languageName, - nodes, - member.data.recommendedVersion - ); - return new CxResult( - member.type, - member.label, - member.id, - member.status, - member.alternateId, - member.similarityId, - member.state, - member.severity, - member.created, - member.firstFoundAt, - member.foundAt, - member.firstScanId, - member.description, - data, - member.comments, - cxVulnerabilityDetails, - member.descriptionHTML, - member.riskScore, - member.traits - ); + executeResultsCommands(pathToExecutable: string, commands: string[]): Promise { + return new Promise(function (resolve, reject) { + let stderr = ''; + const cxCommandOutput = new CxCommandOutput(); + const cp = spawner.spawn(pathToExecutable, commands); + cp.stderr.on('data', function (chunk: string) { + stderr += chunk; + }); + cp.on('error', reject) + .on('close', function (code: number) { + logger.info("Exit code received from AST-CLI: " + code); + logger.info(stderr); + cxCommandOutput.status = stderr; + cxCommandOutput.exitCode = code; + resolve(cxCommandOutput) + }); + cp.stdout.on('data', (data: any) => { + logger.info(`${data}`); + cxCommandOutput.payload = data; + }); }); - cxCommandOutput.payload = r; - } else { - cxCommandOutput.exitCode = 1; - cxCommandOutput.status = 'Error in the json file.'; - } } - // In case of html output - else { - const html_arrray: string[] = []; - html_arrray.push(read); - cxCommandOutput.payload = html_arrray; + + async executeResultsCommandsFile(scanId: string, resultType: string, fileExtension: string, commands: string[], pathToExecutable: string, fileName: string): Promise { + const filePath = path.join(os.tmpdir(), fileName + fileExtension) + const read = fs.readFileSync(filePath, 'utf8'); + const cxCommandOutput = new CxCommandOutput(); + // Need to check if file output is json or html + if (fileExtension.includes("json")) { + const read_json = JSON.parse(read.replace(/:([0-9]{15,}),/g, ':"$1",')); + if (read_json.results) { + const r: CxResult[] = read_json.results.map((member: any) => { + const cxScaPackageData = new CxScaPackageData(member.data.scaPackageData?.id, member.data.scaPackageData?.locations, member.data.scaPackageData?.dependencyPaths, member.data.scaPackageData?.outdated, member.data.scaPackageData?.fixLink, member.data.scaPackageData?.supportsQuickFix, member.data.scaPackageData?.typeOfDependency); + const cvss = new CxCvss(member.vulnerabilityDetails.cvss.version, member.vulnerabilityDetails.cvss.attackVector, member.vulnerabilityDetails.cvss.availability, member.vulnerabilityDetails.cvss.confidentiality, member.vulnerabilityDetails.cvss.attackComplexity, member.vulnerabilityDetails.cvss.integrityImpact, member.vulnerabilityDetails.cvss.scope, member.vulnerabilityDetails.cvss.privilegesRequired, member.vulnerabilityDetails.cvss.userInteraction); + const cxVulnerabilityDetails = new CxVulnerabilityDetails(member.vulnerabilityDetails.cweId, cvss, member.vulnerabilityDetails.compliances, member.vulnerabilityDetails.cvssScore, member.vulnerabilityDetails.cveName); + const nodes: CxNode[] = member.data.nodes?.map((node: any) => { + return new CxNode(node.id, node.line, node.name, node.column, node.length, node.method, node.nodeID, node.domType, node.fileName, node.fullName, node.typeName, node.methodLine, node.definitions) + }); + const cxPackageData: CxPackageData[] = member.data.packageData?.map((packages: any) => { + return new CxPackageData(packages.comment, packages.type, packages.url); + }); + const data = new CxData(cxPackageData, member.data.packageIdentifier, cxScaPackageData, member.data.queryId, member.data.queryName, member.data.group, member.data.resultHash, member.data.languageName, nodes, member.data.recommendedVersion); + return new CxResult(member.type, member.label, member.id, member.status, member.alternateId, member.similarityId, member.state, member.severity, member.created, member.firstFoundAt, member.foundAt, member.firstScanId, member.description, data, member.comments, cxVulnerabilityDetails, member.descriptionHTML,member.riskScore,member.traits); + }); + cxCommandOutput.payload = r; + } else { + cxCommandOutput.exitCode = 1; + cxCommandOutput.status = "Error in the json file." + } + } + // In case of html output + else { + const html_arrray: string[] = [] + html_arrray.push(read) + cxCommandOutput.payload = html_arrray; + } + return cxCommandOutput; } - return cxCommandOutput; - } }