Skip to content

Commit 635d14a

Browse files
authored
Merge pull request #37 from SDA-SE/fix/illegalArgument
fix: Illegal Argument
2 parents 188ea4f + abecf7f commit 635d14a

File tree

3 files changed

+61
-67
lines changed

3 files changed

+61
-67
lines changed

upload-client/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ dependencies {
3838
implementation 'com.google.guava:guava:30.1.1-jre'
3939
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.3'
4040
implementation 'io.securecodebox:defectdojo-client:0.0.41-SNAPSHOT'
41+
implementation 'org.slf4j:slf4j-api:1.5.6'
42+
implementation 'org.slf4j:slf4j-simple:2.0.7'
4143

4244
/* For testing with a non fat jar from defectdojo-client this might be needed */
4345
implementation group: 'org.springframework', name: 'spring-web', version: '5.3.9'

upload-client/src/main/groovy/org/sdase/deleteTestProduct/MainDeleteProduct.groovy

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,6 @@ package org.sdase.deleteTestProduct
22

33
public class MainDeleteProduct {
44
static void main(String[] args) {
5-
String dojoUrl = System.getenv("DEFECTDOJO_URL")
6-
if (dojoUrl == null) {
7-
dojoUrl = System.getenv("DD_URL")
8-
}
9-
println "dojoUrl: ${dojoUrl}"
10-
String token = System.getenv("DEFECTDOJO_APIKEY")
11-
if(token == null) {
12-
token = System.getenv("DD_TOKEN")
13-
}
14-
String dojoUser = System.getenv("DEFECTDOJO_USERNAME")
15-
if(dojoUser == null) {
16-
dojoUser = System.getenv("DD_USER")
17-
}
18-
if(!token) {
19-
println "Error: No token"
20-
return
21-
}
22-
23-
org.sdase.deleteTestProduct.TestProductDeletor.main (token, dojoUser, dojoUrl)
5+
org.sdase.deleteTestProduct.TestProductDeletor.call ()
246
}
25-
}
7+
}
Lines changed: 57 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,87 @@
1+
//file:noinspection LineLength
12
package org.sdase.deleteTestProduct
23

4+
import groovy.time.TimeDuration
5+
import groovy.transform.CompileDynamic
6+
import groovy.util.logging.Slf4j
37
import io.securecodebox.persistence.defectdojo.config.DefectDojoConfig
48
import io.securecodebox.persistence.defectdojo.models.Finding
5-
import io.securecodebox.persistence.defectdojo.service.EndpointService
6-
import io.securecodebox.persistence.defectdojo.service.EngagementService
9+
import io.securecodebox.persistence.defectdojo.models.Product
710
import io.securecodebox.persistence.defectdojo.service.FindingService
8-
import io.securecodebox.persistence.defectdojo.service.ProductService;
9-
import io.securecodebox.persistence.defectdojo.service.ProductTypeService;
10-
import io.securecodebox.persistence.defectdojo.service.TestService
11-
import java.text.DateFormat
12-
import java.text.SimpleDateFormat
11+
import io.securecodebox.persistence.defectdojo.service.GenericDefectDojoService
12+
import io.securecodebox.persistence.defectdojo.service.ProductService
13+
1314
import java.time.LocalDateTime
1415
import java.time.format.DateTimeFormatter
1516
import java.time.temporal.ChronoUnit
16-
import io.securecodebox.persistence.defectdojo.config.DefectDojoConfig
17-
import io.securecodebox.persistence.defectdojo.models.Engagement
18-
import io.securecodebox.persistence.defectdojo.models.Finding
19-
import io.securecodebox.persistence.defectdojo.models.Product
20-
import io.securecodebox.persistence.defectdojo.models.ProductType
21-
import io.securecodebox.persistence.defectdojo.models.ScanFile
22-
import io.securecodebox.persistence.defectdojo.models.Test
23-
import io.securecodebox.persistence.defectdojo.models.TestType
24-
import io.securecodebox.persistence.defectdojo.models.User
25-
import io.securecodebox.persistence.defectdojo.models.DojoGroup
26-
import io.securecodebox.persistence.defectdojo.models.ProductGroup
27-
28-
import io.securecodebox.persistence.defectdojo.service.EngagementService
29-
import io.securecodebox.persistence.defectdojo.service.FindingService
30-
import io.securecodebox.persistence.defectdojo.service.ImportScanService
31-
import io.securecodebox.persistence.defectdojo.service.ProductService;
32-
import io.securecodebox.persistence.defectdojo.service.ProductTypeService;
33-
import io.securecodebox.persistence.defectdojo.service.TestService
34-
import io.securecodebox.persistence.defectdojo.service.TestTypeService
35-
import io.securecodebox.persistence.defectdojo.service.UserService
36-
import io.securecodebox.persistence.defectdojo.service.DojoGroupService
37-
import io.securecodebox.persistence.defectdojo.service.ProductGroupService
38-
import io.securecodebox.persistence.defectdojo.ScanType
3917
import java.util.stream.Collectors
4018

