Skip to content

Commit 9376864

Browse files
committed
triage show and update added
1 parent 161282e commit 9376864

File tree

5 files changed

+185
-4
lines changed

5 files changed

+185
-4
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package com.checkmarx.ast.predicate;
2+
3+
import com.checkmarx.ast.project.Project;
4+
import com.fasterxml.jackson.annotation.JsonCreator;
5+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
6+
import com.fasterxml.jackson.annotation.JsonInclude;
7+
import com.fasterxml.jackson.annotation.JsonProperty;
8+
import com.fasterxml.jackson.core.JsonParser;
9+
import com.fasterxml.jackson.core.JsonProcessingException;
10+
import com.fasterxml.jackson.databind.JavaType;
11+
import com.fasterxml.jackson.databind.ObjectMapper;
12+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
13+
import com.fasterxml.jackson.databind.type.TypeFactory;
14+
import lombok.Value;
15+
import org.apache.commons.lang3.StringUtils;
16+
17+
import java.io.IOException;
18+
import java.util.List;
19+
20+
@Value
21+
@JsonDeserialize()
22+
@JsonInclude(JsonInclude.Include.NON_NULL)
23+
@JsonIgnoreProperties(ignoreUnknown = true)
24+
public class Predicate{
25+
26+
String ID;
27+
String SimilarityID;
28+
String ProjectID;
29+
String State;
30+
String Severity;
31+
String Comment;
32+
String CreatedAt;
33+
String UpdatedAt;
34+
35+
@JsonCreator
36+
public Predicate(@JsonProperty("ID") String id, @JsonProperty("SimilarityID") String similarityID,
37+
@JsonProperty("ProjectID") String projectID, @JsonProperty("State") String state,
38+
@JsonProperty("Severity") String severity, @JsonProperty("Comment") String comment,
39+
@JsonProperty("CreatedAt") String CreatedAt, @JsonProperty("UpdatedAt") String UpdatedAt) {
40+
this.ID = id;
41+
this.SimilarityID = similarityID;
42+
this.ProjectID = projectID;
43+
this.State = state;
44+
this.Severity = severity;
45+
this.Comment = comment;
46+
this.CreatedAt = CreatedAt;
47+
this.UpdatedAt = UpdatedAt;
48+
}
49+
50+
51+
public static <T> T fromLine(String line) {
52+
return parse(line, TypeFactory.defaultInstance().constructType(Predicate.class));
53+
}
54+
55+
public static <T> List<T> listFromLine(String line) {
56+
return parse(line, TypeFactory.defaultInstance().constructCollectionType(List.class, Predicate.class));
57+
}
58+
59+
protected static <T> T parse(String line, JavaType type) {
60+
T result = null;
61+
if (!StringUtils.isBlank(line) && isValidJSON(line)) {
62+
try {
63+
result = new ObjectMapper().readValue(line, type);
64+
} catch (JsonProcessingException ignored) {
65+
66+
}
67+
}
68+
return result;
69+
}
70+
71+
private static boolean isValidJSON(final String json) {
72+
boolean valid = false;
73+
try {
74+
final JsonParser parser = new ObjectMapper().createParser(json);
75+
//noinspection StatementWithEmptyBody
76+
while (parser.nextToken() != null) {
77+
}
78+
valid = true;
79+
} catch (IOException ignored) {
80+
}
81+
return valid;
82+
}
83+
84+
}

