diff --git a/dina-base-api/pom.xml b/dina-base-api/pom.xml index f06d38e9e..fe62c49fb 100644 --- a/dina-base-api/pom.xml +++ b/dina-base-api/pom.xml @@ -8,7 +8,7 @@ io.github.aafc-bicoe dina-base-parent - 0.118-SNAPSHOT + 0.119-SNAPSHOT dina-base-api @@ -27,9 +27,14 @@ 2.2.2 0.29 3.6.1 - 42.4.3 + 1.15.3 2.15.1 + 4.3.0 + + + 42.4.4 + @@ -148,7 +153,7 @@ io.github.aafc-bicoe dina-test-support - 0.118-SNAPSHOT + 0.119-SNAPSHOT test @@ -167,6 +172,11 @@ commons-io ${commons-io.version} + + com.fasterxml.uuid + java-uuid-generator + ${java-uuid-generator.version} + diff --git a/dina-base-api/src/main/java/ca/gc/aafc/dina/util/UUIDHelper.java b/dina-base-api/src/main/java/ca/gc/aafc/dina/util/UUIDHelper.java new file mode 100644 index 000000000..2d426453f --- /dev/null +++ b/dina-base-api/src/main/java/ca/gc/aafc/dina/util/UUIDHelper.java @@ -0,0 +1,39 @@ +package ca.gc.aafc.dina.util; + +import java.util.UUID; + +import com.fasterxml.uuid.Generators; +import com.fasterxml.uuid.impl.TimeBasedEpochGenerator; + +/** + * Helper class to handle UUID version 7. + */ +public final class UUIDHelper { + + private static final TimeBasedEpochGenerator GENERATOR = Generators.timeBasedEpochGenerator(); + + private UUIDHelper() { + // utility class + } + + /** + * thread-safe per TimeBasedEpochGenerator implementation. + * @return + */ + public static UUID generateUUIDv7() { + return GENERATOR.generate(); + } + + /** + * Checks if the provided UUID is of version 7. + * @param uuid + * @return is provided UUID version 7. If uuid is null false is returned. + */ + public static boolean isUUIDv7(UUID uuid) { + if(uuid == null) { + return false; + } + return uuid.version() == 7; + } + +} diff --git a/dina-base-api/src/test/java/ca/gc/aafc/dina/util/UUIDHelperTest.java b/dina-base-api/src/test/java/ca/gc/aafc/dina/util/UUIDHelperTest.java new file mode 100644 index 000000000..3d8284a73 --- /dev/null +++ b/dina-base-api/src/test/java/ca/gc/aafc/dina/util/UUIDHelperTest.java @@ -0,0 +1,19 @@ +package ca.gc.aafc.dina.util; + +import java.util.UUID; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class UUIDHelperTest { + + @Test + public void testUUIDHelper() { + UUID uuidv7 = UUIDHelper.generateUUIDv7(); + + assertTrue(UUIDHelper.isUUIDv7(uuidv7)); + assertFalse(UUIDHelper.isUUIDv7(UUID.randomUUID())); + } +} diff --git a/dina-client/pom.xml b/dina-client/pom.xml index 0f14d9825..6df57002d 100644 --- a/dina-client/pom.xml +++ b/dina-client/pom.xml @@ -8,7 +8,7 @@ io.github.aafc-bicoe dina-base-parent - 0.118-SNAPSHOT + 0.119-SNAPSHOT dina-client diff --git a/dina-filter/pom.xml b/dina-filter/pom.xml index 84916c509..678fea1ed 100644 --- a/dina-filter/pom.xml +++ b/dina-filter/pom.xml @@ -8,7 +8,7 @@ io.github.aafc-bicoe dina-base-parent - 0.118-SNAPSHOT + 0.119-SNAPSHOT dina-filter diff --git a/dina-messaging/pom.xml b/dina-messaging/pom.xml index 2259fc0a1..8a2b89bab 100644 --- a/dina-messaging/pom.xml +++ b/dina-messaging/pom.xml @@ -8,7 +8,7 @@ io.github.aafc-bicoe dina-base-parent - 0.118-SNAPSHOT + 0.119-SNAPSHOT dina-messaging @@ -38,7 +38,7 @@ io.github.aafc-bicoe dina-test-support - 0.118-SNAPSHOT + 0.119-SNAPSHOT test diff --git a/dina-search/pom.xml b/dina-search/pom.xml index cd85b61aa..5ff027dda 100644 --- a/dina-search/pom.xml +++ b/dina-search/pom.xml @@ -8,7 +8,7 @@ io.github.aafc-bicoe dina-base-parent - 0.118-SNAPSHOT + 0.119-SNAPSHOT dina-search diff --git a/dina-test-support/pom.xml b/dina-test-support/pom.xml index 714d96292..ca0d84fdd 100644 --- a/dina-test-support/pom.xml +++ b/dina-test-support/pom.xml @@ -9,7 +9,7 @@ io.github.aafc-bicoe dina-base-parent - 0.118-SNAPSHOT + 0.119-SNAPSHOT dina-test-support diff --git a/dina-workbook/pom.xml b/dina-workbook/pom.xml index d802b5d8f..52ee6e780 100644 --- a/dina-workbook/pom.xml +++ b/dina-workbook/pom.xml @@ -8,7 +8,7 @@ io.github.aafc-bicoe dina-base-parent - 0.118-SNAPSHOT + 0.119-SNAPSHOT dina-workbook diff --git a/dina-workbook/src/main/java/ca/gc/aafc/dina/workbook/WorkbookGenerator.java b/dina-workbook/src/main/java/ca/gc/aafc/dina/workbook/WorkbookGenerator.java new file mode 100644 index 000000000..6effb194a --- /dev/null +++ b/dina-workbook/src/main/java/ca/gc/aafc/dina/workbook/WorkbookGenerator.java @@ -0,0 +1,47 @@ +package ca.gc.aafc.dina.workbook; + +import java.util.List; + +import org.apache.poi.ooxml.POIXMLProperties; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +/** + * Utility to generates Workbook. + * + */ +public final class WorkbookGenerator { + + private WorkbookGenerator() { + //utility class + } + + /** + * Generate a workbook from a list of column names. + * Use in a try-with-resource. + * + * @param columns columns name + * @return the Workbook object + */ + public static Workbook generate(List columns) { + XSSFWorkbook wb = new XSSFWorkbook(); + Sheet sheet1 = wb.createSheet(); + + // Record in custom properties the original columns + POIXMLProperties.CustomProperties customProp = wb.getProperties().getCustomProperties(); + customProp.addProperty("originalColumns", String.join(",", columns)); + + // Rows are 0 based + Row row = sheet1.createRow(0); + + int cellIdx = 0; + for(String columnName: columns) { + row.createCell(cellIdx).setCellValue(columnName); + cellIdx++; + } + + return wb; + } +} diff --git a/dina-workbook/src/test/java/ca/gc/aafc/dina/workbook/WorkbookGeneratorIT.java b/dina-workbook/src/test/java/ca/gc/aafc/dina/workbook/WorkbookGeneratorIT.java new file mode 100644 index 000000000..fb0af8dbb --- /dev/null +++ b/dina-workbook/src/test/java/ca/gc/aafc/dina/workbook/WorkbookGeneratorIT.java @@ -0,0 +1,31 @@ +package ca.gc.aafc.dina.workbook; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import org.apache.poi.ss.usermodel.Workbook; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class WorkbookGeneratorIT { + + @Test + public void generate_withColumnName_workbookGenerated() throws IOException { + Path tmpExport = Files.createTempDirectory("generate_withColumnName_workbookGenerated") + .resolve("generatedFile.xlsx"); + try (Workbook wb = WorkbookGenerator.generate(List.of("col 1", "col 2"))) { + wb.write(new FileOutputStream(tmpExport.toFile())); + } + + try(FileInputStream fis = new FileInputStream(tmpExport.toFile())) { + var result = WorkbookConverter.convertWorkbook(fis); + // check value of the first cell of the first row of the first sheet + assertEquals("col 1", result.get(0).get(0).content()[0]); + } + } +} diff --git a/owasp-suppression.xml b/owasp-suppression.xml index 0071d8fd8..617bc2b07 100644 --- a/owasp-suppression.xml +++ b/owasp-suppression.xml @@ -12,6 +12,10 @@ no untrusted source CVE-2022-1471 + + no UriComponentsBuilder + CVE-2024-22243 + CVE about Keycloak server CVE-2022-1245 diff --git a/pom.xml b/pom.xml index fb5c6240c..7836b2a53 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.github.aafc-bicoe dina-base-parent - 0.118-SNAPSHOT + 0.119-SNAPSHOT pom @@ -51,6 +51,9 @@ 1 20.0.5 + + + 5.3.32 1.33 4.13.0