19+
@Slf4j @CompileDynamic
4120
class TestProductDeletor {
42-
static void main(dojoUrl, dojoToken, dojoUser) {
43-
def conf = new DefectDojoConfig(dojoUrl, dojoToken, dojoUser, 200);
44-
def productTypeService = new ProductTypeService(conf);
45-
def productService = new ProductService(conf);
46-
def engagementService = new EngagementService(conf)
47-
def testService = new TestService(conf)
48-
def testTypeService = new TestTypeService(conf)
49-
def userService = new UserService(conf)
50-
def findingService = new FindingService(conf)
51-
def importScanService = new ImportScanService(conf)
52-
def dojoGroupService = new DojoGroupService(conf)
53-
def productGroupService = new ProductGroupService(conf)
54-
def endpointService = new EndpointService(conf)
21+
static void call() {
22+
log.info('DefectDojo Test Deletion Client')
5523

24+
def dojoConf = createDojoConf()
5625

5726
URL resource = TestProductDeletor.getClassLoader().getResource("expectedFindings.json");
58-
5927
File file = new File(resource.getPath())
6028
String fileContent = file.text
6129
def jsonSlurper = new groovy.json.JsonSlurper()
6230
def expectedFindings = jsonSlurper.parseText(fileContent)
6331

64-
for(expectedFinding in expectedFindings) {
32+
// set DEFECT_DOJO_OBJET_LIMIT to 3000 to save tons of unnecessary requests.
33+
// using Reflection, not inheritance because weird compile time classpath issues seem to prevent subclassing
34+
GenericDefectDojoService.getDeclaredField("DEFECT_DOJO_OBJET_LIMIT").setAccessible(true)
35+
def productService = new ProductService(dojoConf)
36+
//noinspection GroovyAccessibility -- see comment above
37+
productService.DEFECT_DOJO_OBJET_LIMIT = 3000
38+
def findingService = new FindingService(dojoConf)
39+
//noinspection GroovyAccessibility -- see comment above
40+
findingService.DEFECT_DOJO_OBJET_LIMIT = 3000
41+
42+
def lastProductName = ""
43+
for (expectedFinding in expectedFindings) {
44+
if (lastProductName == expectedFinding.productName) {
45+
log.info "Skipping ${expectedFinding.productName} because product is deleted or doesn't exists"
46+
continue
47+
}
48+
lastProductName = expectedFinding.productName
49+
log.info "iterating over expectedFinding with query (${expectedFinding.productName})"
50+
Map<String, String> queryParameter = new HashMap<>();
51+
queryParameter.put("name", expectedFinding.productName);
6552
try {
6653
def product = productService.searchUnique(Product.builder().name(expectedFinding.productName).build()).orElseThrow{
6754
new Exception("Could not find product with name '" + expectedFinding.productName + "' in DefectDojo API. DefectDojo might be running in an unsupported version.")
6855
};
69-
println "deleting product ${product.id}"
56+
log.info "deleting product ${product.id}"
57+
7058
productService.delete(product.id)
7159
} catch(Exception e) {
72-
println "Product ${expectedFinding.productName} not found"
60+
log.warn("Product ${expectedFinding.productName} not found")
7361
println e
7462
}
7563
}
7664
}
65+
66+
private static DefectDojoConfig createDojoConf() {
67+
def dojoUrl = System.getenv('DEFECTDOJO_URL') ?: System.getenv('DD_URL')
68+
if (isNullOrEmpty(dojoUrl)) {
69+
log.error 'DEFECTDOJO_URL not set'
70+
System.exit(1)
71+
}
72+
73+
def dojoToken = System.getenv('DEFECTDOJO_APIKEY') ?: System.getenv('DD_TOKEN')
74+
if (isNullOrEmpty(dojoToken)) {
75+
log.error 'DEFECTDOJO_APIKEY not set'
76+
System.exit(1)
77+
}
78+
def dojoUser = System.getenv('DEFECTDOJO_USERNAME')
79+
if (dojoUser == null) {
80+
dojoUser = System.getenv('DD_USER')
81+
}
82+
return new DefectDojoConfig(dojoUrl, dojoToken, dojoUser, 200)
83+
}
84+
private static boolean isNullOrEmpty(String string) {
85+
return string == null || string.empty
86+
}
7787
}

0 commit comments

Comments
 (0)