Skip to content

Commit b8a7712

Browse files
authored
adding learn-more command (#155)
1 parent 020ecff commit b8a7712

File tree

5 files changed

+146
-6
lines changed

5 files changed

+146
-6
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.checkmarx.ast.learnMore;
2+
3+
import com.checkmarx.ast.codebashing.CodeBashing;
4+
import com.checkmarx.ast.remediation.KicsRemediation;
5+
import com.fasterxml.jackson.annotation.JsonCreator;
6+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
7+
import com.fasterxml.jackson.annotation.JsonInclude;
8+
import com.fasterxml.jackson.annotation.JsonProperty;
9+
import com.fasterxml.jackson.databind.JavaType;
10+
import com.fasterxml.jackson.databind.ObjectMapper;
11+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
12+
import com.fasterxml.jackson.databind.type.TypeFactory;
13+
import lombok.Value;
14+
import org.apache.commons.lang3.StringUtils;
15+
16+
import java.io.IOException;
17+
import java.util.List;
18+
19+
@Value
20+
@JsonDeserialize()
21+
@JsonInclude(JsonInclude.Include.NON_NULL)
22+
@JsonIgnoreProperties(ignoreUnknown = true)
23+
24+
public class LearnMore {
25+
26+
String queryId;
27+
String queryName;
28+
String queryDescriptionId;
29+
String resultDescription;
30+
String risk;
31+
String cause;
32+
String generalRecommendations;
33+
List<Sample> samples;
34+
35+
@JsonCreator
36+
public LearnMore(@JsonProperty("queryID") String queryId, @JsonProperty("queryName") String queryName,@JsonProperty("queryDescriptionID") String queryDescriptionId, @JsonProperty("resultDescription") String resultDescription,@JsonProperty("risk") String risk,@JsonProperty("cause") String cause,@JsonProperty("generalRecommendations") String generalRecommendations,@JsonProperty("samples") List<Sample> samples) {
37+
this.queryId = queryId;
38+
this.queryName = queryName;
39+
this.queryDescriptionId = queryDescriptionId;
40+
this.resultDescription = resultDescription;
41+
this.risk = risk;
42+
this.cause = cause;
43+
this.generalRecommendations = generalRecommendations;
44+
this.samples = samples;
45+
}
46+
47+
public static <T> List<T> listFromLine(String line) {
48+
return parse(line, TypeFactory.defaultInstance().constructCollectionType(List.class, LearnMore.class));
49+
}
50+
51+
public static <T> T fromLine(String line) {
52+
return parse(line, TypeFactory.defaultInstance().constructType(LearnMore.class));
53+
}
54+
55+
private static <T> T parse(String line, JavaType type) {
56+
T result = null;
57+
try {
58+
if (!StringUtils.isBlank(line) && isValidJSON(line)) {
59+
result = new ObjectMapper().readValue(line, type);
60+
61+
}
62+
} catch (IOException e) {
63+
e.printStackTrace();
64+
}
65+
return result;
66+
}
67+
68+
private static boolean isValidJSON(final String json) {
69+
try {
70+
final ObjectMapper mapper = new ObjectMapper();
71+
mapper.readTree(json);
72+
return true;
73+
} catch (IOException e) {
74+
return false;
75+
}
76+
}
77+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.checkmarx.ast.learnMore;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5+
import com.fasterxml.jackson.annotation.JsonInclude;
6+
import com.fasterxml.jackson.annotation.JsonProperty;
7+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
8+
import lombok.Value;
9+
10+
@Value
11+
@JsonDeserialize()
12+
@JsonInclude(JsonInclude.Include.NON_NULL)
13+
@JsonIgnoreProperties(ignoreUnknown = true)
14+
15+
public class Sample {
16+
String progLanguage;
17+
String code;
18+
String title;
19+
20+
@JsonCreator
21+
public Sample(@JsonProperty("progLanguage") String progLanguage, @JsonProperty("code") String code,@JsonProperty("title") String title) {
22+
this.progLanguage = progLanguage;
23+
this.code = code;
24+
this.title = title;
25+
}
26+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,9 @@ public final class CxConstants {
5959
static final String CMD_UTILS = "utils";
6060
static final String CMD_REMEDIATION = "remediation";
6161
static final String SUB_CMD_REMEDIATION_SCA = "sca";
62+
static final String SUB_CMD_REMEDIATION_KICS = "kics";
63+
static final String KICS_REMEDIATION_RESULTS_FILE = "--results-file";
64+
static final String KICS_REMEDIATION_KICS_FILE = "--kics-files";
65+
static final String KICS_REMEDIATION_SIMILARITY = "--similarity-ids";
66+
static final String SUB_CMD_LEARN_MORE = "learn-more";
6267
}

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.checkmarx.ast.codebashing.CodeBashing;
44
import com.checkmarx.ast.kicsRealtimeResults.KicsRealtimeResults;
5+
import com.checkmarx.ast.learnMore.LearnMore;
56
import com.checkmarx.ast.predicate.Predicate;
67
import com.checkmarx.ast.project.Project;
78
import com.checkmarx.ast.remediation.KicsRemediation;
@@ -348,25 +349,39 @@ public KicsRemediation kicsRemediate(@NonNull String resultsFile, String kicsFil
348349

349350
List<String> arguments = new ArrayList<>();
350351
arguments.add(this.executable);
351-
arguments.add("utils");
352-
arguments.add("remediation");
353-
arguments.add("kics");
354-
arguments.add("--results-file");
352+
arguments.add(CxConstants.CMD_UTILS);
353+
arguments.add(CxConstants.CMD_REMEDIATION);
354+
arguments.add(CxConstants.SUB_CMD_REMEDIATION_KICS);
355+
arguments.add(CxConstants.KICS_REMEDIATION_RESULTS_FILE);
355356
arguments.add(resultsFile);
356-
arguments.add("--kics-files");
357+
arguments.add(CxConstants.KICS_REMEDIATION_KICS_FILE);
357358
arguments.add(kicsFile);
358359
if (engine.length() > 0) {
359360
arguments.add(CxConstants.ENGINE);
360361
arguments.add(engine);
361362
}
362363
if (similarityIds.length() > 0) {
363-
arguments.add("--similarity-ids");
364+
arguments.add(CxConstants.KICS_REMEDIATION_SIMILARITY);
364365
arguments.add(similarityIds);
365366
}
366367
KicsRemediation remediation = Execution.executeCommand(arguments, logger, KicsRemediation::fromLine);
367368
return remediation;
368369
}
369370

371+
public List<LearnMore> learnMore(String queryId) throws CxException, IOException, InterruptedException {
372+
List<String> arguments = new ArrayList<>();
373+
arguments.add(this.executable);
374+
arguments.add(CxConstants.CMD_UTILS);
375+
arguments.add(CxConstants.SUB_CMD_LEARN_MORE);
376+
arguments.add(CxConstants.QUERY_ID);
377+
arguments.add(queryId);
378+
arguments.add(CxConstants.FORMAT);
379+
arguments.add(CxConstants.FORMAT_JSON);
380+
381+
List<LearnMore> learnMore = Execution.executeCommand(arguments, logger, LearnMore::listFromLine);
382+
return learnMore;
383+
}
384+
370385
private int getIndexOfBfLNode(List<Node> bflNodes, List<Node> resultNodes) {
371386

372387
int bflNodeNotFound = -1;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.checkmarx.ast;
2+
3+
import com.checkmarx.ast.learnMore.LearnMore;
4+
import org.junit.jupiter.api.Assertions;
5+
import org.junit.jupiter.api.Test;
6+
import java.util.List;
7+
8+
class LearnMoreTest extends BaseTest {
9+
private static String QUERY_ID = "16772998409937314312";
10+
11+
@Test
12+
void testLearnMore() throws Exception {
13+
List<LearnMore> learnMore = wrapper.learnMore(QUERY_ID);
14+
Assertions.assertTrue(learnMore.size()>0);
15+
}
16+
17+
}

0 commit comments

Comments
 (0)