src/main/java/com/checkmarx/ast/wrapper/CxConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
@Data
1515
@Builder
16-
public class CxConfig {
16+
public class CxConfig {
1717

1818
private static final Pattern pattern = Pattern.compile("([^\"]\\S*|\".+?\")\\s*");
1919

src/main/java/com/checkmarx/ast/wrapper/CxConstants.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
public final class CxConstants {
44

55
public static final String SOURCE = "-s";
6-
public static final String VERBOSE = "-v";
76
public static final String PROJECT_NAME = "--project-name";
8-
public static final String SCAN_TYPES = "--scan-types";
7+
public static final String SCAN_TYPE = "--scan-type";
98
public static final String SAST_PRESET_NAME = "--sast-preset-name";
109
public static final String FILE_FILTER = "--file-filter";
11-
public static final String AGENT = "--agent";
1210
public static final String BRANCH = "--branch";
1311

12+
public static final String SAST = "sast";
13+
1414
static final String CLIENT_ID = "--client-id";
1515
static final String CLIENT_SECRET = "--client-secret";
1616
static final String API_KEY = "--apikey";
@@ -25,12 +25,18 @@ public final class CxConstants {
2525
static final String SUB_CMD_SHOW = "show";
2626
static final String SUB_CMD_LIST = "list";
2727
static final String SUB_CMD_CREATE = "create";
28+
static final String CMD_TRIAGE = "triage";
29+
static final String SUB_CMD_UPDATE = "update";
2830
static final String CMD_RESULT = "result";
2931
static final String FORMAT = "--format";
3032
static final String FORMAT_JSON = "json";
3133
static final String FILTER = "--filter";
3234
static final String SCAN_ID = "--scan-id";
3335
static final String PROJECT_ID = "--project-id";
36+
static final String SIMILARITY_ID = "--similarity-id";
37+
static final String STATE = "--state";
38+
static final String COMMENT = "--comment";
39+
static final String SEVERITY = "--severity";
3440
static final String REPORT_FORMAT = "--report-format";
3541
static final String OUTPUT_NAME = "--output-name";
3642
static final String OUTPUT_PATH = "--output-path";

src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.checkmarx.ast.wrapper;
22

3+
import com.checkmarx.ast.predicate.Predicate;
34
import com.checkmarx.ast.project.Project;
45
import com.checkmarx.ast.results.ReportFormat;
56
import com.checkmarx.ast.results.Results;
@@ -109,6 +110,46 @@ public Scan scanCreate(@NonNull Map<String, String> params, String additionalPar
109110
return Execution.executeCommand(withConfigArguments(arguments), logger, Scan::fromLine);
110111
}
111112

113+
public List<Predicate> triageShow(@NonNull UUID projectId, String similarityId, String scanType) throws IOException, InterruptedException, CxException {
114+
this.logger.info("initialized triage for project with id: {}", projectId);
115+
116+
List<String> arguments = new ArrayList<>();
117+
arguments.add(CxConstants.CMD_TRIAGE);
118+
arguments.add(CxConstants.SUB_CMD_SHOW);
119+
arguments.add(CxConstants.PROJECT_ID);
120+
arguments.add(projectId.toString());
121+
arguments.add(CxConstants.SIMILARITY_ID);
122+
arguments.add(similarityId);
123+
arguments.add(CxConstants.SCAN_TYPE);
124+
arguments.add(scanType);
125+
126+
arguments.addAll(jsonArguments());
127+
128+
return Execution.executeCommand(withConfigArguments(arguments), logger, Predicate::listFromLine);
129+
}
130+
131+
public void triageUpdate(@NonNull UUID projectId, String similarityId, String scanType, String state, String comment, String severity) throws IOException, InterruptedException, CxException {
132+
this.logger.info("initialized triage update project with id: {}", projectId);
133+
134+
List<String> arguments = new ArrayList<>();
135+
arguments.add(CxConstants.CMD_TRIAGE);
136+
arguments.add(CxConstants.SUB_CMD_UPDATE);
137+
arguments.add(CxConstants.PROJECT_ID);
138+
arguments.add(projectId.toString());
139+
arguments.add(CxConstants.SIMILARITY_ID);
140+
arguments.add(similarityId);
141+
arguments.add(CxConstants.SCAN_TYPE);
142+
arguments.add(scanType);
143+
arguments.add(CxConstants.STATE);
144+
arguments.add(state);
145+
arguments.add(CxConstants.COMMENT);
146+
arguments.add(comment);
147+
arguments.add(CxConstants.SEVERITY);
148+
arguments.add(severity);
149+
150+
Execution.executeCommand(withConfigArguments(arguments), logger, (line) -> null);
151+
}
152+
112153
public Project projectShow(@NonNull UUID projectId) throws IOException, InterruptedException, CxException {
113154
this.logger.info("initialized project retrieval for id: {}", projectId);
114155

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.checkmarx.ast;
2+
3+
import com.checkmarx.ast.predicate.Predicate;
4+
import com.checkmarx.ast.project.Project;
5+
import com.checkmarx.ast.results.Results;
6+
import com.checkmarx.ast.results.result.Result;
7+
import com.checkmarx.ast.scan.Scan;
8+
import com.checkmarx.ast.wrapper.CxConstants;
9+
import org.junit.Assert;
10+
import org.junit.Test;
11+
12+
import java.util.List;
13+
import java.util.UUID;
14+
15+
import static org.junit.Assert.fail;
16+
17+
public class PredicateTest extends BaseTest {
18+
19+
@Test
20+
public void testTriageShow() throws Exception {
21+
List<Scan> scanList = wrapper.scanList(String.format("statuses=Completed"));
22+
Scan scan = scanList.get(0);
23+
Assert.assertTrue(scanList.size() > 0);
24+
String scanId = scanList.get(0).getID();
25+
26+
Results results = wrapper.results(UUID.fromString(scanId));
27+
Result result = results.getResults().stream().filter(res -> res.getType().equalsIgnoreCase(CxConstants.SAST)).findFirst().get();
28+
29+
List<Predicate> predicates = wrapper.triageShow(UUID.fromString(scan.getProjectID()), result.getSimilarityId(), result.getType());
30+
31+
Assert.assertNotNull(predicates);
32+
}
33+
34+
@Test
35+
public void testTriageUpdate() throws Exception {
36+
List<Scan> scanList = wrapper.scanList(String.format("statuses=Completed"));
37+
Scan scan = scanList.get(0);
38+
Assert.assertTrue(scanList.size() > 0);
39+
String scanId = scanList.get(0).getID();
40+
41+
Results results = wrapper.results(UUID.fromString(scanId));
42+
Result result = results.getResults().stream().filter(res -> res.getType().equalsIgnoreCase(CxConstants.SAST)).findFirst().get();
43+
44+
try {
45+
wrapper.triageUpdate(UUID.fromString(scan.getProjectID()), result.getSimilarityId(), result.getType(), "confirmed", "Edited via Java Wrapper", "hih");
46+
} catch (Exception e) {
47+
fail("Triage update failed. Should not throw exception");
48+
}
49+
}
50+
}

0 commit comments

Comments
 (0)