Compare commits

...

6 Commits

Author SHA1 Message Date
Jonathan Christison 2fb746abae Add scanchain endpoint 3 years ago
Nicholas Caughey 9e175ca403 Merge branch '12-add-pnc-build-support' into 'main' 3 years ago
Jonathan Christison bad8b847ec Remove PncService for now 3 years ago
Jonathan Christison 87f45b8329 Give up on using PNC rest client for now roll our own 3 years ago
Jonathan Christison c7bd13c3ac Attempt to add PNC Client (Currently Broken) 3 years ago
Jonathan Christison 421dce3b6c Merge branch 'refactor' into 'main' 3 years ago
  1. 20
      pom.xml
  2. 42
      src/main/java/com/redhat/pctsec/model/PNCBuild.java
  3. 5
      src/main/java/com/redhat/pctsec/model/ScanRequests.java
  4. 31
      src/main/java/com/redhat/pctsec/model/api/request/scanChain.java
  5. 34
      src/main/java/com/redhat/pctsec/model/api/request/scanChainGit.java
  6. 12
      src/main/java/com/redhat/pctsec/model/api/service/AltPncService.java
  7. 4
      src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanRequestsResource.java
  8. 28
      src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java
  9. 6
      src/main/resources/application.properties
  10. 19
      src/test/java/com/redhat/pctsec/model/test/PNCBuildTest.java
  11. 3
      src/test/java/com/redhat/pctsec/model/test/paramMapperTest.java

20
pom.xml

@ -12,7 +12,7 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id> <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id> <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>3.1.2.Final</quarkus.platform.version> <quarkus.platform.version>3.1.3.Final</quarkus.platform.version>
<skipITs>true</skipITs> <skipITs>true</skipITs>
<surefire-plugin.version>3.0.0</surefire-plugin.version> <surefire-plugin.version>3.0.0</surefire-plugin.version>
</properties> </properties>
@ -87,6 +87,24 @@
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-config</artifactId> <artifactId>quarkus-kubernetes-config</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.jboss.pnc</groupId>
<artifactId>common</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.jboss.pnc</groupId>
<artifactId>rest-client</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client-reactive-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client-reactive</artifactId>
</dependency>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId> <artifactId>quarkus-junit5</artifactId>

42
src/main/java/com/redhat/pctsec/model/PNCBuild.java

