diff --git a/pom.xml b/pom.xml
index 7fe8a2b..1641b36 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,10 @@
io.quarkus
quarkus-resteasy-reactive-jackson
+
+ org.apache.commons
+ commons-lang3
+
io.quarkus
quarkus-junit5
@@ -71,6 +75,19 @@
+
+ io.smallrye
+ jandex-maven-plugin
+ 3.1.1
+
+
+ make-index
+
+ jandex
+
+
+
+
${quarkus.platform.group-id}
quarkus-maven-plugin
diff --git a/src/main/java/com/redhat/pctsec/model/Scan.java b/src/main/java/com/redhat/pctsec/model/Scan.java
index 632dddb..530b10a 100644
--- a/src/main/java/com/redhat/pctsec/model/Scan.java
+++ b/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 metadata;
+ private HashMap oshScanOptions;
+ private String brewBuild;
+ private HashMap 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);
+ }
+ }
}
diff --git a/src/main/java/com/redhat/pctsec/model/ScanCollection.java b/src/main/java/com/redhat/pctsec/model/ScanCollection.java
index a6bc80a..6d443d8 100644
--- a/src/main/java/com/redhat/pctsec/model/ScanCollection.java
+++ b/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 scans = new HashSet<>();
+ private HashMap 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();
+ }
+ }
}
diff --git a/src/main/java/com/redhat/pctsec/model/scanchain.java b/src/main/java/com/redhat/pctsec/model/scanChain.java
similarity index 59%
rename from src/main/java/com/redhat/pctsec/model/scanchain.java
rename to src/main/java/com/redhat/pctsec/model/scanChain.java
index 9c4dcde..7cad38a 100644
--- a/src/main/java/com/redhat/pctsec/model/scanchain.java
+++ b/src/main/java/com/redhat/pctsec/model/scanChain.java
@@ -1,4 +1,4 @@
package com.redhat.pctsec.model;
-public class scanchain {
+public class scanChain {
}
diff --git a/src/main/java/com/redhat/pctsec/rest/v1alpha1/Kerberos.java b/src/main/java/com/redhat/pctsec/rest/v1alpha1/Kerberos.java
index ea27f19..0f337e3 100644
--- a/src/main/java/com/redhat/pctsec/rest/v1alpha1/Kerberos.java
+++ b/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 {
diff --git a/src/main/java/com/redhat/pctsec/rest/v1alpha1/Scan.java b/src/main/java/com/redhat/pctsec/rest/v1alpha1/Scan.java
index e369267..a16d818 100644
--- a/src/main/java/com/redhat/pctsec/rest/v1alpha1/Scan.java
+++ b/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 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";
}
}
diff --git a/src/main/java/com/redhat/pctsec/tekton/brewTaskRun.java b/src/main/java/com/redhat/pctsec/tekton/brewTaskRun.java
new file mode 100644
index 0000000..7d155f3
--- /dev/null
+++ b/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";
+ }
+
+}
diff --git a/src/main/java/com/redhat/pctsec/tekton/scmUrlPipelineRun.java b/src/main/java/com/redhat/pctsec/tekton/scmUrlPipelineRun.java
new file mode 100644
index 0000000..4f2f298
--- /dev/null
+++ b/src/main/java/com/redhat/pctsec/tekton/scmUrlPipelineRun.java
@@ -0,0 +1,6 @@
+package com.redhat.pctsec.tekton;
+
+public class scmUrlPipelineRun {
+
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 99f1ec9..52a73c3 100644
--- a/src/main/resources/application.properties
+++ b/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