Browse Source

Start adding picocli as way of verifying CLI args

refactor_future_hack
Jonathan Christison 3 years ago
parent
commit
72e3b0f0b3
  1. 9
      pom.xml
  2. 7
      src/main/java/com/redhat/pctsec/model/BrewBuild.java
  3. 1
      src/main/java/com/redhat/pctsec/model/BuildType.java
  4. 13
      src/main/java/com/redhat/pctsec/model/Git.java
  5. 11
      src/main/java/com/redhat/pctsec/model/PNCBuild.java
  6. 49
      src/main/java/com/redhat/pctsec/model/ScanRequest.java
  7. 28
      src/main/java/com/redhat/pctsec/model/ScanRequests.java
  8. 6
      src/main/java/com/redhat/pctsec/model/api/request/git.java
  9. 27
      src/main/java/com/redhat/pctsec/model/osh/paramMapper.java
  10. 8
      src/main/java/com/redhat/pctsec/rest/v1alpha1/ScanResource.java
  11. 21
      src/test/java/com/redhat/pctsec/model/osh/paramMapperTest.java

9
pom.xml

@ -74,6 +74,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-openapi</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-picocli</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
@ -84,11 +88,6 @@
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
<version>4.7.3</version>
</dependency>
</dependencies>
<build>
<plugins>

7
src/main/java/com/redhat/pctsec/model/BrewBuild.java

@ -18,4 +18,11 @@ public class BrewBuild extends BuildType {
public URL URL() {
return null;
}
@Override
public String revision() {
return null;
}
}

1
src/main/java/com/redhat/pctsec/model/BuildType.java

@ -25,4 +25,5 @@ abstract public class BuildType {
abstract public URI SCMURL(void);
abstract public URL URL(void);
abstract public String revision(void);
}

13
src/main/java/com/redhat/pctsec/model/Git.java

@ -0,0 +1,13 @@
package com.redhat.pctsec.model;
import java.net.URI;
public class Git {
private URI repo;
private String ref;
public Git(String repo, String ref) {
this.repo = URI.create(repo);
this.ref = ref;
}
}

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

@ -17,4 +17,15 @@ public class PNCBuild extends BuildType{
public URL URL() {
return null;
}
@Override
public String revision() {
return null;
}
public static boolean isValidRef(String ref){
//New type PNC Ref
if(ref.length()!=14)
return false;
}
}

49
src/main/java/com/redhat/pctsec/model/ScanRequest.java

