From 354745f7a0604b901cfc34e78367ab82dc2b0281 Mon Sep 17 00:00:00 2001 From: Jonathan Christison Date: Sat, 1 Jul 2023 23:59:22 +0100 Subject: [PATCH] Still adding ORM --- pom.xml | 9 ++++ .../com/redhat/pctsec/model/BrewBuild.java | 7 ++++ .../com/redhat/pctsec/model/BuildType.java | 20 +++++---- .../java/com/redhat/pctsec/model/Git.java | 15 +++++++ .../com/redhat/pctsec/model/PNCBuild.java | 8 ++++ .../java/com/redhat/pctsec/model/Scan.java | 41 ++++++++++++++++++- .../com/redhat/pctsec/model/ScanRequest.java | 17 +++++++- .../com/redhat/pctsec/model/ScanRequests.java | 16 ++++---- .../pctsec/model/jpa/ScanRepository.java | 20 +++++++++ .../redhat/pctsec/model/osh/paramMapper.java | 40 +++++++++++++++++- .../pctsec/rest/v1alpha1/ScanResource.java | 35 +++++++++++++--- src/main/resources/application.properties | 7 +++- .../com/redhat/pctsec/GreetingResourceIT.java | 8 ---- .../redhat/pctsec/GreetingResourceTest.java | 21 ---------- .../pctsec/model/osh/paramMapperTest.java | 7 ++-- 15 files changed, 213 insertions(+), 58 deletions(-) create mode 100644 src/main/java/com/redhat/pctsec/model/jpa/ScanRepository.java delete mode 100644 src/test/java/com/redhat/pctsec/GreetingResourceIT.java delete mode 100644 src/test/java/com/redhat/pctsec/GreetingResourceTest.java diff --git a/pom.xml b/pom.xml index 0d831fd..1434c68 100644 --- a/pom.xml +++ b/pom.xml @@ -74,10 +74,19 @@ io.quarkus quarkus-smallrye-openapi + + + info.picocli + picocli + 4.7.4 + io.quarkus quarkus-junit5 diff --git a/src/main/java/com/redhat/pctsec/model/BrewBuild.java b/src/main/java/com/redhat/pctsec/model/BrewBuild.java index a8c6ec0..01b8239 100644 --- a/src/main/java/com/redhat/pctsec/model/BrewBuild.java +++ b/src/main/java/com/redhat/pctsec/model/BrewBuild.java @@ -1,14 +1,21 @@ package com.redhat.pctsec.model; +import jakarta.persistence.Entity; + import java.net.URI; import java.net.URL; +@Entity public class BrewBuild extends BuildType { public BrewBuild(String buildRef) { super(buildRef); } + public BrewBuild() { + super(); + } + @Override public URI SCMURL() { return null; diff --git a/src/main/java/com/redhat/pctsec/model/BuildType.java b/src/main/java/com/redhat/pctsec/model/BuildType.java index 25d738d..b056b16 100644 --- a/src/main/java/com/redhat/pctsec/model/BuildType.java +++ b/src/main/java/com/redhat/pctsec/model/BuildType.java @@ -1,18 +1,18 @@ package com.redhat.pctsec.model; import com.fasterxml.jackson.annotation.JsonProperty; -import jakarta.persistence.Column; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import java.net.URI; import java.net.URL; +import java.util.UUID; +@Entity +@DiscriminatorColumn(name="REF_TYPE") abstract public class BuildType { @Id @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; + private UUID id; @JsonProperty() @Column(name="buildref") @@ -23,7 +23,11 @@ abstract public class BuildType { this.buildRef = buildRef; } - abstract public URI SCMURL(void); - abstract public URL URL(void); - abstract public String revision(void); + public BuildType() { + + } + + abstract public URI SCMURL(); + abstract public URL URL(); + abstract public String revision(); } diff --git a/src/main/java/com/redhat/pctsec/model/Git.java b/src/main/java/com/redhat/pctsec/model/Git.java index 15eaddd..4a271fd 100644 --- a/src/main/java/com/redhat/pctsec/model/Git.java +++ b/src/main/java/com/redhat/pctsec/model/Git.java @@ -1,8 +1,23 @@ package com.redhat.pctsec.model; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + import java.net.URI; +import java.util.UUID; +@Entity public class Git { + public Git() { + super(); + } + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private UUID id; + private URI repo; private String ref; diff --git a/src/main/java/com/redhat/pctsec/model/PNCBuild.java b/src/main/java/com/redhat/pctsec/model/PNCBuild.java index 9cc9c6c..36f9b55 100644 --- a/src/main/java/com/redhat/pctsec/model/PNCBuild.java +++ b/src/main/java/com/redhat/pctsec/model/PNCBuild.java @@ -1,9 +1,16 @@ package com.redhat.pctsec.model; +import jakarta.persistence.Entity; + import java.net.URI; import java.net.URL; +@Entity public class PNCBuild extends BuildType{ + public PNCBuild() { + super(); + } + public PNCBuild(String buildRef) { super(buildRef); } @@ -27,5 +34,6 @@ public class PNCBuild extends BuildType{ //New type PNC Ref if(ref.length()!=14) return false; + return true; } } diff --git a/src/main/java/com/redhat/pctsec/model/Scan.java b/src/main/java/com/redhat/pctsec/model/Scan.java index e7c063a..ec1e0da 100644 --- a/src/main/java/com/redhat/pctsec/model/Scan.java +++ b/src/main/java/com/redhat/pctsec/model/Scan.java @@ -5,7 +5,7 @@ import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotNull; import java.util.Calendar; -import java.util.List; +import java.util.UUID; enum ScanState { CREATED, TRIGGERED, RUNNING, SUCCESS, FAIL; @@ -13,14 +13,51 @@ enum ScanState { @Entity public class Scan { + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getRequestor() { + return requestor; + } + + public void setRequestor(String requestor) { + this.requestor = requestor; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public ScanRequests getScanRequests() { + return scanRequests; + } + + public void setScanRequests(ScanRequests scanRequests) { + this.scanRequests = scanRequests; + } + @Id @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; + private UUID id; + + /* @OneToOne @NotNull @JoinColumn(name = "product_id", referencedColumnName = "id") private String productName; + */ + @Column(name="proudct_name") + private String productName; @Temporal(TemporalType.TIMESTAMP) @Column(name="creation_timestamp") diff --git a/src/main/java/com/redhat/pctsec/model/ScanRequest.java b/src/main/java/com/redhat/pctsec/model/ScanRequest.java index 1a51340..15c064b 100644 --- a/src/main/java/com/redhat/pctsec/model/ScanRequest.java +++ b/src/main/java/com/redhat/pctsec/model/ScanRequest.java @@ -7,27 +7,42 @@ import io.vertx.mutiny.core.eventbus.EventBus; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.inject.Singleton; -import jakarta.persistence.Entity; +import jakarta.persistence.*; import java.util.HashMap; +import java.util.UUID; enum RequestType{BREW, PNC, GIT} @ApplicationScoped @Entity public class ScanRequest { + @Transient @Inject EventBus bus; + @Id + @GeneratedValue + private UUID id; private String metadata; private String oshScanOptions; RequestType type; + + @OneToOne + @JoinColumn(name = "brew_build_id", referencedColumnName = "id") BrewBuild brewBuild; + @OneToOne + @JoinColumn(name = "pnc_build_id", referencedColumnName = "id") PNCBuild pncBuild; + @OneToOne + @JoinColumn(name = "git_id", referencedColumnName = "id") Git git; + public ScanRequest() { + } + public ScanRequest(BrewBuild brewBuild) { this.type = RequestType.BREW; diff --git a/src/main/java/com/redhat/pctsec/model/ScanRequests.java b/src/main/java/com/redhat/pctsec/model/ScanRequests.java index 359c6ad..c6ffa59 100644 --- a/src/main/java/com/redhat/pctsec/model/ScanRequests.java +++ b/src/main/java/com/redhat/pctsec/model/ScanRequests.java @@ -4,28 +4,28 @@ import com.redhat.pctsec.model.api.request.pssaas; import com.redhat.pctsec.model.api.request.scanChain; import jakarta.enterprise.context.ApplicationScoped; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; +import java.util.*; import jakarta.persistence.*; @ApplicationScoped @Entity +@Table(name="ScanRequests") public class ScanRequests { @Id @GeneratedValue - private Long id; + private UUID id; - @OneToMany + @OneToMany(fetch=FetchType.LAZY) @JoinColumn(name = "scan_request_id", referencedColumnName = "id") - private Set scanRequests; + private Set scanRequests = new HashSet<>(); - @Column(name="scan_properties") + + //@Column(name="scan_properties") private String scanProperties; - @Column(name="scan_metadata") + //@Column(name="scan_metadata") private String scanMetadata; diff --git a/src/main/java/com/redhat/pctsec/model/jpa/ScanRepository.java b/src/main/java/com/redhat/pctsec/model/jpa/ScanRepository.java new file mode 100644 index 0000000..afa3095 --- /dev/null +++ b/src/main/java/com/redhat/pctsec/model/jpa/ScanRepository.java @@ -0,0 +1,20 @@ +package com.redhat.pctsec.model.jpa; + +import com.redhat.pctsec.model.Scan; +import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase; +import io.smallrye.mutiny.Uni; +import jakarta.enterprise.context.ApplicationScoped; + +import java.util.UUID; + +@ApplicationScoped +public class ScanRepository implements PanacheRepositoryBase { + + + + public Uni findByProduct(String product) + { + return find("product", product).firstResult(); + } + +} diff --git a/src/main/java/com/redhat/pctsec/model/osh/paramMapper.java b/src/main/java/com/redhat/pctsec/model/osh/paramMapper.java index 83968eb..dc0ed64 100644 --- a/src/main/java/com/redhat/pctsec/model/osh/paramMapper.java +++ b/src/main/java/com/redhat/pctsec/model/osh/paramMapper.java @@ -1,8 +1,12 @@ package com.redhat.pctsec.model.osh; + +import jakarta.inject.Singleton; import picocli.CommandLine; import picocli.CommandLine.Option; import picocli.CommandLine.Parameters; + + public class paramMapper { @Option(names = {"-p", "--profile"}, description = "list of analyzers to use (see command 'list-\n" + @@ -28,7 +32,41 @@ public class paramMapper { " of a local file") private String brewBuild; + public paramMapper(){} + public paramMapper(String params){ - new CommandLine(this).parseArgs("params"); + new CommandLine(this).parseArgs(params.split(("\\s+"))); + } + + public String getProfile() { + return profile; + } + + public void setProfile(String profile) { + this.profile = profile; + } + + public String getAnalyzers() { + return analyzers; + } + + public void setAnalyzers(String analyzers) { + this.analyzers = analyzers; + } + + public String getTarballBuildScript() { + return tarballBuildScript; + } + + public void setTarballBuildScript(String tarballBuildScript) { + this.tarballBuildScript = tarballBuildScript; + } + + public String getBrewBuild() { + return brewBuild; + } + + public void setBrewBuild(String brewBuild) { + this.brewBuild = brewBuild; } } 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 09a4a53..72276d4 100644 --- a/src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java +++ b/src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java @@ -1,19 +1,28 @@ package com.redhat.pctsec.rest.v1alpha1; +import com.redhat.pctsec.model.Git; import com.redhat.pctsec.model.Scan; +import com.redhat.pctsec.model.ScanRequest; import com.redhat.pctsec.model.ScanRequests; import com.redhat.pctsec.model.api.request.pssaas; +import com.redhat.pctsec.model.jpa.ScanRepository; import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import jakarta.validation.Valid; import jakarta.ws.rs.*; import org.jboss.resteasy.reactive.RestQuery; import java.util.HashMap; +import java.util.List; +import java.util.UUID; @ApplicationScoped @Path("/api/v1a/Scan") public class ScanResource { + @Inject + ScanRepository sr; + @POST @Path("PSSaaS") @Consumes({ "application/json" }) @@ -27,10 +36,17 @@ public class ScanResource { return 1; } + @GET + @Produces({"application/json"}) + public List list() + { + return sr.listAll(); + } @GET @Path("{id}") + @Produces({"application/json"}) public Scan scanRequest(String id){ - return null; + return sr.findById(UUID.fromString(id)); } @GET @@ -41,15 +57,24 @@ public class ScanResource { @GET @Path("single/git") - public String singleGit(@RestQuery String repo, @RestQuery String ref) + @Produces({"application/json"}) + public Scan singleGit(@RestQuery String repo, @RestQuery String ref) { - return "restult"; + + //ScanRequest scanRequest = new ScanRequest(new Git(repo, ref)); + ScanRequests scanRequests = new ScanRequests(); + scanRequests.addGit(repo,ref); + Scan s = new Scan(); + s.setScanRequests(scanRequests); + sr.persist(s); + return s; } @GET @Path("single/brew") - public String singleGit(@RestQuery String brewId) + @Produces({"application/json"}) + public Scan singleGit(@RestQuery String brewId) { - return "result"; + return null; } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2cb4c25..8f8a1d1 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -21,8 +21,13 @@ #%dev.quarkus.kerberos.keytab-path= HTTP_osh-pct-security-tooling.apps.ocp-c1.prod.psi.redhat.com@IPA.REDHAT.COM.keytab #%dev.quarkus.kerberos.service-principal-name= HTTP/osh-pct-security-tooling.apps.ocp-c1.prod.psi.redhat.com@IPA.REDHAT.COM +%dev.quarkus.datasource.db-kind = postgresql +%dev.quarkus.datasource.username = quarkus +%dev.quarkus.datasource.password = quarkus +%dev.quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/hibernate_db +%dev.quarkus.hibernate-orm.database.generation=drop-and-create #Always provide swagger ui -quarkus.swagger-ui.always-include=true +%dev.quarkus.swagger-ui.always-include=true %stage.quarkus.openshift.name=osh %stage.quarkus.openshift.service-account=osh-wrapper-client-sa diff --git a/src/test/java/com/redhat/pctsec/GreetingResourceIT.java b/src/test/java/com/redhat/pctsec/GreetingResourceIT.java deleted file mode 100644 index 5feb3d8..0000000 --- a/src/test/java/com/redhat/pctsec/GreetingResourceIT.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.redhat.pctsec; - -import io.quarkus.test.junit.QuarkusIntegrationTest; - -@QuarkusIntegrationTest -public class GreetingResourceIT extends GreetingResourceTest { - // Execute the same tests but in packaged mode. -} diff --git a/src/test/java/com/redhat/pctsec/GreetingResourceTest.java b/src/test/java/com/redhat/pctsec/GreetingResourceTest.java deleted file mode 100644 index affe5a5..0000000 --- a/src/test/java/com/redhat/pctsec/GreetingResourceTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.redhat.pctsec; - -import io.quarkus.test.junit.QuarkusTest; -import org.junit.jupiter.api.Test; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; - -@QuarkusTest -public class GreetingResourceTest { - - @Test - public void testHelloEndpoint() { - given() - .when().get("/hello") - .then() - .statusCode(200) - .body(is("Hello from RESTEasy Reactive")); - } - -} \ No newline at end of file diff --git a/src/test/java/com/redhat/pctsec/model/osh/paramMapperTest.java b/src/test/java/com/redhat/pctsec/model/osh/paramMapperTest.java index e1616b8..f24ee8c 100644 --- a/src/test/java/com/redhat/pctsec/model/osh/paramMapperTest.java +++ b/src/test/java/com/redhat/pctsec/model/osh/paramMapperTest.java @@ -3,6 +3,7 @@ package com.redhat.pctsec.model.osh; import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; +import java.lang.String; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; @@ -10,12 +11,12 @@ import static org.hamcrest.CoreMatchers.is; @QuarkusTest public class paramMapperTest { - @Inject - paramMapper pm; + @Test public void testSnykScan() { - pm = new paramMapper("-p snyk-only-unstable --tarball-build-script=\":\""); + paramMapper pm = new paramMapper("-p snyk-only-unstable --tarball-build-script=\":\""); + System.out.println(pm); } } \ No newline at end of file