Browse Source

Add tekton task, use defaultClient, injection woes

refactor_rebased
Jonathan Christison 3 years ago committed by Jonathan Christison
parent
commit
6b9aa75213
  1. 17
      pom.xml
  2. 41
      src/main/java/com/redhat/pctsec/model/Scan.java
  3. 30
      src/main/java/com/redhat/pctsec/model/ScanCollection.java
  4. 2
      src/main/java/com/redhat/pctsec/model/scanChain.java
  5. 2
      src/main/java/com/redhat/pctsec/rest/v1alpha1/Kerberos.java
  6. 22
      src/main/java/com/redhat/pctsec/rest/v1alpha1/Scan.java
  7. 49
      src/main/java/com/redhat/pctsec/tekton/brewTaskRun.java
  8. 6
      src/main/java/com/redhat/pctsec/tekton/scmUrlPipelineRun.java
  9. 1
      src/main/resources/application.properties

17
pom.xml

@ -58,6 +58,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-reactive-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
@ -71,6 +75,19 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.smallrye</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>make-index</id>
<goals>
<goal>jandex</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>

41
src/main/java/com/redhat/pctsec/model/Scan.java

@ -1,2 +1,41 @@
package com.redhat.pctsec.model;public class Scan {
package com.redhat.pctsec.model;
import com.redhat.pctsec.tekton.brewTaskRun;
import com.redhat.pctsec.tekton.scmUrlPipelineRun;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import java.util.HashMap;
@ApplicationScoped
public class Scan {
private HashMap<String, String> metadata;
private HashMap<String, String> oshScanOptions;
private String brewBuild;
private HashMap<String, String> scmurl;
@Inject
brewTaskRun btr;
@Inject
scmUrlPipelineRun plr;
public Scan(String brewBuildId)
{
this.brewBuild = brewBuildId;
}
public Scan(String repo, String ref)
{
this.scmurl = new HashMap<>();
this.scmurl.put("repo", repo);
this.scmurl.put("ref", repo);
}
public void executeScan(){
if(this.brewBuild != null && !this.brewBuild.trim().isEmpty()){
btr = new brewTaskRun();
btr.invokeScanTask(this.brewBuild);
}
}
}

30
src/main/java/com/redhat/pctsec/model/ScanCollection.java

@ -1,4 +1,34 @@
package com.redhat.pctsec.model;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
@ApplicationScoped
public class ScanCollection {
//
private Set<Scan> scans = new HashSet<>();
private HashMap<String, String> globalScanProperties;
public ScanCollection(pssaas pssaas){
//Iterate scan payload and create scans
}
public ScanCollection(String repo, String rev){
//shortcut for single scans
scans.add(new Scan(repo, rev));
}
public ScanCollection(String brewBuildId){
scans.add(new Scan(brewBuildId));
}
//Create tekton pipeline/taskrun
public void execute(){
for(Scan s : scans){
s.executeScan();
}
}
}

2
src/main/java/com/redhat/pctsec/model/scanchain.java → src/main/java/com/redhat/pctsec/model/scanChain.java

@ -1,4 +1,4 @@
package com.redhat.pctsec.model;
public class scanchain {
public class scanChain {
}

2
src/main/java/com/redhat/pctsec/rest/v1alpha1/Kerberos.java

@ -1,6 +1,7 @@
package com.redhat.pctsec.rest.v1alpha1;
import io.quarkiverse.kerberos.KerberosPrincipal;
import io.quarkus.arc.profile.UnlessBuildProfile;
import io.quarkus.security.Authenticated;
import io.quarkus.security.identity.SecurityIdentity;
import jakarta.inject.Inject;
@ -8,6 +9,7 @@ import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
@UnlessBuildProfile("dev")
@Path("/Kerberos")
@Authenticated
public class Kerberos {

22
src/main/java/com/redhat/pctsec/rest/v1alpha1/Scan.java

@ -2,14 +2,19 @@ package com.redhat.pctsec.rest.v1alpha1;
import com.redhat.pctsec.model.ScanCollection;
import com.redhat.pctsec.model.pssaas;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.validation.Valid;
import jakarta.ws.rs.*;
import org.jboss.resteasy.reactive.RestQuery;
import java.util.HashMap;
import java.util.List;
@Path("/Scan")
@ApplicationScoped
@Path("/api/v1a/Scan")
public class Scan {
HashMap<String, ScanCollection> scanCollection = new HashMap<>();
@POST
@Path("PSSaaS")
@Consumes({ "application/json" })
@ -18,6 +23,7 @@ public class Scan {
//Validate JSON
//CreateScanCollection
//Return ScanCollectionID
return 1;
}
@ -25,14 +31,22 @@ public class Scan {
@GET
@Path("{id}")
public ScanCollection scanRequest(String id){
ScanCollection sr = new ScanCollection();
return sr;
return scanCollection.get(id.toString());
}
@GET
@Path("{id}/run")
public String scanRequestExe(String id){
scanCollection.get(id.toString()).execute();
return "We'd normally have a json payload here, with pipeline UID";
}
@GET
@Path("single/git")
public String singleGit(@RestQuery String repo, @RestQuery String ref)
{
ScanCollection sc = new ScanCollection(repo, ref);
scanCollection.put("1",sc);
return "restult";
}
@ -40,6 +54,8 @@ public class Scan {
@Path("single/brew")
public String singleGit(@RestQuery String brewId)
{
ScanCollection sc = new ScanCollection(brewId);
scanCollection.put("2",sc);
return "result";
}
}

49
src/main/java/com/redhat/pctsec/tekton/brewTaskRun.java

@ -0,0 +1,49 @@
package com.redhat.pctsec.tekton;
import io.fabric8.tekton.client.DefaultTektonClient;
import io.fabric8.tekton.client.TektonClient;
import io.fabric8.tekton.pipeline.v1beta1.ArrayOrString;
import io.fabric8.tekton.pipeline.v1beta1.Param;
import io.fabric8.tekton.pipeline.v1beta1.TaskRun;
import io.fabric8.tekton.pipeline.v1beta1.TaskRunBuilder;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Singleton;
import org.apache.commons.lang3.RandomStringUtils;
import jakarta.inject.Inject;
@io.quarkus.arc.Unremovable
public class brewTaskRun {
public static final String NAMESPACE = "pct-security-tooling";
public static final String BUILD_ID = "buildId";
public static final String SCAN_PROFILE = "scanProfile";
public static final String TASK_REFERENCE = "osh-scan-task";
public static final String SERVICE_ACCOUNT = "osh";
//@Inject
TektonClient tektonClient = new DefaultTektonClient();
public String invokeScanTask(String buildId) {
// String buildId = "xterm-366-8.el9";
String scanProfile = "snyk-only-unstable";
// random taskrun name generating for now
TaskRun taskRun = new TaskRunBuilder().withNewMetadata().withName("osh-scan-taskrun-" + RandomStringUtils.randomAlphanumeric(8).toLowerCase())
.endMetadata()
.withNewSpec()
.withServiceAccountName(SERVICE_ACCOUNT)
.withNewTaskRef()
.withName(TASK_REFERENCE)
.endTaskRef()
.withParams(
new Param("buildId", new ArrayOrString(buildId)),
new Param("scanProfile", new ArrayOrString(scanProfile)))
.endSpec()
.build();
tektonClient.v1beta1().taskRuns().inNamespace(NAMESPACE).resource(taskRun).create();
return "Scan invoked";
}
}

6
src/main/java/com/redhat/pctsec/tekton/scmUrlPipelineRun.java

@ -0,0 +1,6 @@
package com.redhat.pctsec.tekton;
public class scmUrlPipelineRun {
}

1
src/main/resources/application.properties

@ -25,6 +25,7 @@
%stage.quarkus.openshift.service-account=osh-wrapper-client-sa
%stage.quarkus.openshift.labels.env=stage
%stage.quarkus.log.level=DEBUG
quarkus.arc.remove-unused-beans=false
#Only in Quarkus > 3.x
%stage.quarkus.openshift.route.tls.termination=edge

Loading…
Cancel
Save