@ -1,15 +1,48 @@
package com.redhat.pctsec.model; package com.redhat.pctsec.model;
import com.redhat.pctsec.model.api.service.AltPncService;
//import com.redhat.pctsec.model.api.service.PncService;
import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Transient;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.pnc.dto.Build;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
@Entity @Entity
public class PNCBuild extends BuildType{ public class PNCBuild extends BuildType{
@Transient
public static final String apiUrl = ConfigProvider.getConfig().getValue("pnc.api-url",String.class);
@Transient
private static final AltPncService pnc = QuarkusRestClientBuilder.newBuilder().baseUri(URI.create(apiUrl)).build(AltPncService.class);
/*
@Transient
PncService pnc;
*/
@Transient
Build build;
private URI SCMURL;
private String revision;
public PNCBuild() { public PNCBuild() {
super(); super();
} }
public Build getBuild() {
if(build == null)
build = pnc.getBuild(this.buildRef);
return build;
}
public PNCBuild(String buildRef) { public PNCBuild(String buildRef) {
super(buildRef); super(buildRef);
@ -17,7 +50,10 @@ public class PNCBuild extends BuildType{
@Override @Override
public URI SCMURL() { public URI SCMURL() {
return null; if(SCMURL == null)
SCMURL = URI.create(getBuild().getScmUrl());
return this.SCMURL;
} }
@Override @Override
@ -27,7 +63,9 @@ public class PNCBuild extends BuildType{
@Override @Override
public String revision() { public String revision() {
return null; if(revision == null)
revision = getBuild().getScmTag();
return revision;
} }
public static boolean isValidRef(String ref){ public static boolean isValidRef(String ref){

5
src/main/java/com/redhat/pctsec/model/ScanRequests.java

@ -44,8 +44,11 @@ public class ScanRequests {
pssaas.componentList.stream().filter(c -> c.getType().equals("pnc")).forEach(g -> this.addPNCBuild(g.getBuildId())); pssaas.componentList.stream().filter(c -> c.getType().equals("pnc")).forEach(g -> this.addPNCBuild(g.getBuildId()));
} }
public ScanRequests(scanChain scanchain){
public ScanRequests(scanChain scanChain){
this(); this();
scanChain.urls.stream().forEach(g -> this.addGit(g.getRepo().toString(), g.getRef()));
} }
//public ScanRequests(String repo, String rev){ //public ScanRequests(String repo, String rev){

31
src/main/java/com/redhat/pctsec/model/api/request/scanChain.java

@ -1,4 +1,35 @@
package com.redhat.pctsec.model.api.request; package com.redhat.pctsec.model.api.request;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.util.List;
import java.util.Set;
public class scanChain { public class scanChain {
@JsonProperty("product_name")
@JsonPropertyDescription("The product name associated with the scan.")
@NotNull
public String productName;
@JsonProperty("urls")
@JsonDeserialize(as = java.util.LinkedHashSet.class)
@JsonPropertyDescription("List of source urls to be scanned")
@Size(min = 1)
@Valid
@NotNull
public Set<scanChainGit> urls;
@JsonProperty("requestor")
@JsonPropertyDescription("The requesting user")
@NotNull
public String requestor;
} }

34
src/main/java/com/redhat/pctsec/model/api/request/scanChainGit.java

@ -0,0 +1,34 @@
package com.redhat.pctsec.model.api.request;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotNull;
import java.net.URI;
public class scanChainGit {
private URI repo;
private String ref;
public scanChainGit(@NotNull URI repo, @NotNull String ref) {
this.repo = repo;
this.ref = ref;
}
@NotNull
@JsonProperty("url")
public URI getRepo() {
return this.repo;
}
@NotNull
@JsonProperty("branch")
public String getRef() {
return this.ref;
}
}

12
src/main/java/com/redhat/pctsec/model/api/service/AltPncService.java

@ -0,0 +1,12 @@
package com.redhat.pctsec.model.api.service;
import jakarta.ws.rs.*;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.jboss.pnc.dto.Build;
@Path("pnc-rest/v2/builds")
@RegisterRestClient
public interface AltPncService {
@GET
@Path("{id}")
Build getBuild(@PathParam("id") String id);
}

4
src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanRequestsResource.java

@ -9,7 +9,7 @@ import io.quarkus.security.Authenticated;
import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.ws.rs.*; import jakarta.ws.rs.*;
import org.jboss.resteasy.reactive.common.NotImplementedYet; //import org.jboss.resteasy.reactive.common.NotImplementedYet;
import java.util.UUID; import java.util.UUID;
@ -35,7 +35,7 @@ public class ScanRequestsResource {
@Authenticated @Authenticated
public ScanRequests addScanRequest(String id, ScanRequest scanRequest) public ScanRequests addScanRequest(String id, ScanRequest scanRequest)
{ {
throw new NotImplementedYet(); throw new WebApplicationException("Not implemented");
} }
} }

28
src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java

@ -2,6 +2,7 @@ package com.redhat.pctsec.rest.v1alpha1;
import com.redhat.pctsec.model.*; import com.redhat.pctsec.model.*;
import com.redhat.pctsec.model.api.request.pssaas; import com.redhat.pctsec.model.api.request.pssaas;
import com.redhat.pctsec.model.api.request.scanChain;
import com.redhat.pctsec.model.jpa.ScanRepository; import com.redhat.pctsec.model.jpa.ScanRepository;
import io.quarkus.security.Authenticated; import io.quarkus.security.Authenticated;
import io.vertx.mutiny.core.eventbus.EventBus; import io.vertx.mutiny.core.eventbus.EventBus;
@ -12,6 +13,7 @@ import jakarta.validation.Valid;
import jakarta.ws.rs.*; import jakarta.ws.rs.*;
import org.jboss.resteasy.reactive.RestQuery; import org.jboss.resteasy.reactive.RestQuery;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -37,6 +39,7 @@ public class ScanResource {
ScanRequests scanRequests = new ScanRequests(scanRequest); ScanRequests scanRequests = new ScanRequests(scanRequest);
Scan s = new Scan(); Scan s = new Scan();
s.setRequestor("cpaas"); s.setRequestor("cpaas");
s.setProductName(scanRequest.productId);
s.setScanRequests(scanRequests); s.setScanRequests(scanRequests);
sr.persist(s); sr.persist(s);
return s; return s;
@ -52,6 +55,31 @@ public class ScanResource {
return s.scanRequests.execute(bus); return s.scanRequests.execute(bus);
} }
@POST
@Path("ScanChain")
@Consumes({ "application/json" })
@Transactional
@Authenticated
public Scan createScanChain(@Valid scanChain scanRequest)
{
ScanRequests scanRequests = new ScanRequests(scanRequest);
Scan s = new Scan();
s.setRequestor(scanRequest.requestor);
s.setProductName(scanRequest.productName);
s.setScanRequests(scanRequests);
sr.persist(s);
return s;
}
@POST
@Path("ScanChain/run")
@Consumes({ "application/json" })
@Transactional
@Authenticated
public List<ScanTask> createRunScanChain(@Valid scanChain scanRequest)
{
Scan s = this.createScanChain(scanRequest);
return s.scanRequests.execute(bus);
}
@GET @GET
@Path("All") @Path("All")
@Produces({"application/json"}) @Produces({"application/json"})

6
src/main/resources/application.properties

@ -57,6 +57,7 @@ quarkus.arc.remove-unused-beans=false
%stage.quarkus.openshift.route.target-port=https %stage.quarkus.openshift.route.target-port=https
%stage.quarkus.openshift.route.tls.insecure-edge-termination-policy=redirect %stage.quarkus.openshift.route.tls.insecure-edge-termination-policy=redirect
%stage.quarkus.openshift.namespace=pct-security-tooling %stage.quarkus.openshift.namespace=pct-security-tooling
quarkus.openshift.namespace=pct-security-tooling
########################################## ##########################################
# Kerberos Specifics # # Kerberos Specifics #
@ -80,5 +81,10 @@ tekton.pipeline.ref=osh-client-from-source
tekton.task.ref=osh-scan-task tekton.task.ref=osh-scan-task
tekton.service-account=${quarkus.openshift.service-account} tekton.service-account=${quarkus.openshift.service-account}
##########################################
# PNC Settings #
##########################################
pnc.api-url=http://orch.psi.redhat.com

19
src/test/java/com/redhat/pctsec/model/test/PNCBuildTest.java

@ -0,0 +1,19 @@
package com.redhat.pctsec.model.test;
import com.redhat.pctsec.model.PNCBuild;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;
@QuarkusTest
public class PNCBuildTest {
@Test
public void testBuildFetch(){
PNCBuild pb = new PNCBuild("AZAQZSPFDRQAA");
System.out.println(pb.SCMURL());
System.out.println(pb.revision());
}
}

3
src/test/java/com/redhat/pctsec/model/osh/paramMapperTest.java → src/test/java/com/redhat/pctsec/model/test/paramMapperTest.java

@ -1,5 +1,6 @@
package com.redhat.pctsec.model.osh; package com.redhat.pctsec.model.test;
import com.redhat.pctsec.model.osh.paramMapper;
import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.QuarkusTest;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
Loading…
Cancel
Save