From 5df2e1a7054362464a47e83db2a1c672007d6574 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 30 May 2024 12:02:13 +0200 Subject: [PATCH] Added repository methods for fetching all entries of table - Added disabled attribute to FileUpload - Added disabled check to FileSecurityService --- .../db/repo/ExpiredFileUploadRepository.java | 14 ++++++++++++++ .../db/repo/FileUploadRepository.java | 9 ++++++++- .../de/w665/sharepulse/model/FileUpload.java | 1 + .../sharepulse/rest/mappings/UploadHistory.java | 17 +++++++++++++++++ .../sharepulse/service/FileCleanupService.java | 2 +- .../sharepulse/service/FileSecurityService.java | 3 +++ .../de/w665/sharepulse/service/FileService.java | 1 + 7 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/w665/sharepulse/db/repo/ExpiredFileUploadRepository.java b/src/main/java/de/w665/sharepulse/db/repo/ExpiredFileUploadRepository.java index dae75ce..d211bf3 100644 --- a/src/main/java/de/w665/sharepulse/db/repo/ExpiredFileUploadRepository.java +++ b/src/main/java/de/w665/sharepulse/db/repo/ExpiredFileUploadRepository.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.lang.reflect.Type; +import java.util.List; import java.util.Map; @Repository @@ -38,4 +39,17 @@ public class ExpiredFileUploadRepository { r.db("sharepulse").table("expired_file_uploads").insert(map).run(connection); } + + public void deleteExpiredFileUpload(FileUpload fileUpload) { + r.db("sharepulse").table("expired_file_uploads") + .filter(r.hashMap("fileId", fileUpload.getFileId())) + .delete() + .run(connection); + } + + public List findAll() { + return r.db("sharepulse").table("expired_file_uploads") + .run(connection, FileUpload.class) + .toList(); + } } diff --git a/src/main/java/de/w665/sharepulse/db/repo/FileUploadRepository.java b/src/main/java/de/w665/sharepulse/db/repo/FileUploadRepository.java index 14403f6..27db86b 100644 --- a/src/main/java/de/w665/sharepulse/db/repo/FileUploadRepository.java +++ b/src/main/java/de/w665/sharepulse/db/repo/FileUploadRepository.java @@ -79,7 +79,8 @@ public class FileUploadRepository { .run(connection); } - public List getAllExpiredFileUploads() { + // This query filters all file uploads that are older than 24 hours from the file_uplaods table (not the expired_file_uploads table) + public List findAllExpiredActiveFileUploads() { long timestamp = getOneMinuteAgoTimestamp(); @@ -89,6 +90,12 @@ public class FileUploadRepository { .toList(); } + public List findAll() { + return r.db("sharepulse").table("file_uploads") + .run(connection, FileUpload.class) + .toList(); + } + private long get24HoursAgoTimestamp() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.HOUR, -24); diff --git a/src/main/java/de/w665/sharepulse/model/FileUpload.java b/src/main/java/de/w665/sharepulse/model/FileUpload.java index 6afde28..91d88df 100644 --- a/src/main/java/de/w665/sharepulse/model/FileUpload.java +++ b/src/main/java/de/w665/sharepulse/model/FileUpload.java @@ -18,6 +18,7 @@ public class FileUpload { private String fileName; private long fileSize; private boolean singleDownload; + private boolean disabled; @JsonFormat(timezone = "ETC") private Date uploadDate; private String uploadedByIpAddress; diff --git a/src/main/java/de/w665/sharepulse/rest/mappings/UploadHistory.java b/src/main/java/de/w665/sharepulse/rest/mappings/UploadHistory.java index 1cbeecf..1e540ba 100644 --- a/src/main/java/de/w665/sharepulse/rest/mappings/UploadHistory.java +++ b/src/main/java/de/w665/sharepulse/rest/mappings/UploadHistory.java @@ -1,5 +1,7 @@ package de.w665.sharepulse.rest.mappings; +import de.w665.sharepulse.db.repo.FileUploadRepository; +import de.w665.sharepulse.model.FileUpload; import de.w665.sharepulse.rest.SecureApiRestController; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -8,13 +10,28 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @Slf4j @RestController public class UploadHistory extends SecureApiRestController { + private final FileUploadRepository fileUploadRepository; + + public UploadHistory(FileUploadRepository fileUploadRepository) { + this.fileUploadRepository = fileUploadRepository; + } + @GetMapping("/test") public ResponseEntity test(HttpServletRequest request) { log.debug("Received test request"); return ResponseEntity.ok("Test successful"); } + + @GetMapping("/upload-history") + public ResponseEntity getUploadHistory(HttpServletRequest request, HttpServletResponse response) { + List fileUploadList = fileUploadRepository.findAll(); + log.debug("Received upload history request"); + return ResponseEntity.ok(fileUploadList); + } } diff --git a/src/main/java/de/w665/sharepulse/service/FileCleanupService.java b/src/main/java/de/w665/sharepulse/service/FileCleanupService.java index e3a3b6d..4c72f88 100644 --- a/src/main/java/de/w665/sharepulse/service/FileCleanupService.java +++ b/src/main/java/de/w665/sharepulse/service/FileCleanupService.java @@ -26,7 +26,7 @@ public class FileCleanupService { @Scheduled(cron = "0 0 * * * *") public void cleanup() { log.debug("Running cleanup..."); - List expFileUploads = fileUploadRepository.getAllExpiredFileUploads(); + List expFileUploads = fileUploadRepository.findAllExpiredActiveFileUploads(); for (FileUpload fileUpload : expFileUploads) { fileService.deleteFile(fileUpload); expiredFileUploadRepository.insertExpiredFileUpload(fileUpload); diff --git a/src/main/java/de/w665/sharepulse/service/FileSecurityService.java b/src/main/java/de/w665/sharepulse/service/FileSecurityService.java index cdb6157..b737260 100644 --- a/src/main/java/de/w665/sharepulse/service/FileSecurityService.java +++ b/src/main/java/de/w665/sharepulse/service/FileSecurityService.java @@ -21,6 +21,9 @@ public class FileSecurityService { public boolean verifyDownloadPermission(FileUpload file, String password) throws NoDownloadPermissionException { + if(file.isDisabled()) { + throw new NoDownloadPermissionException("File download has been disabled."); + } if (!file.isPasswordProtected() && !file.isSingleDownload()) { return true; diff --git a/src/main/java/de/w665/sharepulse/service/FileService.java b/src/main/java/de/w665/sharepulse/service/FileService.java index 885e66d..ef0b569 100644 --- a/src/main/java/de/w665/sharepulse/service/FileService.java +++ b/src/main/java/de/w665/sharepulse/service/FileService.java @@ -85,6 +85,7 @@ public class FileService { .fileName(file.getOriginalFilename()) .fileSize(file.getSize()) .singleDownload(singleDownload) + .disabled(false) .uploadDate(new Date()) .uploadedByIpAddress(uploaderIp) .downloadCount(0)