From b5e4a0dc28966479e0f2d5c0d69f2f38f734fee1 Mon Sep 17 00:00:00 2001
From: Leonardo Vannucci <leonardo.vannucci@grupposistematica.it>
Date: Thu, 09 Aug 2018 17:35:28 +0200
Subject: [PATCH] Implementazione recaptcha
---
dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 59 insertions(+), 1 deletions(-)
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
index 815499b..4c54b5d 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
@@ -1,33 +1,44 @@
package it.digione.dg1cloud.service;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
+
+import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.logging.log4j.util.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.util.UriBuilder;
import org.springframework.web.util.UriComponentsBuilder;
import it.digione.dg1cloud.config.AppConfig;
import it.digione.dg1cloud.model.RegDocument;
+import it.digione.dg1cloud.repository.RegDocumentRepository;
@Service("utils")
public class Utils {
@Autowired private AppConfig appConfig;
+ @Autowired private RegDocumentRepository regDocumentRepository;
+ @Autowired private ServletContext servletContext;
private static final Logger logger = LoggerFactory.getLogger(CloudService.class);
public URL generateUrl(RegDocument regDocument) throws MalformedURLException {
logger.debug("Genero l'url per il record file {} con id {}", regDocument.getFileName(), regDocument.getDocumentId());
UriBuilder uriBuilder = UriComponentsBuilder.fromUriString(appConfig.getExternalBaseUrl());
- uriBuilder.path("/downloadFile");
+ uriBuilder.path("/downloadPage");
uriBuilder.queryParam("fileName", regDocument.getFileName());
uriBuilder.queryParam("id", regDocument.getDocumentId());
if ( Strings.isEmpty(regDocument.getSecretKey()) == false ) {
@@ -53,4 +64,51 @@
logger.debug("La directory {} non e' vuota", directory.getAbsolutePath());
}
}
+
+ public ResponseEntity<InputStreamResource> getDownloadResponseEntity(String fileName, long id, String secretKey)
+ throws FileNotFoundException {
+ logger.debug("Avvio download file {} con id {}", fileName, id);
+
+ MediaType mediaType = MediaType.APPLICATION_OCTET_STREAM;
+ try {
+ mediaType = MediaType.parseMediaType(servletContext.getMimeType(fileName));
+ } catch (Exception e) {
+ logger.warn("Errore nello stabilire il mime type del file. VerrĂ usato " + mediaType.toString(), e);
+ }
+
+ RegDocument regDocument = regDocumentRepository.getOne(id);
+
+ if (regDocument.getFileName().equalsIgnoreCase(fileName) == false ) {
+ logger.error("Il nome del file richiesto non corrisponde con quello referenziato dall'id");
+ throw new RuntimeException("Il nome del file richiesto non corrisponde con quello referenziato dall'id");
+ }
+
+ if ( regDocument.getSecretKey() != null ) {
+ logger.debug("E' stata specificata una secretKey. Avvio le verifiche.");
+ if ( Strings.isEmpty(secretKey) == true ) {
+ logger.error("Non e' stata inviata la secretKey");
+ throw new RuntimeException("Per scaricare il file occorre specificare la secretKey");
+ } else {
+ logger.debug("Controllo corrispondenza della secretKey");
+ if (secretKey.equals(regDocument.getSecretKey()) == false ) {
+ logger.error("La secretKey inviata non corrisponde a quella impostata in fase di richiesta salvataggio del file");
+ throw new RuntimeException("La secretKey inviata non corrisponde a quella impostata in fase di richiesta salvataggio del file");
+ } else {
+ logger.debug("SecretKey verificata correttamente");
+ }
+ }
+ }
+
+ File file = new File(regDocument.getFilePath());
+ FileInputStream fis = new FileInputStream(file);
+ InputStreamResource isr = new InputStreamResource(fis);
+ return ResponseEntity.ok()
+ // Content-Disposition
+ .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName())
+ // Content-Type
+ .contentType(mediaType)
+ // Contet-Length
+ .contentLength(file.length()) //
+ .body(isr);
+ }
}
--
Gitblit v1.6.2