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