diff --git a/pom.xml b/pom.xml index 80023f7..48284d0 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ org.pqca cbomkit-lib - 1.0.3 + 1.1.0 diff --git a/src/main/java/org/pqca/Main.java b/src/main/java/org/pqca/Main.java index 382272f..d9572f1 100644 --- a/src/main/java/org/pqca/Main.java +++ b/src/main/java/org/pqca/Main.java @@ -23,14 +23,20 @@ import java.io.File; import java.io.FileWriter; import java.util.Arrays; -import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import org.pqca.indexing.IndexingService; +import org.pqca.indexing.go.GoIndexService; import org.pqca.indexing.java.JavaIndexService; import org.pqca.indexing.python.PythonIndexService; import org.pqca.scanning.CBOM; +import org.pqca.scanning.Language; import org.pqca.scanning.ScanResultDTO; +import org.pqca.scanning.ScannerService; +import org.pqca.scanning.go.GoScannerService; import org.pqca.scanning.java.JavaScannerService; import org.pqca.scanning.python.PythonScannerService; import org.slf4j.Logger; @@ -69,22 +75,30 @@ public static void main(@Nonnull String[] args) throws Exception { .collect(Collectors.toList()); final String languagesStr = System.getenv("CBOMKIT_LANGUAGES"); - final List languages = - languagesStr == null || languagesStr.isEmpty() - ? Collections.emptyList() + List configuredLanguages = + languagesStr == null || languagesStr.trim().isEmpty() + ? Arrays.asList(Language.values()) : Arrays.stream(languagesStr.split(",")) - .map(s -> s.trim().toLowerCase()) + .map(s -> s.trim()) + .map(String::toUpperCase) + .map(Language::valueOf) .collect(Collectors.toList()); + // Statistics and aggegator + long scanningTime = 0; int numberOfScannedFiles = 0; int numberOfScannedLines = 0; CBOM consolidatedCBOM = null; - // Scan java - long scanningTime = 0; - if (languages.isEmpty() || languages.contains("java")) { + // Set up indexers and scanners + final Map indexers = new HashMap<>(); + final Map scanners = new HashMap<>(); + + // java + if (configuredLanguages.contains(Language.JAVA)) { final JavaIndexService javaIndexService = new JavaIndexService(projectDirectory); - javaIndexService.setExcludePatterns(excludePatterns); + indexers.put(Language.JAVA, javaIndexService); + final JavaScannerService javaScannerService = new JavaScannerService(projectDirectory); javaScannerService.setRequireBuild( Optional.ofNullable(System.getenv("CBOMKIT_JAVA_REQUIRE_BUILD")) @@ -97,33 +111,36 @@ public static void main(@Nonnull String[] args) throws Exception { javaScannerService.addJavaDependencyJar(System.getProperty("user.home") + "/.gradle"); javaScannerService.addJavaDependencyJar(System.getenv("CBOMKIT_JAVA_JAR_DIR")); javaScannerService.addJavaClassDir(projectDirectory.getAbsolutePath()); + scanners.put(Language.JAVA, javaScannerService); + } - ScanResultDTO javaResultDTO = - bomGenerator.generateBom(javaIndexService, javaScannerService); - consolidatedCBOM = javaResultDTO.cbom(); - numberOfScannedFiles += javaResultDTO.numberOfScannedFiles(); - numberOfScannedLines += javaResultDTO.numberOfScannedLines(); - scanningTime = javaResultDTO.endTime() - javaResultDTO.startTime(); + // python + if (configuredLanguages.contains(Language.PYTHON)) { + indexers.put(Language.PYTHON, new PythonIndexService(projectDirectory)); + scanners.put(Language.PYTHON, new PythonScannerService(projectDirectory)); } - // Scan python - if (languages.isEmpty() || languages.contains("python")) { - final PythonIndexService pythonIndexService = new PythonIndexService(projectDirectory); - pythonIndexService.setExcludePatterns(excludePatterns); - final PythonScannerService pythonScannerService = - new PythonScannerService(projectDirectory); + // go + if (configuredLanguages.contains(Language.GO)) { + indexers.put(Language.GO, new GoIndexService(projectDirectory)); + scanners.put(Language.GO, new GoScannerService(projectDirectory)); + } - ScanResultDTO pythonResultDTO = - bomGenerator.generateBom(pythonIndexService, pythonScannerService); + // Generate CBOM + for (Language language : configuredLanguages) { + IndexingService indexer = indexers.get(language); + indexer.setExcludePatterns(excludePatterns); + ScannerService scanner = scanners.get(language); + ScanResultDTO scanResultDTO = bomGenerator.generateBom(indexer, scanner); if (consolidatedCBOM != null) { - consolidatedCBOM.merge(pythonResultDTO.cbom()); + consolidatedCBOM.merge(scanResultDTO.cbom()); } else { - consolidatedCBOM = pythonResultDTO.cbom(); + consolidatedCBOM = scanResultDTO.cbom(); } - numberOfScannedFiles += pythonResultDTO.numberOfScannedFiles(); - numberOfScannedLines += pythonResultDTO.numberOfScannedLines(); - scanningTime += (pythonResultDTO.endTime() - pythonResultDTO.startTime()); + numberOfScannedFiles += scanResultDTO.numberOfScannedFiles(); + numberOfScannedLines += scanResultDTO.numberOfScannedLines(); + scanningTime += scanResultDTO.endTime() - scanResultDTO.startTime(); } LOGGER.info(