RED-5670: Changed temp file creation so that it works on any OS, not just on Unix/Linux
This commit is contained in:
parent
7852836630
commit
0b7f3d1c0e
@ -8,12 +8,7 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.attribute.FileAttribute;
|
||||
import java.nio.file.attribute.PosixFilePermission;
|
||||
import java.nio.file.attribute.PosixFilePermissions;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
@ -32,7 +27,6 @@ import javax.transaction.Transactional;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
|
||||
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -41,6 +35,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import com.iqser.red.service.peristence.v1.server.utils.FileUtils;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.BaseDictionaryEntry;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
|
||||
@ -529,9 +524,7 @@ public class DossierTemplateImportService {
|
||||
objectMapper.registerModule(new JavaTimeModule());
|
||||
File tempFile;
|
||||
try {
|
||||
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------"));
|
||||
tempFile = Files.createTempFile(UUID.randomUUID().toString(), ".zip", attr).toFile();
|
||||
IOUtils.write(request.getArchive(), new FileOutputStream(tempFile));
|
||||
tempFile = FileUtils.createTempFile(request.getArchive(), UUID.randomUUID().toString(), ".zip");
|
||||
var importTemplateResult = new ImportTemplateResult();
|
||||
importTemplateResult.setDossierTemplateId(request.getDossierTemplateId());
|
||||
importTemplateResult.setUserId(request.getUserId());
|
||||
@ -588,26 +581,26 @@ public class DossierTemplateImportService {
|
||||
DossierTemplate dossierTemplate = objectMapper.readValue(bytes, DossierTemplate.class);
|
||||
importTemplateResult.setDossierTemplate(dossierTemplate);
|
||||
} else if (ze.getName().contains(ExportFilename.WATERMARK.getFilename())) {
|
||||
List<Watermark> watermarkList = objectMapper.readValue(bytes, new TypeReference<List<Watermark>>() {
|
||||
List<Watermark> watermarkList = objectMapper.readValue(bytes, new TypeReference<>() {
|
||||
});
|
||||
importTemplateResult.getWatermarks().addAll(watermarkList);
|
||||
} else if (ze.getName().contains(ExportFilename.COLORS.getFilename())) {
|
||||
Colors colors = objectMapper.readValue(bytes, Colors.class);
|
||||
importTemplateResult.setColors(colors);
|
||||
} else if (ze.getName().contains(ExportFilename.DOSSIER_STATUS.getFilename())) {
|
||||
List<DossierStatusInfo> dossierStatusInfoList = objectMapper.readValue(bytes, new TypeReference<List<DossierStatusInfo>>() {
|
||||
List<DossierStatusInfo> dossierStatusInfoList = objectMapper.readValue(bytes, new TypeReference<>() {
|
||||
});
|
||||
importTemplateResult.getDossierStatusInfos().addAll(dossierStatusInfoList);
|
||||
} else if (ze.getName().contains(ExportFilename.DOSSIER_ATTRIBUTES_CONFIG.getFilename())) {
|
||||
List<DossierAttributeConfig> dossierAttributeConfigs = objectMapper.readValue(bytes, new TypeReference<List<DossierAttributeConfig>>() {
|
||||
List<DossierAttributeConfig> dossierAttributeConfigs = objectMapper.readValue(bytes, new TypeReference<>() {
|
||||
});
|
||||
importTemplateResult.getDossierAttributesConfigs().addAll(dossierAttributeConfigs);
|
||||
} else if (ze.getName().contains(ExportFilename.FILE_ATTRIBUTE_CONFIG.getFilename())) {
|
||||
List<FileAttributeConfig> fileAttributeConfigs = objectMapper.readValue(bytes, new TypeReference<List<FileAttributeConfig>>() {
|
||||
List<FileAttributeConfig> fileAttributeConfigs = objectMapper.readValue(bytes, new TypeReference<>() {
|
||||
});
|
||||
importTemplateResult.getFileAttributesConfigs().addAll(fileAttributeConfigs);
|
||||
} else if (ze.getName().contains(ExportFilename.LEGAL_BASIS.getFilename())) {
|
||||
List<LegalBasis> legalBasisList = objectMapper.readValue(bytes, new TypeReference<List<LegalBasis>>() {
|
||||
List<LegalBasis> legalBasisList = objectMapper.readValue(bytes, new TypeReference<>() {
|
||||
});
|
||||
importTemplateResult.getLegalBases().addAll(legalBasisList);
|
||||
} else if (ze.getName().contains(ExportFilename.FILE_ATTRIBUTE_GENERAL_CONFIG.getFilename())) {
|
||||
@ -653,8 +646,6 @@ public class DossierTemplateImportService {
|
||||
importTemplateResult.setFalsePositives(typeFalsePositivesMap);
|
||||
importTemplateResult.setFalseRecommendations(typeFalseRecommendationsMap);
|
||||
|
||||
List<ReportTemplateUploadRequest> reportTemplateUploadRequests = new ArrayList<>();
|
||||
|
||||
for (var reportZe : reportTemplateBytesMap.entrySet()) {
|
||||
if (reportTemplateFilenameList.contains(reportZe.getKey())) {
|
||||
var report = reportTemplateMap.get(reportZe.getKey());
|
||||
@ -668,7 +659,6 @@ public class DossierTemplateImportService {
|
||||
.build());
|
||||
|
||||
}
|
||||
importTemplateResult.getReportTemplateUploadRequests().addAll(reportTemplateUploadRequests);
|
||||
}
|
||||
return importTemplateResult;
|
||||
} finally {
|
||||
@ -679,9 +669,7 @@ public class DossierTemplateImportService {
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new BadRequestException(e.getMessage(), e);
|
||||
} catch (BadRequestException e) {
|
||||
} catch (IOException | BadRequestException e) {
|
||||
throw new BadRequestException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,65 @@
|
||||
package com.iqser.red.service.peristence.v1.server.utils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import lombok.experimental.UtilityClass;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@UtilityClass
|
||||
public class FileUtils {
|
||||
|
||||
public String getTemporaryDirectory() {
|
||||
|
||||
String tmpdir = System.getProperty("java.io.tmpdir");
|
||||
if (isWindows() && StringUtils.isNotBlank(tmpdir)) {
|
||||
return tmpdir;
|
||||
}
|
||||
return "/tmp";
|
||||
}
|
||||
|
||||
|
||||
private boolean isWindows() {
|
||||
|
||||
return StringUtils.containsIgnoreCase(System.getProperty("os.name"), "Windows");
|
||||
}
|
||||
|
||||
|
||||
public File createTempFile(byte[] content, String filenamePrefix, String filenameSuffix) throws IOException {
|
||||
|
||||
File tempFile = Files.createTempFile(filenamePrefix, filenameSuffix).toFile();
|
||||
setRWPermissionsOnlyForOwner(tempFile);
|
||||
|
||||
try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
|
||||
IOUtils.write(content, outputStream);
|
||||
}
|
||||
return tempFile;
|
||||
}
|
||||
|
||||
|
||||
// We don't need to check the results of the permission setters below,
|
||||
// since we're manipulating a file we created ourselves.
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
private void setRWPermissionsOnlyForOwner(File tempFile) {
|
||||
|
||||
try {
|
||||
// deny for all
|
||||
tempFile.setReadable(false);
|
||||
tempFile.setWritable(false);
|
||||
tempFile.setExecutable(false);
|
||||
// allow for owner
|
||||
tempFile.setReadable(true, true);
|
||||
tempFile.setWritable(true, true);
|
||||
} catch (SecurityException ex) {
|
||||
// This should never happen since we're creating a temp file ourselves.
|
||||
log.warn("Caught an exception during temp file creation. This should not happend. Check the code.", ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -8,8 +8,8 @@ import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.OsUtils;
|
||||
import com.iqser.red.service.peristence.v1.server.migration.migrations.ReduceTextFileSizeMigration10;
|
||||
import com.iqser.red.service.peristence.v1.server.utils.FileUtils;
|
||||
import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
|
||||
|
||||
@ -37,7 +37,7 @@ public class ReduceFileSizeMigrationTest extends AbstractPersistenceServerServic
|
||||
// readJSONObject will not work here.
|
||||
var text = storageService.getObject(StorageIdUtils.getStorageId("dossierId", "fileId", FileType.TEXT));
|
||||
|
||||
try (FileOutputStream fileOutputStream = new FileOutputStream(OsUtils.getTemporaryDirectory() + "/MigratedText.json")) {
|
||||
try (FileOutputStream fileOutputStream = new FileOutputStream(FileUtils.getTemporaryDirectory() + "/MigratedText.json")) {
|
||||
fileOutputStream.write(text.getInputStream().readAllBytes());
|
||||
}
|
||||
|
||||
|
||||
@ -1,22 +0,0 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.utils;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class OsUtils {
|
||||
|
||||
public static boolean isWindows() {
|
||||
|
||||
return StringUtils.containsIgnoreCase(System.getProperty("os.name"), "Windows");
|
||||
}
|
||||
|
||||
|
||||
public static String getTemporaryDirectory() {
|
||||
|
||||
String tmpdir = System.getProperty("java.io.tmpdir");
|
||||
if (isWindows() && StringUtils.isNotBlank(tmpdir)) {
|
||||
return tmpdir;
|
||||
}
|
||||
return "/tmp";
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user