diff --git a/engines/base/src/main/java/org/alfresco/transform/base/fs/FileManager.java b/engines/base/src/main/java/org/alfresco/transform/base/fs/FileManager.java index f32be26c..9ab79de6 100644 --- a/engines/base/src/main/java/org/alfresco/transform/base/fs/FileManager.java +++ b/engines/base/src/main/java/org/alfresco/transform/base/fs/FileManager.java @@ -120,7 +120,6 @@ public class FileManager { throw new TransformException(INSUFFICIENT_STORAGE, "Failed to store the source file", e); } - } public static File createTargetFile(HttpServletRequest request, String sourceMimetype, String targetMimetype) @@ -263,21 +262,12 @@ public class FileManager public static File createTempDirForDocFile(String sourceFileName) { - final File alfrescoTempDirectory = getTempDir(); - try + File tempDir = new File(getTempDir(), UUID.randomUUID().toString()); + if (!tempDir.mkdirs() && !tempDir.exists()) { - UUID uuid = UUID.randomUUID(); - final File tempDir = new File(alfrescoTempDirectory, uuid.toString()); - if (!tempDir.exists() && !tempDir.mkdirs() && !tempDir.exists()) - { - throw new RuntimeException("Failed to create temp directory: " + tempDir); - } - return new File(tempDir, sourceFileName); - } - catch (Exception e) - { - throw new RuntimeException("Failed to created temp file: \n file: " + sourceFileName + "\n", e); + throw new TransformException(INSUFFICIENT_STORAGE, "Failed to create temp directory: " + tempDir); } + return new File(tempDir, sourceFileName); } private static File getTempDir() diff --git a/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformManagerImpl.java b/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformManagerImpl.java index a4c6a4f5..a0cf615a 100644 --- a/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformManagerImpl.java +++ b/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformManagerImpl.java @@ -30,6 +30,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.Locale; import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; @@ -236,12 +237,14 @@ public class TransformManagerImpl implements TransformManager public void deleteDocUUIDFolder() { if (sourceFile == null) + { return; + } if (Util.isDocFile(sourceFile.getPath())) { File parentDir = sourceFile.getParentFile(); if (parentDir != null - && !StringUtils.equalsAny(parentDir.getName().toLowerCase(), "alfresco", "temp", "tmp") + && !StringUtils.equalsAny(parentDir.getName().toLowerCase(Locale.ROOT), "alfresco", "temp", "tmp") && !parentDir.delete()) { logger.error("Failed to delete parent directory {}", parentDir.getPath()); diff --git a/engines/base/src/test/java/org/alfresco/transform/base/transform/StreamHandlerTest.java b/engines/base/src/test/java/org/alfresco/transform/base/transform/StreamHandlerTest.java index df1e7921..e48911dd 100644 --- a/engines/base/src/test/java/org/alfresco/transform/base/transform/StreamHandlerTest.java +++ b/engines/base/src/test/java/org/alfresco/transform/base/transform/StreamHandlerTest.java @@ -81,12 +81,6 @@ public class StreamHandlerTest return new BufferedInputStream(new FileInputStream(sourceFile)); } - private File tempDocFile() throws IOException - { - return File.createTempFile("temp_", ".docx", tempDir); - - } - private File tempFile() throws IOException { return File.createTempFile("temp_", null, tempDir); @@ -188,67 +182,6 @@ public class StreamHandlerTest } } - @Test - public void testStartWithInputStreamAndCallCreateSourceFileForDocxFiles() throws Exception - { - try (InputStream inputStream = getSourceInputStreamFromBytes(); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) - { - transformManager.setSourceFileName("test.docx"); - transformManager.setInputStream(inputStream); - OutputStream outputStreamLengthRecorder = transformManager.setOutputStream(outputStream); - - File sourceFileCreatedByTransform = transformManager.createSourceFile(); - assertTrue(sourceFileCreatedByTransform.exists()); - write(outputStreamLengthRecorder, read(sourceFileCreatedByTransform) + CHANGE); - - transformManager.copyTargetFileToOutputStream(); - transformManager.getOutputStream().close(); - closeInputStreamWithoutException(inputStream); - Long outputLength = transformManager.getOutputLength(); - transformManager.deleteSourceFile(); - transformManager.deleteTargetFile(); - - assertEquals(EXPECTED, read(outputStream)); - assertEquals(EXPECTED.length(), outputLength); - assertFalse(sourceFileCreatedByTransform.exists()); - } - } - - @Test - public void testStartWithInputStreamAndCallCreateSourceFileForDocxFilesWithHttpRequest() throws Exception - { - try (InputStream inputStream = getSourceInputStreamFromBytes(); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) - { - HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class); - Part mockPart = Mockito.mock(Part.class); - Mockito.when(mockPart.getSubmittedFileName()).thenReturn("dummy.docx"); - Collection parts = Arrays.asList(mockPart); - Mockito.when(mockRequest.getParts()).thenReturn(parts); - - transformManager.setSourceMimetype("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); - transformManager.setInputStream(inputStream); - transformManager.setRequest(mockRequest); - OutputStream outputStreamLengthRecorder = transformManager.setOutputStream(outputStream); - - File sourceFileCreatedByTransform = transformManager.createSourceFile(); - assertTrue(sourceFileCreatedByTransform.exists()); - write(outputStreamLengthRecorder, read(sourceFileCreatedByTransform) + CHANGE); - - transformManager.copyTargetFileToOutputStream(); - transformManager.getOutputStream().close(); - closeInputStreamWithoutException(inputStream); - Long outputLength = transformManager.getOutputLength(); - transformManager.deleteSourceFile(); - transformManager.deleteTargetFile(); - - assertEquals(EXPECTED, read(outputStream)); - assertEquals(EXPECTED.length(), outputLength); - assertFalse(sourceFileCreatedByTransform.exists()); - } - } - @Test public void testStartWithSourceFile() throws Exception { @@ -643,4 +576,65 @@ public class StreamHandlerTest }.handleTransformRequest(); } } + + @Test + public void testStartWithInputStreamAndCallCreateSourceFileForDocxFiles() throws Exception + { + try (InputStream inputStream = getSourceInputStreamFromBytes(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) + { + transformManager.setSourceFileName("test.docx"); + transformManager.setInputStream(inputStream); + OutputStream outputStreamLengthRecorder = transformManager.setOutputStream(outputStream); + + File sourceFileCreatedByTransform = transformManager.createSourceFile(); + assertTrue(sourceFileCreatedByTransform.exists()); + write(outputStreamLengthRecorder, read(sourceFileCreatedByTransform) + CHANGE); + + transformManager.copyTargetFileToOutputStream(); + transformManager.getOutputStream().close(); + closeInputStreamWithoutException(inputStream); + Long outputLength = transformManager.getOutputLength(); + transformManager.deleteSourceFile(); + transformManager.deleteTargetFile(); + + assertEquals(EXPECTED, read(outputStream)); + assertEquals(EXPECTED.length(), outputLength); + assertFalse(sourceFileCreatedByTransform.exists()); + } + } + + @Test + public void testStartWithInputStreamAndCallCreateSourceFileForDocxFilesWithHttpRequest() throws Exception + { + try (InputStream inputStream = getSourceInputStreamFromBytes(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) + { + HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class); + Part mockPart = Mockito.mock(Part.class); + Mockito.when(mockPart.getSubmittedFileName()).thenReturn("dummy.docx"); + Collection parts = Arrays.asList(mockPart); + Mockito.when(mockRequest.getParts()).thenReturn(parts); + + transformManager.setSourceMimetype("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + transformManager.setInputStream(inputStream); + transformManager.setRequest(mockRequest); + OutputStream outputStreamLengthRecorder = transformManager.setOutputStream(outputStream); + + File sourceFileCreatedByTransform = transformManager.createSourceFile(); + assertTrue(sourceFileCreatedByTransform.exists()); + write(outputStreamLengthRecorder, read(sourceFileCreatedByTransform) + CHANGE); + + transformManager.copyTargetFileToOutputStream(); + transformManager.getOutputStream().close(); + closeInputStreamWithoutException(inputStream); + Long outputLength = transformManager.getOutputLength(); + transformManager.deleteSourceFile(); + transformManager.deleteTargetFile(); + + assertEquals(EXPECTED, read(outputStream)); + assertEquals(EXPECTED.length(), outputLength); + assertFalse(sourceFileCreatedByTransform.exists()); + } + } }