From 707e9d4fbbacd79168646ab3b7f035692759107c Mon Sep 17 00:00:00 2001 From: Jonathan Christison Date: Mon, 3 Jul 2023 12:54:54 +0100 Subject: [PATCH] Fix cascade for brew and pnc types Change endpoint in hack test script, these should be moved to unit tests --- hack/pssaas-request-curl.sh | 4 +-- .../java/com/redhat/pctsec/model/Scan.java | 4 ++- .../com/redhat/pctsec/model/ScanRequest.java | 4 +-- .../com/redhat/pctsec/model/ScanRequests.java | 5 ++- .../com/redhat/pctsec/model/ScanTask.java | 2 ++ .../pctsec/model/api/request/Component.java | 17 ++++++++++ .../pctsec/model/api/request/build.java | 34 ++++++++++++++++--- .../redhat/pctsec/model/api/request/git.java | 27 ++++++++++++++- .../pctsec/model/api/request/pssaas.java | 2 +- .../pctsec/rest/v1alpha1/ScanResource.java | 27 +++++++++++---- 10 files changed, 106 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/redhat/pctsec/model/api/request/Component.java diff --git a/hack/pssaas-request-curl.sh b/hack/pssaas-request-curl.sh index 52e80a2..975735d 100755 --- a/hack/pssaas-request-curl.sh +++ b/hack/pssaas-request-curl.sh @@ -1,4 +1,4 @@ #!/bin/bash -curl -H 'Content-Type: application/json' -d '@sample-pssaas.json' localhost:8080/Scan/PSSaaS -vv -curl -H 'Content-Type: application/json' -d '@sample-pssaas-bad.json' localhost:8080/Scan/PSSaaS -vv +curl -H 'Content-Type: application/json' -d '@sample-pssaas.json' localhost:8080/api/v1a/Scan/PSSaaS -vv +curl -H 'Content-Type: application/json' -d '@sample-pssaas-bad.json' localhost:8080/api/v1a/Scan/PSSaaS -vv diff --git a/src/main/java/com/redhat/pctsec/model/Scan.java b/src/main/java/com/redhat/pctsec/model/Scan.java index f4cbcdc..04b67ad 100644 --- a/src/main/java/com/redhat/pctsec/model/Scan.java +++ b/src/main/java/com/redhat/pctsec/model/Scan.java @@ -1,6 +1,7 @@ package com.redhat.pctsec.model; import jakarta.persistence.*; +import jakarta.transaction.Transactional; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotNull; import org.hibernate.annotations.CreationTimestamp; @@ -59,6 +60,7 @@ public class Scan { this.email = email; } + public ScanRequests getScanRequests() { return scanRequests; } @@ -105,7 +107,7 @@ public class Scan { @Email private String email; - @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER) + @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY) @JoinColumn(name = "scan_requests_id", referencedColumnName = "id") public ScanRequests scanRequests; } diff --git a/src/main/java/com/redhat/pctsec/model/ScanRequest.java b/src/main/java/com/redhat/pctsec/model/ScanRequest.java index 04da19a..0ec1851 100644 --- a/src/main/java/com/redhat/pctsec/model/ScanRequest.java +++ b/src/main/java/com/redhat/pctsec/model/ScanRequest.java @@ -42,10 +42,10 @@ public class ScanRequest { private RequestType type; - @OneToOne + @OneToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "brew_build_id", referencedColumnName = "id") public BrewBuild brewBuild; - @OneToOne + @OneToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "pnc_build_id", referencedColumnName = "id") public PNCBuild pncBuild; @OneToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL) diff --git a/src/main/java/com/redhat/pctsec/model/ScanRequests.java b/src/main/java/com/redhat/pctsec/model/ScanRequests.java index 4d52f3d..06357b8 100644 --- a/src/main/java/com/redhat/pctsec/model/ScanRequests.java +++ b/src/main/java/com/redhat/pctsec/model/ScanRequests.java @@ -9,6 +9,7 @@ import java.util.*; import java.util.stream.Collectors; import jakarta.persistence.*; +import jakarta.transaction.Transactional; @ApplicationScoped @Entity @@ -39,7 +40,9 @@ public class ScanRequests { public ScanRequests(pssaas pssaas){ this(); - //Iterate scan payload and create scans + pssaas.componentList.stream().filter(c -> c.getType().equals("git")).forEach(g -> this.addGit(g.getRepo().toString(), g.getRef())); + pssaas.componentList.stream().filter(c -> c.getType().equals("brew")).forEach(g -> this.addBrewBuild(g.getBuildId())); + pssaas.componentList.stream().filter(c -> c.getType().equals("pnc")).forEach(g -> this.addPNCBuild(g.getBuildId())); } public ScanRequests(scanChain scanchain){ diff --git a/src/main/java/com/redhat/pctsec/model/ScanTask.java b/src/main/java/com/redhat/pctsec/model/ScanTask.java index 3c1cddb..e45a89e 100644 --- a/src/main/java/com/redhat/pctsec/model/ScanTask.java +++ b/src/main/java/com/redhat/pctsec/model/ScanTask.java @@ -1,6 +1,7 @@ package com.redhat.pctsec.model; +import io.vertx.core.eventbus.impl.EventBusImpl; import io.vertx.mutiny.core.eventbus.EventBus; import jakarta.enterprise.context.Dependent; import jakarta.inject.Inject; @@ -27,6 +28,7 @@ public class ScanTask { this(); this.scanRequest = scanRequest; this.bus = scanRequest.getBus(); + //this.bus = new EventBus(new EventBusImpl()); } diff --git a/src/main/java/com/redhat/pctsec/model/api/request/Component.java b/src/main/java/com/redhat/pctsec/model/api/request/Component.java new file mode 100644 index 0000000..7abc2d3 --- /dev/null +++ b/src/main/java/com/redhat/pctsec/model/api/request/Component.java @@ -0,0 +1,17 @@ +package com.redhat.pctsec.model.api.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +import java.net.URI; + +@JsonDeserialize(using = ComponentJsonDeserializer.class) +public interface Component { + + public String getType(); + + public String getBuildId(); + + public URI getRepo(); + + public String getRef(); +} diff --git a/src/main/java/com/redhat/pctsec/model/api/request/build.java b/src/main/java/com/redhat/pctsec/model/api/request/build.java index 52e60eb..b89d4ec 100644 --- a/src/main/java/com/redhat/pctsec/model/api/request/build.java +++ b/src/main/java/com/redhat/pctsec/model/api/request/build.java @@ -4,22 +4,46 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import jakarta.validation.constraints.NotNull; +import java.net.URI; + @JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({ "type", "build-id" }) -public class build { - @NotNull - @JsonProperty("type") +public class build implements Component { + public final String type; - @NotNull - @JsonProperty("build-id") + public final String buildId; public build(@NotNull String type, @NotNull String buildId) { this.type = type; this.buildId = buildId; } + + @Override + @NotNull + @JsonProperty("type") + public String getType() { + return this.type; + } + + @NotNull + @JsonProperty("build-id") + @Override + public String getBuildId() { + return this.buildId; + } + + @Override + public URI getRepo() { + return URI.create(""); + } + + @Override + public String getRef() { + return ""; + } } diff --git a/src/main/java/com/redhat/pctsec/model/api/request/git.java b/src/main/java/com/redhat/pctsec/model/api/request/git.java index a9c4beb..33a2c81 100644 --- a/src/main/java/com/redhat/pctsec/model/api/request/git.java +++ b/src/main/java/com/redhat/pctsec/model/api/request/git.java @@ -13,7 +13,7 @@ import java.net.URI; "repo", "ref" }) -public class git { +public class git implements Component{ @NotNull @JsonProperty("type") public final static String type = "git"; @@ -25,4 +25,29 @@ public class git { @NotNull @JsonProperty("ref") public String ref; + + public git(@NotNull URI repo, @NotNull String ref) { + this.repo = repo; + this.ref = ref; + } + + @Override + public String getType() { + return this.type; + } + + @Override + public String getBuildId() { + return ""; + } + + @Override + public URI getRepo() { + return this.repo; + } + + @Override + public String getRef() { + return this.ref; + } } \ No newline at end of file diff --git a/src/main/java/com/redhat/pctsec/model/api/request/pssaas.java b/src/main/java/com/redhat/pctsec/model/api/request/pssaas.java index 9a62333..292353b 100644 --- a/src/main/java/com/redhat/pctsec/model/api/request/pssaas.java +++ b/src/main/java/com/redhat/pctsec/model/api/request/pssaas.java @@ -65,6 +65,6 @@ public class pssaas { @Size(min = 1) @Valid @NotNull - public Set componentList; + public Set componentList; } diff --git a/src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java b/src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java index f160b18..5e8f10d 100644 --- a/src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java +++ b/src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java @@ -3,6 +3,7 @@ package com.redhat.pctsec.rest.v1alpha1; import com.redhat.pctsec.model.*; import com.redhat.pctsec.model.api.request.pssaas; import com.redhat.pctsec.model.jpa.ScanRepository; +import io.quarkus.security.Authenticated; import io.vertx.mutiny.core.eventbus.EventBus; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; @@ -29,14 +30,26 @@ public class ScanResource { @POST @Path("PSSaaS") @Consumes({ "application/json" }) - public Integer createScans(@Valid pssaas scanRequest) + @Transactional + @Authenticated + public Scan createPSSAAS(@Valid pssaas scanRequest) { - //Validate JSON - - //CreateScanCollection - - //Return ScanCollectionID - return 1; + ScanRequests scanRequests = new ScanRequests(scanRequest); + Scan s = new Scan(); + s.setRequestor("cpaas"); + s.setScanRequests(scanRequests); + sr.persist(s); + return s; + } + @POST + @Path("PSSaaS/run") + @Consumes({ "application/json" }) + @Transactional + @Authenticated + public List createRunPSSAAS(@Valid pssaas scanRequest) + { + Scan s = this.createPSSAAS(scanRequest); + return s.scanRequests.execute(bus); } @GET