@ -1,52 +1,57 @@
package com.redhat.pctsec.model;
import com.redhat.pctsec.model.api.request.git;
import com.redhat.pctsec.tekton.brewTaskRun;
import com.redhat.pctsec.tekton.scmUrlPipelineRun;
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 java.util.HashMap;
enum RequestType{BREW, PNC, GIT}
@ApplicationScoped
abstract public class ScanRequest {
@Entity
public class ScanRequest {
@Inject
EventBus bus;
private HashMap<String, String> metadata;
private HashMap<String, String> oshScanOptions;
private String metadata;
private String oshScanOptions;
<<<<<<< HEAD
//@Inject
brewTaskRun btr;
RequestType type;
BrewBuild brewBuild;
PNCBuild pncBuild;
Git git;
//@Inject
scmUrlPipelineRun plr;
public ScanRequest(BrewBuild brewBuild)
{
this.type = RequestType.BREW;
this.brewBuild = brewBuild;
}
public ScanRequest(PNCBuild pncBuild)
{
this.type = RequestType.PNC;
this.pncBuild = pncBuild;
}
public ScanRequest(String brewBuildId)
public ScanRequest(Git git)
{
this.brewBuild = brewBuildId;
this.type = RequestType.GIT;
this.git = git;
}
public ScanRequest(String repo, String ref)
{
this.scmurl = new HashMap<>();
this.scmurl.put("repo", repo);
this.scmurl.put("ref", ref);
this.git = new Git(repo, ref);
}
public void executeScan(){
if(this.brewBuild != null && !this.brewBuild.trim().isEmpty()){
btr = new brewTaskRun();
btr.invokeScanTask(this.brewBuild);
}
else if (this.scmurl != null && !this.scmurl.isEmpty())
{
plr = new scmUrlPipelineRun();
plr.invokeOshScmScanPipeline(this.scmurl.get("repo"), this.scmurl.get("ref"));
}
//Drop self on event bus for tekton handler
}
}

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

@ -1,6 +1,7 @@
package com.redhat.pctsec.model;
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;
@ -24,6 +25,9 @@ public class ScanRequests {
@Column(name="scan_properties")
private String scanProperties;
@Column(name="scan_metadata")
private String scanMetadata;
public ScanRequests(){
//Default to the Snyk scan
@ -31,26 +35,38 @@ public class ScanRequests {
}
public ScanRequests(pssaas pssaas){
this();
//Iterate scan payload and create scans
}
public ScanRequests(String repo, String rev){
//shortcut for single scans
scanRequests.add(new ScanRequest(repo, rev));
public ScanRequests(scanChain scanchain){
this();
}
//public ScanRequests(String repo, String rev){
// //shortcut for single scans
// scanRequests.add(new ScanRequest(repo, rev));
//}
/*
public ScanRequests(String brewBuildId){
scanRequests.add(new ScanRequest(brewBuildId));
scanRequests.add(new ScanRequest(new B));
}
*/
public void addBrewBuild(String brewBuildId)
{
scanRequests.add(new ScanRequest(brewBuildId));
scanRequests.add(new ScanRequest(new BrewBuild(brewBuildId)));
}
public void addGit(String repo, String rev)
{
scanRequests.add(new ScanRequest(repo, rev));
scanRequests.add(new ScanRequest(new Git(repo, rev)));
}
public void addPNCBuild(String pncBuildId)
{
scanRequests.add(new ScanRequest(new PNCBuild(pncBuildId)));
}
//Create tekton pipeline/taskrun

6
src/main/java/com/redhat/pctsec/model/api/request/git.java

@ -5,6 +5,8 @@ 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",
@ -18,9 +20,9 @@ public class git {
@NotNull
@JsonProperty("repo")
public String repo;
public URI repo;
@NotNull
@JsonProperty("repo")
@JsonProperty("ref")
public String ref;
}

27
src/main/java/com/redhat/pctsec/model/osh/paramMapper.java

@ -1,7 +1,34 @@
package com.redhat.pctsec.model.osh;
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" +
" analyzers'); use comma as a separator: e.g. \"\n" +
" --analyzer=gcc,clang,cppcheck\"")
private String profile;
@Option(names = {"-a", "--analyzer"}, description = "list of analyzers to use (see command 'list-\n" +
" analyzers'); use comma as a separator: e.g. \"\n" +
" --analyzer=gcc,clang,cppcheck\"")
private String analyzers;
@Option(names = {"--tarball-build-script"}, description = "With this option osh-cli accepts path to\n" +
" tarball specified via first argument and then\n" +
" the tarball will be scanned. This option sets\n" +
" command which should build the package,\n" +
" usually this should be just \"make\", in case\n" +
" of packages which doesn't need to be built,\n" +
" just pass \"true\".\n")
private String tarballBuildScript;
@Option(names = {"--brew-build"}, description = "use a brew build (specified by NVR) instead\n" +
" of a local file")
private String brewBuild;
public paramMapper(String params){
new CommandLine(this).parseArgs("params");
}
}

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

@ -14,7 +14,6 @@ import java.util.HashMap;
@Path("/api/v1a/Scan")
public class ScanResource {
HashMap<String, ScanRequests> scanCollection = new HashMap<>();
@POST
@Path("PSSaaS")
@Consumes({ "application/json" })
@ -31,13 +30,12 @@ public class ScanResource {
@GET
@Path("{id}")
public Scan scanRequest(String id){
return scanCollection.get(id.toString());
return null;
}
@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";
}
@ -45,8 +43,6 @@ public class ScanResource {
@Path("single/git")
public String singleGit(@RestQuery String repo, @RestQuery String ref)
{
ScanRequests sc = new ScanRequests(repo, ref);
scanCollection.put("1",sc);
return "restult";
}
@ -54,8 +50,6 @@ public class ScanResource {
@Path("single/brew")
public String singleGit(@RestQuery String brewId)
{
ScanRequests sc = new ScanRequests(brewId);
scanCollection.put("2",sc);
return "result";
}
}

21
src/test/java/com/redhat/pctsec/model/osh/paramMapperTest.java

@ -0,0 +1,21 @@
package com.redhat.pctsec.model.osh;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
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=\":\"");
}
}
Loading…
Cancel
Save