From cc7a97eee611c1734be07258ff354ad20ccb32f1 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Fri, 24 May 2024 14:00:46 +0300 Subject: [PATCH] clean up names --- .../zenodo/ZenodoDepositServiceImpl.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/opencdmp/deposit/zenodorepository/service/zenodo/ZenodoDepositServiceImpl.java b/core/src/main/java/org/opencdmp/deposit/zenodorepository/service/zenodo/ZenodoDepositServiceImpl.java index 49e7fa3..67d1176 100644 --- a/core/src/main/java/org/opencdmp/deposit/zenodorepository/service/zenodo/ZenodoDepositServiceImpl.java +++ b/core/src/main/java/org/opencdmp/deposit/zenodorepository/service/zenodo/ZenodoDepositServiceImpl.java @@ -6,21 +6,19 @@ import gr.cite.tools.logging.LoggerService; import gr.cite.tools.logging.MapLogEntry; import org.opencdmp.commonmodels.models.FileEnvelopeModel; import org.opencdmp.commonmodels.models.dmp.DmpModel; -import org.opencdmp.depositbase.repository.DepositConfiguration; import org.opencdmp.deposit.zenodorepository.model.ZenodoDeposit; import org.opencdmp.deposit.zenodorepository.model.builder.ZenodoBuilder; import org.opencdmp.deposit.zenodorepository.service.storage.FileStorageService; +import org.opencdmp.depositbase.repository.DepositConfiguration; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.http.client.MultipartBodyBuilder; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import org.springframework.util.MultiValueMapAdapter; import org.springframework.util.ResourceUtils; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.HttpServerErrorException; @@ -114,8 +112,7 @@ public class ZenodoDepositServiceImpl implements ZenodoDepositService { FileEnvelopeModel pdfEnvelope = dmpModel.getPdfFile(); if (links == null || !links.containsKey(ZENODO_LINKS_BUCKET)) throw new MyApplicationException("bucket not found"); - - String addFileUrl = links.get(ZENODO_LINKS_BUCKET) + "/" + pdfEnvelope.getFilename() + "?access_token=" + zenodoToken; + String addFileUrl = links.get(ZENODO_LINKS_BUCKET) + "/" + cleanFileName(pdfEnvelope.getFilename()) + "?access_token=" + zenodoToken; byte[] pdfFileBytes = null; if (this.getConfiguration().isUseSharedStorage() && pdfEnvelope.getFileRef() != null && !pdfEnvelope.getFileRef().isBlank()) { @@ -130,7 +127,7 @@ public class ZenodoDepositServiceImpl implements ZenodoDepositService { .retrieve().toEntity(Map.class).block(); FileEnvelopeModel rdaJsonEnvelope = dmpModel.getRdaJsonFile(); - String jsonFileName = rdaJsonEnvelope.getFilename(); + String jsonFileName = cleanFileName(rdaJsonEnvelope.getFilename()); addFileUrl = links.get(ZENODO_LINKS_BUCKET) + "/" + jsonFileName + "?access_token=" + zenodoToken; byte[] rdaJsonBytes = null; @@ -143,7 +140,7 @@ public class ZenodoDepositServiceImpl implements ZenodoDepositService { zenodoClient.put().uri(addFileUrl).headers(httpHeaders -> httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM)).body(BodyInserters.fromResource(new ByteArrayResource(rdaJsonBytes))).retrieve().toEntity(Map.class).block(); if (dmpModel.getSupportingFilesZip() != null) { - String supportingFilesZipName = dmpModel.getSupportingFilesZip().getFilename(); + String supportingFilesZipName = cleanFileName(dmpModel.getSupportingFilesZip().getFilename()); addFileUrl = links.get(ZENODO_LINKS_BUCKET) + "/" + supportingFilesZipName + "?access_token=" + zenodoToken; zenodoClient.put().uri(addFileUrl).body(BodyInserters.fromResource(new ByteArrayResource(supportingFilesZipName.getBytes()))).retrieve().toEntity(Map.class).block(); @@ -168,6 +165,22 @@ public class ZenodoDepositServiceImpl implements ZenodoDepositService { return null; } + + private static String cleanFileName(String name){ + if (name == null || name.isEmpty()) return null; + + int extensionIndex = name.lastIndexOf('.'); + String extension = ""; + String namePart = ""; + if (extensionIndex > 0) { + extension = name.substring(extensionIndex + 1); + namePart = name.substring(0, extensionIndex); + } + + if (!namePart.isEmpty()) namePart = namePart.replaceAll("[^a-zA-Z0-9_+ ]", "").replace(" ", "_").replace(",", "_"); + + return namePart + "." + extension; + } private static LinkedHashMap depositNewVersion(String zenodoToken, String zenodoUrl, String previousDOI, WebClient zenodoClient, ZenodoDeposit deposit) throws Exception { Map createResponse;