diff --git a/frontend/src/app/download/download.component.html b/frontend/src/app/download/download.component.html index 6ba7fc4..2bd21fd 100644 --- a/frontend/src/app/download/download.component.html +++ b/frontend/src/app/download/download.component.html @@ -15,6 +15,18 @@ Download -

Files are available for a limited time. Ensure the code or link is correct.

+

Files are available for a limited time. Ensure the code or link is correct and the file is still downloadable.

+ + + diff --git a/src/main/java/de/w665/sharepulse/db/RethinkDBService.java b/src/main/java/de/w665/sharepulse/db/RethinkDBService.java index 879e9c8..91390d9 100644 --- a/src/main/java/de/w665/sharepulse/db/RethinkDBService.java +++ b/src/main/java/de/w665/sharepulse/db/RethinkDBService.java @@ -3,18 +3,13 @@ package de.w665.sharepulse.db; import com.rethinkdb.RethinkDB; import com.rethinkdb.gen.exc.ReqlOpFailedError; import com.rethinkdb.net.Connection; -import com.rethinkdb.net.Result; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; - @Slf4j @Service public class RethinkDBService { @@ -24,6 +19,9 @@ public class RethinkDBService { private final RethinkDB r; private final Connection connection; + @Value("${sharepulse.auto-reset-on-startup}") + private boolean autoResetOnStartup; + @Autowired public RethinkDBService(RethinkDBConfig config, RethinkDBConnector connector) { this.config = config; @@ -66,9 +64,12 @@ public class RethinkDBService { r.db(config.getDatabase()).tableCreate("file_uploads").run(connection).stream(); log.debug("Table 'file_uploads' created successfully."); } catch (ReqlOpFailedError e) { - log.debug("Table 'file_uploads' already exists. Clearing content..."); - r.db(config.getDatabase()).table("file_uploads").delete().run(connection); - log.debug("Table 'file_uploads' cleared successfully."); + log.debug("Table 'file_uploads' already exists."); + if(autoResetOnStartup) { + log.debug("Clearing content..."); + r.db(config.getDatabase()).table("file_uploads").delete().run(connection); + log.debug("Table 'file_uploads' cleared successfully."); + } } // rethinkdb check if table id_store exists diff --git a/src/main/java/de/w665/sharepulse/rest/mappings/Download.java b/src/main/java/de/w665/sharepulse/rest/mappings/Download.java index 3733f2c..b534780 100644 --- a/src/main/java/de/w665/sharepulse/rest/mappings/Download.java +++ b/src/main/java/de/w665/sharepulse/rest/mappings/Download.java @@ -8,7 +8,6 @@ import de.w665.sharepulse.service.FileService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; -import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -71,4 +70,16 @@ public class Download extends ApiRestController { .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(resource); } + + @GetMapping("/download-info") + public ResponseEntity getDownloadInfo(@RequestParam String fileId) { + FileUpload fileUpload = fileService.getFileUploadByFileId(fileId); + + Map response = new HashMap<>(); + response.put("fileId", fileUpload.getFileId()); + response.put("passwordProtected", fileUpload.isPasswordProtected()); + response.put("singleDownload", fileUpload.isSingleDownload()); + + return new ResponseEntity<>(response, HttpStatus.OK); + } } diff --git a/src/main/java/de/w665/sharepulse/rest/mappings/Upload.java b/src/main/java/de/w665/sharepulse/rest/mappings/Upload.java index 803c3be..666dcac 100644 --- a/src/main/java/de/w665/sharepulse/rest/mappings/Upload.java +++ b/src/main/java/de/w665/sharepulse/rest/mappings/Upload.java @@ -9,7 +9,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; diff --git a/src/main/java/de/w665/sharepulse/service/FileService.java b/src/main/java/de/w665/sharepulse/service/FileService.java index 57207e2..e3e0184 100644 --- a/src/main/java/de/w665/sharepulse/service/FileService.java +++ b/src/main/java/de/w665/sharepulse/service/FileService.java @@ -29,6 +29,9 @@ public class FileService { @Value("${sharepulse.temp-filestore-path}") private String tempDirPath; + @Value("${sharepulse.auto-reset-on-startup}") + private boolean autoResetOnStartup; + @Autowired public FileService(FileIdService fileIdService, FileSecurityService fileSecurityService, FileUploadRepository fileUploadRepository) { this.fileIdService = fileIdService; @@ -45,9 +48,13 @@ public class FileService { Files.createDirectory(path); log.debug("Directory created"); } else { - log.debug("Directory already exists. Clearing content."); - FileUtils.cleanDirectory(new File(getTempDirPath())); - log.debug("Directory content cleared."); + log.debug("Directory already exists."); + if(autoResetOnStartup) { + log.debug("Clearing content..."); + FileUtils.cleanDirectory(new File(getTempDirPath())); + log.debug("Directory content cleared."); + } + } } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 99e3d04..a2b8bc0 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,6 +2,7 @@ sharepulse.temp-filestore-path=/temp-filestore sharepulse.filepassword-length=6 sharepulse.filepassword-charset=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 +sharepulse.auto-reset-on-startup=false # Static path spring.web.resources.static-locations=classpath:/static/browser/