From 7872e252de2dcf4b3d86db7a03f181e2218e4121 Mon Sep 17 00:00:00 2001 From: Timo Pagel Date: Thu, 9 Jan 2020 09:56:36 +0100 Subject: [PATCH 1/2] fix: use latest in case no testName is given --- .../persistence/DefectDojoService.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/scb-persistenceproviders/defectdojo-persistenceprovider/src/main/java/io/securecodebox/persistence/DefectDojoService.java b/scb-persistenceproviders/defectdojo-persistenceprovider/src/main/java/io/securecodebox/persistence/DefectDojoService.java index ba1aa6d3..842c8fd7 100644 --- a/scb-persistenceproviders/defectdojo-persistenceprovider/src/main/java/io/securecodebox/persistence/DefectDojoService.java +++ b/scb-persistenceproviders/defectdojo-persistenceprovider/src/main/java/io/securecodebox/persistence/DefectDojoService.java @@ -256,16 +256,14 @@ public String getFilename() { } /** * When DefectDojo >= 1.5.4 is used, testType can be given. Add testName in case DefectDojo >= 1.5.4 is used + * Using testName for each branch leads to multiple issues in DefectDojo, so it is not recommended */ private Optional getTestIdByEngagementName(long engagementId, String testName, long offset) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(defectDojoUrl + "/api/v2/tests") .queryParam("engagement", Long.toString(engagementId)) .queryParam("limit", Long.toString(50L)) .queryParam("offset", Long.toString(offset)); - if(testName == null) { - LOG.warn("TestName must be set unique, e.g. with time"); - return Optional.empty(); - } else { + if(testName != null && !testName.isEmpty()) { builder.queryParam("testType", testName); } @@ -275,8 +273,13 @@ private Optional getTestIdByEngagementName(long engagementId, String testN ResponseEntity> response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, engagementRequest, new ParameterizedTypeReference>(){}); Optional testResponseId = null; - for(TestResponse test : response.getBody().getResults()){ - if(testName == null || test.getTitle().equals(testName)){ + Optional latestTestResponseId = Optional.empty(); + for(TestResponse test : response.getBody().getResults()) { + if(testName == null) { + if(!latestTestResponseId.isPresent() || latestTestResponseId.get() < test.getId()) { + latestTestResponseId = Optional.of(test.getId()); + } + } else if (test.getTitle() != null && test.getTitle().equals(testName)) { testResponseId = Optional.of(test.getId()); } } @@ -284,11 +287,11 @@ private Optional getTestIdByEngagementName(long engagementId, String testN return testResponseId; } - if(response.getBody().getNext() != null){ + if(response.getBody().getNext() != null) { return getTestIdByEngagementName(engagementId, testName, offset + 1); } - LOG.warn("Test with name '{}' not found.", testName); - return Optional.empty(); + LOG.info("Test with name '{}' not found, using latest.", testName); + return latestTestResponseId; } /* * Be aware that using latest might results in "conflicting" "latest" in case a new test is added while requesting latest From b1e37b5c6719d2912c0e8b38c8677aeb4504e8b8 Mon Sep 17 00:00:00 2001 From: Timo Pagel Date: Thu, 9 Jan 2020 10:01:38 +0100 Subject: [PATCH 2/2] Make sure latestTestResponseId is set, always --- .../securecodebox/persistence/DefectDojoService.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scb-persistenceproviders/defectdojo-persistenceprovider/src/main/java/io/securecodebox/persistence/DefectDojoService.java b/scb-persistenceproviders/defectdojo-persistenceprovider/src/main/java/io/securecodebox/persistence/DefectDojoService.java index 842c8fd7..f58f3e82 100644 --- a/scb-persistenceproviders/defectdojo-persistenceprovider/src/main/java/io/securecodebox/persistence/DefectDojoService.java +++ b/scb-persistenceproviders/defectdojo-persistenceprovider/src/main/java/io/securecodebox/persistence/DefectDojoService.java @@ -275,13 +275,13 @@ private Optional getTestIdByEngagementName(long engagementId, String testN Optional testResponseId = null; Optional latestTestResponseId = Optional.empty(); for(TestResponse test : response.getBody().getResults()) { - if(testName == null) { - if(!latestTestResponseId.isPresent() || latestTestResponseId.get() < test.getId()) { - latestTestResponseId = Optional.of(test.getId()); - } - } else if (test.getTitle() != null && test.getTitle().equals(testName)) { + if(testName == null || (test.getTitle() != null && test.getTitle().equals(testName))) { testResponseId = Optional.of(test.getId()); } + if(!latestTestResponseId.isPresent() || latestTestResponseId.get() < test.getId()) { + latestTestResponseId = Optional.of(test.getId()); + } + } if(testResponseId != null) { return testResponseId;