Skip to content

Commit b486bfa

Browse files
committed
Vulnerability Findings API
1 parent db8f925 commit b486bfa

File tree

5 files changed

+239
-0
lines changed

5 files changed

+239
-0
lines changed

src/main/java/org/gitlab4j/api/Constants.java

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,90 @@ public String toString() {
308308
}
309309
}
310310

311+
/** Enum to use for specifying the report_type when calling the vulnerability findings api. */
312+
public enum VulnerabilityFindingReportType {
313+
314+
SAST, DAST, DEPENDENCY_SCANNING, CONTAINER_SCANNING;
315+
316+
private static JacksonJsonEnumHelper<VulnerabilityFindingReportType> enumHelper = new JacksonJsonEnumHelper<>(VulnerabilityFindingReportType.class);
317+
318+
@JsonCreator
319+
public static VulnerabilityFindingReportType forValue(String value) { return enumHelper.forValue(value); }
320+
321+
@JsonValue
322+
public String toValue() {
323+
return (enumHelper.toString(this));
324+
}
325+
326+
@Override
327+
public String toString() {
328+
return (enumHelper.toString(this));
329+
}
330+
}
331+
332+
/** Enum to use for specifying the scope when calling the vulnerability findings api. */
333+
public enum VulnerabilityFindingScope {
334+
335+
ALL, DISMISSED;
336+
337+
private static JacksonJsonEnumHelper<VulnerabilityFindingScope> enumHelper = new JacksonJsonEnumHelper<>(VulnerabilityFindingScope.class);
338+
339+
@JsonCreator
340+
public static VulnerabilityFindingScope forValue(String value) { return enumHelper.forValue(value); }
341+
342+
@JsonValue
343+
public String toValue() {
344+
return (enumHelper.toString(this));
345+
}
346+
347+
@Override
348+
public String toString() {
349+
return (enumHelper.toString(this));
350+
}
351+
}
352+
353+
/** Enum to use for specifying the severity when calling the vulnerability findings api. */
354+
public enum VulnerabilityFindingSeverity {
355+
356+
INFO, LOW, MEDIUM, HIGH, CRITICAL, UNKNOWN;
357+
358+
private static JacksonJsonEnumHelper<VulnerabilityFindingSeverity> enumHelper = new JacksonJsonEnumHelper<>(VulnerabilityFindingSeverity.class);
359+
360+
@JsonCreator
361+
public static VulnerabilityFindingSeverity forValue(String value) { return enumHelper.forValue(value); }
362+
363+
@JsonValue
364+
public String toValue() {
365+
return (enumHelper.toString(this));
366+
}
367+
368+
@Override
369+
public String toString() {
370+
return (enumHelper.toString(this));
371+
}
372+
}
373+
374+
/** Enum to use for specifying the confidence when calling the vulnerability findings api. */
375+
public enum VulnerabilityFindingConfidence {
376+
377+
LOW, MEDIUM, HIGH, CONFIRMED, UNKNOWN, IGNORE, EXPERIMENTAL;
378+
379+
private static JacksonJsonEnumHelper<VulnerabilityFindingConfidence> enumHelper = new JacksonJsonEnumHelper<>(VulnerabilityFindingConfidence.class);
380+
381+
@JsonCreator
382+
public static VulnerabilityFindingConfidence forValue(String value) { return enumHelper.forValue(value); }
383+
384+
@JsonValue
385+
public String toValue() {
386+
return (enumHelper.toString(this));
387+
}
388+
389+
@Override
390+
public String toString() {
391+
return (enumHelper.toString(this));
392+
}
393+
}
394+
311395
/** Enum to use for specifying the scope for getMergeRequests methods. */
312396
public enum MergeRequestScope {
313397

src/main/java/org/gitlab4j/api/GitLabApi.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public String getApiNamespace() {
9292
private TagsApi tagsApi;
9393
private TodosApi todosApi;
9494
private UserApi userApi;
95+
private VulnerabilityFindingsApi vulnerabilityFindingsApi;
9596
private WikisApi wikisApi;
9697

9798
/**
@@ -1617,6 +1618,23 @@ public UserApi getUserApi() {
16171618
return (userApi);
16181619
}
16191620

1621+
/**
1622+
* Gets the VulnerabilityFindingsApi instance owned by this GitLabApi instance. The VulnerabilityFindingsApi is used to perform all vulnerability scan related API calls.
1623+
*
1624+
* @return the VulnerabilityFindingsApi instance owned by this GitLabApi instance
1625+
*/
1626+
public VulnerabilityFindingsApi getVulnerabilityFindingsApi() {
1627+
if (vulnerabilityFindingsApi == null) {
1628+
synchronized (this) {
1629+
if (vulnerabilityFindingsApi == null) {
1630+
vulnerabilityFindingsApi = new VulnerabilityFindingsApi(this);
1631+
}
1632+
}
1633+
}
1634+
1635+
return vulnerabilityFindingsApi;
1636+
}
1637+
16201638
/**
16211639
* Gets the WikisApi instance owned by this GitLabApi instance. The WikisApi is used to perform all wiki related API calls.
16221640
*
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.gitlab4j.api;
2+
3+
import org.gitlab4j.api.models.VulnerabilityFinding;
4+
import org.gitlab4j.api.models.VulnerabilityFindingFilter;
5+
6+
import java.util.List;
7+
8+
public class VulnerabilityFindingsApi extends AbstractApi {
9+
10+
public VulnerabilityFindingsApi(GitLabApi gitLabApi) {
11+
super(gitLabApi);
12+
}
13+
14+
public List<VulnerabilityFinding> getVulnerabilityFindings(Object projectId) throws GitLabApiException {
15+
return getVulnerabilityFindings(projectId, null, getDefaultPerPage()).all();
16+
}
17+
18+
public Pager<VulnerabilityFinding> getVulnerabilityFindings(Object projectIdOrPath, VulnerabilityFindingFilter filter, int itemsPerPage) throws GitLabApiException {
19+
GitLabApiForm formData = (filter != null ? filter.getQueryParams() : new GitLabApiForm());
20+
21+
return (new Pager<VulnerabilityFinding>(this, VulnerabilityFinding.class, itemsPerPage, formData.asMap(), "projects",
22+
getProjectIdOrPath(projectIdOrPath), "vulnerability_findings"));
23+
}
24+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package org.gitlab4j.api.models;
2+
3+
import org.gitlab4j.api.Constants;
4+
import org.gitlab4j.api.utils.JacksonJson;
5+
6+
public class VulnerabilityFinding {
7+
8+
private String id;
9+
private String name;
10+
private Constants.VulnerabilityFindingSeverity severity;
11+
private Constants.VulnerabilityFindingConfidence confidence;
12+
private Constants.VulnerabilityFindingReportType reportType;
13+
14+
public String getName() {
15+
return name;
16+
}
17+
18+
public void setName(String name) {
19+
this.name = name;
20+
}
21+
22+
public String getId() {
23+
return id;
24+
}
25+
26+
public void setId(String id) {
27+
this.id = id;
28+
}
29+
30+
public Constants.VulnerabilityFindingReportType getReportType() {
31+
return reportType;
32+
}
33+
34+
public void setReportType(Constants.VulnerabilityFindingReportType reportType) {
35+
this.reportType = reportType;
36+
}
37+
38+
public Constants.VulnerabilityFindingSeverity getSeverity() {
39+
return severity;
40+
}
41+
42+
public void setSeverity(Constants.VulnerabilityFindingSeverity severity) {
43+
this.severity = severity;
44+
}
45+
46+
public Constants.VulnerabilityFindingConfidence getConfidence() {
47+
return confidence;
48+
}
49+
50+
public void setConfidence(Constants.VulnerabilityFindingConfidence confidence) {
51+
this.confidence = confidence;
52+
}
53+
54+
@Override
55+
public String toString() {
56+
return (JacksonJson.toJsonString(this));
57+
}
58+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.gitlab4j.api.models;
2+
3+
import java.util.List;
4+
import java.util.stream.Collectors;
5+
6+
import org.gitlab4j.api.Constants;
7+
import org.gitlab4j.api.GitLabApiForm;
8+
9+
import com.fasterxml.jackson.annotation.JsonIgnore;
10+
11+
/**
12+
* This class is used to filter vulnerability findings when getting lists of them.
13+
*/
14+
public class VulnerabilityFindingFilter {
15+
16+
private List<Constants.VulnerabilityFindingReportType> reportTypes;
17+
private List<Constants.VulnerabilityFindingSeverity> severity;
18+
private List<Constants.VulnerabilityFindingConfidence> confidence;
19+
private Constants.VulnerabilityFindingScope scope;
20+
21+
22+
@JsonIgnore
23+
public GitLabApiForm getQueryParams(int page, int perPage) {
24+
return (getQueryParams()
25+
.withParam(Constants.PAGE_PARAM, page)
26+
.withParam(Constants.PER_PAGE_PARAM, perPage));
27+
}
28+
29+
30+
@JsonIgnore
31+
public GitLabApiForm getQueryParams() {
32+
return (new GitLabApiForm()
33+
.withParam("report_type", (reportTypes != null ? String.join(",", reportTypes.stream().map(Constants.VulnerabilityFindingReportType::toString).collect(Collectors.toList())) : null))
34+
.withParam("severity", (severity != null ? String.join(",", severity.stream().map(Constants.VulnerabilityFindingSeverity::toString).collect(Collectors.toList())) : null))
35+
.withParam("confidence", (confidence != null ? String.join(",", confidence.stream().map(Constants.VulnerabilityFindingConfidence::toString).collect(Collectors.toList())) : null))
36+
.withParam("scope", scope)
37+
);
38+
}
39+
40+
public void setReportTypes(List<Constants.VulnerabilityFindingReportType> reportTypes) {
41+
this.reportTypes = reportTypes;
42+
}
43+
44+
public void setSeverity(List<Constants.VulnerabilityFindingSeverity> severity) {
45+
this.severity = severity;
46+
}
47+
48+
public void setConfidence(List<Constants.VulnerabilityFindingConfidence> confidence) {
49+
this.confidence = confidence;
50+
}
51+
52+
public void setScope(Constants.VulnerabilityFindingScope scope) {
53+
this.scope = scope;
54+
}
55+
}

0 commit comments

Comments
 (0)