From 1fc351c12cabeb1d125c1ea520b7101502c8f142 Mon Sep 17 00:00:00 2001
From: vkovtun <vkovtun@ethz.ch>
Date: Fri, 7 Jun 2024 16:26:54 +0200
Subject: [PATCH] BIS-1050: Fixed not working import of the xlsx directory in
 ZIP.

---
 .../generic/server/xls/importer/XLSImport.java        | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/XLSImport.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/XLSImport.java
index 64c3dc87bf6..adf577a3a0a 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/XLSImport.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/XLSImport.java
@@ -64,6 +64,8 @@ public class XLSImport
 {
     private static final String PATH_SEPARATOR = "/";
 
+    private static final String XLSX_FOLDER_NAME = "xlsx" + PATH_SEPARATOR;
+
     private static final String SCRIPTS_FOLDER_NAME = "scripts" + PATH_SEPARATOR;
 
     private static final String DATA_FOLDER_NAME = "data" + PATH_SEPARATOR;
@@ -178,10 +180,13 @@ public class XLSImport
                     ZipEntry entry;
                     while ((entry = zip.getNextEntry()) != null)
                     {
-                        final String entryName = entry.getName();
+                        final String entryName = entry.getName().startsWith(XLSX_FOLDER_NAME) ? entry.getName().substring(XLSX_FOLDER_NAME.length())
+                                : entry.getName();
                         if (entry.isDirectory())
                         {
-                            if (!SCRIPTS_FOLDER_NAME.equals(entryName) && !DATA_FOLDER_NAME.equals(entryName) &&
+                            if (!entryName.isEmpty() &&
+                                    !SCRIPTS_FOLDER_NAME.equals(entryName) &&
+                                    !DATA_FOLDER_NAME.equals(entryName) &&
                                     !entryName.startsWith(MISCELLANEOUS_FOLDER_NAME))
                             {
                                 throw UserFailureException.fromTemplate("Illegal directory '%s' is found inside the imported file.", entryName);
@@ -210,7 +215,7 @@ public class XLSImport
                             {
                                 throw UserFailureException.fromTemplate(
                                         "Entry '%s' is not allowed. Only one root XLS file is allowed and files inside the '%s' or '%s' folder",
-                                        entryName, SCRIPTS_FOLDER_NAME, DATA_FOLDER_NAME);
+                                        entry.getName(), SCRIPTS_FOLDER_NAME, DATA_FOLDER_NAME);
                             }
                         }
                     }
-- 
GitLab