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