From 6e25451c1325b2335be5c80763cc3b52f675d90c Mon Sep 17 00:00:00 2001 From: kcichonczyk Date: Tue, 20 Jun 2023 13:14:39 +0200 Subject: [PATCH] [ACS-5424] replace usage of apache fileupload dependency --- .../commons-fileupload-jakarta/pom.xml | 57 ------------------- .../binary-transformed-to-jakarta/pom.xml | 1 - jakarta-dependencies/build-dependencies.sh | 2 +- pom.xml | 5 -- .../AbortTransferCommandProcessor.java | 1 - .../transfer/CommandProcessorUtils.java | 42 ++++++++++++++ .../transfer/PostContentCommandProcessor.java | 27 ++++----- .../PostSnapshotCommandProcessor.java | 22 +++---- .../PrepareTransferCommandProcessor.java | 2 - repository/pom.xml | 4 -- 10 files changed, 69 insertions(+), 94 deletions(-) delete mode 100644 jakarta-dependencies/binary-transformed-to-jakarta/commons-fileupload-jakarta/pom.xml create mode 100644 remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/CommandProcessorUtils.java diff --git a/jakarta-dependencies/binary-transformed-to-jakarta/commons-fileupload-jakarta/pom.xml b/jakarta-dependencies/binary-transformed-to-jakarta/commons-fileupload-jakarta/pom.xml deleted file mode 100644 index 9ec45e0ad3..0000000000 --- a/jakarta-dependencies/binary-transformed-to-jakarta/commons-fileupload-jakarta/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - - - org.alfresco - binary-transformed-to-jakarta - 1.0-SNAPSHOT - - - commons-fileupload - commons-fileupload-jakarta - jar - 1.5 - - - - Apache 2 - https://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - - commons-fileupload - commons-fileupload - 1.5 - - - - - - - - org.eclipse.transformer - transformer-maven-plugin - - - transform-jar - - jar - - - - commons-fileupload - commons-fileupload - - - - - - - - - \ No newline at end of file diff --git a/jakarta-dependencies/binary-transformed-to-jakarta/pom.xml b/jakarta-dependencies/binary-transformed-to-jakarta/pom.xml index 795da66dec..c264302254 100644 --- a/jakarta-dependencies/binary-transformed-to-jakarta/pom.xml +++ b/jakarta-dependencies/binary-transformed-to-jakarta/pom.xml @@ -32,6 +32,5 @@ apache-chemistry - commons-fileupload-jakarta \ No newline at end of file diff --git a/jakarta-dependencies/build-dependencies.sh b/jakarta-dependencies/build-dependencies.sh index 9a00c93dfd..180b4d36d8 100755 --- a/jakarta-dependencies/build-dependencies.sh +++ b/jakarta-dependencies/build-dependencies.sh @@ -20,7 +20,7 @@ function clone_and_install { mvn -f $project_path -B clean install -DskipTests -Dmaven.javadoc.skip=true } -clone_and_install surf-webscripts +clone_and_install surf-webscripts "feature/acs-5424_apache_fileupload_replace" clone_and_install alfresco-greenmail clone_and_install alfresco-tas-utility clone_and_install alfresco-tas-email diff --git a/pom.xml b/pom.xml index 8de2b02298..9abb0b5b78 100644 --- a/pom.xml +++ b/pom.xml @@ -423,11 +423,6 @@ commons-digester 2.1 - - commons-fileupload - commons-fileupload-jakarta - 1.5 - org.apache.httpcomponents diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java index 7effece754..4ddbbc20ed 100644 --- a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java +++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java @@ -32,7 +32,6 @@ import jakarta.servlet.http.HttpServletRequest; import org.alfresco.service.cmr.transfer.TransferException; import org.alfresco.service.cmr.transfer.TransferReceiver; -import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/CommandProcessorUtils.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/CommandProcessorUtils.java new file mode 100644 index 0000000000..196538eba8 --- /dev/null +++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/CommandProcessorUtils.java @@ -0,0 +1,42 @@ +/* + * #%L + * Alfresco Remote API + * %% + * Copyright (C) 2005 - 2023 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.repo.web.scripts.transfer; + +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.http.MediaType; + +public class CommandProcessorUtils +{ + public static boolean isMultipartContent(HttpServletRequest servletRequest) + { + if(!servletRequest.getMethod().equalsIgnoreCase("post")) + { + return false; + } + String contentType = servletRequest.getContentType(); + return contentType != null && contentType.toLowerCase().startsWith(MediaType.MULTIPART_FORM_DATA_VALUE); + } +} diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java index 87eef2bb48..e6c53cac68 100644 --- a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java +++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java @@ -30,17 +30,19 @@ import jakarta.servlet.http.HttpServletRequest; import org.alfresco.service.cmr.transfer.TransferException; import org.alfresco.service.cmr.transfer.TransferReceiver; -import org.apache.commons.fileupload.FileItemIterator; -import org.apache.commons.fileupload.FileItemStream; -import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.extensions.webscripts.WrappingWebScriptRequest; +import org.springframework.extensions.webscripts.servlet.FormData; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; -import org.springframework.extensions.webscripts.servlet.FormData.FormField; + +import java.util.Arrays; +import java.util.Iterator; + +import static org.alfresco.repo.web.scripts.transfer.CommandProcessorUtils.isMultipartContent; /** * This command processor is used to receive one or more content files for a given transfer. @@ -105,7 +107,7 @@ public class PostContentCommandProcessor implements CommandProcessor //Read the transfer id from the request String transferId = servletRequest.getParameter("transferId"); - if ((transferId == null) || !ServletFileUpload.isMultipartContent(servletRequest)) + if ((transferId == null) || !isMultipartContent(servletRequest)) { resp.setStatus(Status.STATUS_BAD_REQUEST); return Status.STATUS_BAD_REQUEST; @@ -113,17 +115,16 @@ public class PostContentCommandProcessor implements CommandProcessor try { - - ServletFileUpload upload = new ServletFileUpload(); - FileItemIterator iter = upload.getItemIterator(servletRequest); + + FormData formData = new FormData(servletRequest); + Iterator iter = Arrays.stream(formData.getFields()).iterator(); while (iter.hasNext()) { - FileItemStream item = iter.next(); - String name = item.getFieldName(); - if (!item.isFormField()) + FormData.FormField formField = iter.next(); + if (formField.getIsFile()) { - logger.debug("got content Mime Part : " + name); - receiver.saveContent(transferId, item.getName(), item.openStream()); + logger.debug("got content Mime Part : " + formField.getName()); + receiver.saveContent(transferId, formField.getFilename(), formField.getInputStream()); } } diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java index 8ac155f06d..f4f1425c57 100644 --- a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java +++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java @@ -27,24 +27,26 @@ package org.alfresco.repo.web.scripts.transfer; import java.io.OutputStream; +import java.util.Arrays; +import java.util.Iterator; import jakarta.servlet.http.HttpServletRequest; import org.alfresco.repo.transfer.TransferCommons; import org.alfresco.service.cmr.transfer.TransferException; import org.alfresco.service.cmr.transfer.TransferReceiver; -import org.apache.commons.fileupload.FileItemIterator; -import org.apache.commons.fileupload.FileItemStream; -import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.extensions.webscripts.WrappingWebScriptRequest; +import org.springframework.extensions.webscripts.servlet.FormData; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; import org.springframework.extensions.webscripts.servlet.FormData.FormField; +import static org.alfresco.repo.web.scripts.transfer.CommandProcessorUtils.isMultipartContent; + /** * This command processor is used to receive the snapshot for a given transfer. * @@ -100,7 +102,7 @@ public class PostSnapshotCommandProcessor implements CommandProcessor //Read the transfer id from the request String transferId = servletRequest.getParameter("transferId"); - if ((transferId == null) || !ServletFileUpload.isMultipartContent(servletRequest)) + if ((transferId == null) || !isMultipartContent(servletRequest)) { logger.debug("bad request, not multipart"); resp.setStatus(Status.STATUS_BAD_REQUEST); @@ -111,15 +113,15 @@ public class PostSnapshotCommandProcessor implements CommandProcessor { logger.debug("about to upload manifest file"); - ServletFileUpload upload = new ServletFileUpload(); - FileItemIterator iter = upload.getItemIterator(servletRequest); - while (iter.hasNext()) + FormData formData = new FormData(servletRequest); + Iterator iter = Arrays.stream(formData.getFields()).iterator(); + while (iter.hasNext()) { - FileItemStream item = iter.next(); - if (!item.isFormField() && TransferCommons.PART_NAME_MANIFEST.equals(item.getFieldName())) + FormField formField = iter.next(); + if (formField.getIsFile() && TransferCommons.PART_NAME_MANIFEST.equals(formField.getName())) { logger.debug("got manifest file"); - receiver.saveSnapshot(transferId, item.openStream()); + receiver.saveSnapshot(transferId, formField.getInputStream()); } } diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java index 672b556c95..cea7cf0a2d 100644 --- a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java +++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java @@ -30,10 +30,8 @@ import java.io.StringWriter; import jakarta.servlet.http.HttpServletRequest; -import org.alfresco.repo.transfer.TransferServiceImpl; import org.alfresco.service.cmr.transfer.TransferException; import org.alfresco.service.cmr.transfer.TransferReceiver; -import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Status; diff --git a/repository/pom.xml b/repository/pom.xml index 186b1d87f1..29a9e0b0f8 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -83,10 +83,6 @@ org.apache.commons commons-dbcp2 - - commons-fileupload - commons-fileupload-jakarta - org.apache.commons commons-compress