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/controller/DownloadFileController.java |   70 +++++++----------------------------
 1 files changed, 14 insertions(+), 56 deletions(-)

diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileController.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileController.java
index 4962f61..be67cd2 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileController.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileController.java
@@ -1,82 +1,40 @@
 package it.digione.dg1cloud.controller;
 
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 
-import javax.servlet.ServletContext;
-
-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.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
-import it.digione.dg1cloud.model.RegDocument;
-import it.digione.dg1cloud.repository.RegDocumentRepository;
-import it.digione.dg1cloud.service.CloudService;
+import it.digione.dg1cloud.recaptcha.CaptchaSettings;
+import it.digione.dg1cloud.service.Utils;
 
 @Controller
 public class DownloadFileController {
 	
-	private static final Logger logger = LoggerFactory.getLogger(CloudService.class);
+	private static final Logger logger = LoggerFactory.getLogger(DownloadFileController.class);
 	
-	@Autowired private ServletContext servletContext;
-	@Autowired private RegDocumentRepository regDocumentRepository;
+	@Autowired private Utils utils;
+	@Autowired CaptchaSettings captchaSettings;
 	
 	@RequestMapping("/downloadFile")
 	public ResponseEntity<InputStreamResource> downloadFile(@RequestParam String fileName,
-															@RequestParam long id,
-															@RequestParam(value = "secretKey", required = false) String secretKey) throws IOException {
+											@RequestParam long id,
+											@RequestParam(value = "secretKey", required = false) String secretKey) throws IOException {
 		
-		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);
+		if ( captchaSettings.isEnabled() == true ) {
+			String error = "Download diretto non ammesso. Usare la pagina di download tramite reCaptcha";
+			logger.error(error);
+			throw new RuntimeException("Download diretto non ammesso. Usare la pagina di download tramite reCaptcha");
 		}
 		
-		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);
+		return utils.getDownloadResponseEntity(fileName, id, secretKey);
 	}
+
+	
 }

--
Gitblit v1.6.2