From 5e31e08bbd6bdaf9ead22ce101e0f7f422d4fe16 Mon Sep 17 00:00:00 2001 From: Ken McDonald Date: Mon, 9 Nov 2020 21:35:59 -0500 Subject: [PATCH 1/3] Make GitHubService Authentication call public so it can be leveraged within the GitHubIssueTracker --- src/main/java/com/checkmarx/flow/service/GitHubService.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/checkmarx/flow/service/GitHubService.java b/src/main/java/com/checkmarx/flow/service/GitHubService.java index 8530be1ab..25a705aa0 100644 --- a/src/main/java/com/checkmarx/flow/service/GitHubService.java +++ b/src/main/java/com/checkmarx/flow/service/GitHubService.java @@ -85,7 +85,7 @@ public GitHubService(@Qualifier("flowRestTemplate") RestTemplate restTemplate, this.gitHubAppAuthService = gitHubAppAuthService; } - private HttpHeaders createAuthHeaders(ScanRequest scanRequest){ + public HttpHeaders createAuthHeaders(ScanRequest scanRequest){ HttpHeaders httpHeaders; if(!StringUtils.isEmpty(properties.getAppId()) && !StringUtils.isEmpty(properties.getAppKeyFile()) && @@ -97,8 +97,6 @@ private HttpHeaders createAuthHeaders(ScanRequest scanRequest){ ); httpHeaders = new HttpHeaders(); httpHeaders.set(HttpHeaders.AUTHORIZATION, "token ".concat(token)); - - } else{ httpHeaders = new HttpHeaders(); From b5c4175a1b46369dac62ffba4bde5717285e5a5f Mon Sep 17 00:00:00 2001 From: Ken McDonald Date: Mon, 9 Nov 2020 21:36:55 -0500 Subject: [PATCH 2/3] Update GitHubIssueTracker to use GitHubService Authentication logic to support GitHub App --- .../flow/custom/GitHubIssueTracker.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/checkmarx/flow/custom/GitHubIssueTracker.java b/src/main/java/com/checkmarx/flow/custom/GitHubIssueTracker.java index 6873de79a..8d18dda99 100644 --- a/src/main/java/com/checkmarx/flow/custom/GitHubIssueTracker.java +++ b/src/main/java/com/checkmarx/flow/custom/GitHubIssueTracker.java @@ -8,6 +8,7 @@ import com.checkmarx.flow.dto.github.LabelsItem; import com.checkmarx.flow.exception.MachinaException; import com.checkmarx.flow.exception.MachinaRuntimeException; +import com.checkmarx.flow.service.GitHubService; import com.checkmarx.flow.utils.HTMLHelper; import com.checkmarx.flow.utils.ScanUtils; import com.checkmarx.sdk.dto.ScanResults; @@ -37,13 +38,15 @@ public class GitHubIssueTracker implements IssueTracker { private final GitHubProperties properties; private final FlowProperties flowProperties; private final ScmConfigOverrider scmConfigOverrider; + private final GitHubService gitHubService; public GitHubIssueTracker(@Qualifier("flowRestTemplate") RestTemplate restTemplate, GitHubProperties properties, FlowProperties flowProperties, - ScmConfigOverrider scmConfigOverrider) { + ScmConfigOverrider scmConfigOverrider, GitHubService gitHubService) { this.restTemplate = restTemplate; this.properties = properties; this.flowProperties = flowProperties; this.scmConfigOverrider = scmConfigOverrider; + this.gitHubService = gitHubService; } @Override @@ -76,7 +79,7 @@ public List getIssues(ScanRequest request) { log.info("Executing getIssues GitHub API call: {}", apiUrl); List issues = new ArrayList<>(); - HttpEntity httpEntity = new HttpEntity<>(createAuthHeaders(request)); + HttpEntity httpEntity = new HttpEntity<>(gitHubService.createAuthHeaders(request)); ResponseEntity response = restTemplate.exchange(apiUrl, HttpMethod.GET, httpEntity, com.checkmarx.flow.dto.github.Issue[].class); @@ -99,19 +102,23 @@ public List getIssues(ScanRequest request) { ResponseEntity responsePage = restTemplate.exchange(next, HttpMethod.GET, httpEntity, com.checkmarx.flow.dto.github.Issue[].class); - if (responsePage.getBody() != null) { - for (com.checkmarx.flow.dto.github.Issue issue : responsePage.getBody()) { - Issue i = mapToIssue(issue); - if (i != null && i.getTitle().startsWith(request.getProduct().getProduct())) { - issues.add(i); - } - } - } + mapIssues(request, issues, responsePage); next = getNextURIFromHeaders(responsePage.getHeaders(), "link", "next"); } return issues; } + private void mapIssues(ScanRequest request, List issues, ResponseEntity responsePage) { + if (responsePage.getBody() != null) { + for (com.checkmarx.flow.dto.github.Issue issue : responsePage.getBody()) { + Issue i = mapToIssue(issue); + if (i != null && i.getTitle().startsWith(request.getProduct().getProduct())) { + issues.add(i); + } + } + } + } + private Issue mapToIssue(com.checkmarx.flow.dto.github.Issue issue){ if(issue == null){ @@ -139,7 +146,7 @@ private Issue mapToIssue(com.checkmarx.flow.dto.github.Issue issue){ */ private Issue getIssue(String issueUrl, ScanRequest scanRequest) { log.info("Executing getIssue GitHub API call"); - HttpEntity httpEntity = new HttpEntity<>(createAuthHeaders(scanRequest)); + HttpEntity httpEntity = new HttpEntity<>(gitHubService.createAuthHeaders(scanRequest)); ResponseEntity response = restTemplate.exchange(issueUrl, HttpMethod.GET, httpEntity, com.checkmarx.flow.dto.github.Issue.class); @@ -154,7 +161,7 @@ private Issue getIssue(String issueUrl, ScanRequest scanRequest) { */ private void addComment(String issueUrl, String comment, ScanRequest scanRequest) { log.debug("Executing add comment GitHub API call with following comment {}", comment); - HttpEntity httpEntity = new HttpEntity<>(getJSONComment(comment).toString(), createAuthHeaders(scanRequest)); + HttpEntity httpEntity = new HttpEntity<>(getJSONComment(comment).toString(), gitHubService.createAuthHeaders(scanRequest)); restTemplate.exchange(issueUrl.concat("/comments"), HttpMethod.POST, httpEntity, String.class); } @@ -167,7 +174,8 @@ public Issue createIssue(ScanResults.XIssue resultIssue, ScanRequest request) { .concat("/issues"); ResponseEntity response; try { - HttpEntity httpEntity = new HttpEntity<>(getJSONCreateIssue(resultIssue, request).toString(), createAuthHeaders(request)); + HttpEntity httpEntity = new HttpEntity<>(getJSONCreateIssue(resultIssue, request).toString(), + gitHubService.createAuthHeaders(request)); response = restTemplate.exchange(apiUrl, HttpMethod.POST, httpEntity, com.checkmarx.flow.dto.github.Issue.class); } catch (HttpClientErrorException e) { log.error("Error occurred while creating GitHub Issue", e); @@ -182,14 +190,15 @@ public Issue createIssue(ScanResults.XIssue resultIssue, ScanRequest request) { @Override public void closeIssue(Issue issue, ScanRequest request) throws MachinaException { log.info("Executing closeIssue GitHub API call"); - HttpEntity httpEntity = new HttpEntity<>(getJSONCloseIssue().toString(), createAuthHeaders(request)); + HttpEntity httpEntity = new HttpEntity<>(getJSONCloseIssue().toString(), gitHubService.createAuthHeaders(request)); restTemplate.exchange(issue.getUrl(), HttpMethod.POST, httpEntity, Issue.class); } @Override public Issue updateIssue(Issue issue, ScanResults.XIssue resultIssue, ScanRequest request) throws MachinaException { log.info("Executing updateIssue GitHub API call"); - HttpEntity httpEntity = new HttpEntity<>(getJSONUpdateIssue(resultIssue, request).toString(), createAuthHeaders(request)); + HttpEntity httpEntity = new HttpEntity<>(getJSONUpdateIssue(resultIssue, request).toString(), + gitHubService.createAuthHeaders(request)); ResponseEntity response; try { response = restTemplate.exchange(issue.getUrl(), HttpMethod.POST, httpEntity, com.checkmarx.flow.dto.github.Issue.class); @@ -326,15 +335,6 @@ private JSONObject getJSONCloseIssue() { return requestBody; } - /** - * @return Header consisting of API token used for authentication - */ - private HttpHeaders createAuthHeaders(ScanRequest scanRequest) { - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.set(HttpHeaders.AUTHORIZATION, "token ".concat(scmConfigOverrider.determineConfigToken(properties, scanRequest.getScmInstance()))); - return httpHeaders; - } - private static String getNextURIFromHeaders(HttpHeaders headers, final String headerName, final String rel) { if (headerName == null) { return null; From ccf6551f4caa5c25d67b386a814db5a26d8565fb Mon Sep 17 00:00:00 2001 From: Ken McDonald Date: Mon, 9 Nov 2020 21:49:31 -0500 Subject: [PATCH 3/3] Fix typo in PR template --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f14cb245e..04971d2a1 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -16,6 +16,6 @@ By submitting a PR to this repository, you agree to the terms within the [Checkm ### Checklist -- [ ] I have added documentation for new/changed functionality in this PR (if applicable). *If documentaiton is a Wiki Update, please indicate desired changes within PR MD Comment* +- [ ] I have added documentation for new/changed functionality in this PR (if applicable). *If documentation is a Wiki Update, please indicate desired changes within PR MD Comment* - [ ] All active GitHub checks for tests, formatting, and security are passing - [ ] The correct base branch is being used