diff --git a/frontend/src/app/adminui/adminui.component.html b/frontend/src/app/adminui/adminui.component.html index 261f5ad..f30d49b 100644 --- a/frontend/src/app/adminui/adminui.component.html +++ b/frontend/src/app/adminui/adminui.component.html @@ -52,7 +52,7 @@ Change Administrator Login - Delete All Uploaded Files + Delete All Uploaded Files @@ -131,7 +131,7 @@ {{ file.id }} {{ file.fileId }} {{ file.fileName }} - {{ file.fileSize | number }} + {{ file.fileSize | formatFileSizePipe }} {{ file.singleDownload ? 'true' : 'false' }} {{ file.disabled ? 'true' : 'false' }} {{ file.uploadDate | date: 'medium' }} diff --git a/frontend/src/app/adminui/adminui.component.ts b/frontend/src/app/adminui/adminui.component.ts index ad8e12c..0e3433d 100644 --- a/frontend/src/app/adminui/adminui.component.ts +++ b/frontend/src/app/adminui/adminui.component.ts @@ -111,4 +111,21 @@ export class AdminuiComponent { console.error(error); } } + async deleteAllFileUploads() { + try { + const response = await axios({ + method: 'delete', + url: this.developmentStore.getBaseUrl() + 'api/v1/secure/files', + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + await firstValueFrom(this.authStore.token$) + } + }); + console.log(this.statistics) + } catch (error) { + console.error(error); + } + } + + protected readonly confirm = confirm; } diff --git a/src/main/java/de/w665/sharepulse/rest/mappings/Administration.java b/src/main/java/de/w665/sharepulse/rest/mappings/Administration.java index 96b637d..208b496 100644 --- a/src/main/java/de/w665/sharepulse/rest/mappings/Administration.java +++ b/src/main/java/de/w665/sharepulse/rest/mappings/Administration.java @@ -2,16 +2,20 @@ package de.w665.sharepulse.rest.mappings; import de.w665.sharepulse.SharepulseApplication; import de.w665.sharepulse.db.repo.UserRepository; +import de.w665.sharepulse.model.FileUpload; import de.w665.sharepulse.model.User; import de.w665.sharepulse.rest.SecureApiRestController; import de.w665.sharepulse.service.AuthenticationService; +import de.w665.sharepulse.service.FileCleanupService; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -21,15 +25,19 @@ public class Administration extends SecureApiRestController { private final UserRepository userRepository; private final AuthenticationService authenticationService; + private final FileCleanupService fileCleanupService; - public Administration(UserRepository userRepository, AuthenticationService authenticationService) { + public Administration(UserRepository userRepository, AuthenticationService authenticationService, FileCleanupService fileCleanupService) { this.userRepository = userRepository; this.authenticationService = authenticationService; + this.fileCleanupService = fileCleanupService; } @GetMapping("/statistics") public ResponseEntity getStatistics(HttpServletRequest request) { + // TODO: FIX LAST LOGIN + String token = request.getHeader("Authorization"); token = token.substring(7); String username = authenticationService.getClaimValue(token, "username", String.class); @@ -47,4 +55,10 @@ public class Administration extends SecureApiRestController { log.debug("Received statistics request"); return ResponseEntity.ok(response); } + + @DeleteMapping("/files") + public ResponseEntity deleteFiles(HttpServletRequest request) { + List files = fileCleanupService.deleteFiles(); + return ResponseEntity.ok(files); + } } diff --git a/src/main/java/de/w665/sharepulse/service/FileCleanupService.java b/src/main/java/de/w665/sharepulse/service/FileCleanupService.java index 4c72f88..091da8c 100644 --- a/src/main/java/de/w665/sharepulse/service/FileCleanupService.java +++ b/src/main/java/de/w665/sharepulse/service/FileCleanupService.java @@ -33,4 +33,15 @@ public class FileCleanupService { log.debug("Moved file " + fileUpload.getFileId() + " to old_file_uploads table."); } } + + public List deleteFiles() { + log.debug("Running cleanup. Clearing all files..."); + List fileUploads = fileUploadRepository.findAll(); + for (FileUpload fileUpload : fileUploads) { + fileService.deleteFile(fileUpload); + expiredFileUploadRepository.insertExpiredFileUpload(fileUpload); + log.debug("Moved file " + fileUpload.getFileId() + " to old_file_uploads table."); + } + return fileUploads; + } }