Loading pom.xml +6 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,12 @@ <artifactId>vospace-datamodel</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.kamranzafar</groupId> <artifactId>jtar</artifactId> <version>2.3</version> </dependency> </dependencies> <profiles> Loading src/main/java/it/inaf/ia2/transfer/controller/ArchiveFileController.java 0 → 100644 +47 −0 Original line number Diff line number Diff line /* * This file is part of vospace-file-service * Copyright (C) 2021 Istituto Nazionale di Astrofisica * SPDX-License-Identifier: GPL-3.0-or-later */ package it.inaf.ia2.transfer.controller; import it.inaf.ia2.transfer.auth.TokenPrincipal; import it.inaf.ia2.transfer.service.ArchiveJob; import it.inaf.ia2.transfer.service.ArchiveService; import java.util.List; import java.util.concurrent.CompletableFuture; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class ArchiveFileController { @Autowired private ArchiveService archiveService; @Autowired private HttpServletRequest request; @PostMapping(value = "/tar", consumes = MediaType.APPLICATION_JSON_VALUE) public void createTarArchive(@RequestParam(value = "jobId", required = true) String jobId, @RequestBody List<String> vosPaths) { ArchiveJob job = new ArchiveJob(); job.setPrincipal((TokenPrincipal) request.getUserPrincipal()); job.setJobId(jobId); job.setType(ArchiveJob.Type.TAR); job.setVosPaths(vosPaths); startArchiveJob(job); } private void startArchiveJob(ArchiveJob job) { CompletableFuture.runAsync(() -> { archiveService.createArchive(job); }); } } src/main/java/it/inaf/ia2/transfer/controller/ArchiveRequest.java 0 → 100644 +16 −0 Original line number Diff line number Diff line /* * This file is part of vospace-file-service * Copyright (C) 2021 Istituto Nazionale di Astrofisica * SPDX-License-Identifier: GPL-3.0-or-later */ package it.inaf.ia2.transfer.controller; import java.util.List; public class ArchiveRequest { private List<String> vosPaths; String jobId; String type; } src/main/java/it/inaf/ia2/transfer/controller/GetFileController.java +7 −31 Original line number Diff line number Diff line Loading @@ -5,9 +5,10 @@ */ package it.inaf.ia2.transfer.controller; import it.inaf.ia2.transfer.auth.GmsClient; import it.inaf.ia2.transfer.persistence.model.FileInfo; import it.inaf.ia2.transfer.auth.TokenPrincipal; import it.inaf.ia2.transfer.persistence.FileDAO; import it.inaf.ia2.transfer.service.AuthorizationService; import java.io.File; import java.io.FileInputStream; import java.io.IOException; Loading Loading @@ -37,7 +38,7 @@ public class GetFileController extends FileController { private FileDAO fileDAO; @Autowired private GmsClient gmsClient; private AuthorizationService authorizationService; @Autowired private HttpServletResponse response; Loading @@ -55,7 +56,7 @@ public class GetFileController extends FileController { FileInfo fileInfo = optFileInfo.get(); if (!fileInfo.isIsPublic() && !privateButDownloadable(fileInfo)) { if (!authorizationService.isDownloadable(fileInfo, (TokenPrincipal) request.getUserPrincipal())) { return new ResponseEntity<>("Unauthorized", UNAUTHORIZED); } Loading @@ -65,31 +66,6 @@ public class GetFileController extends FileController { } } private boolean privateButDownloadable(FileInfo fileInfo) { TokenPrincipal principal = (TokenPrincipal) request.getUserPrincipal(); String token = principal.getToken(); if (token == null) { return false; } if (principal.getName().equals(fileInfo.getOwnerId())) { return true; } // TODO: configure cache if (fileInfo.getGroupRead() == null) { return false; } for (String group : fileInfo.getGroupRead()) { if (gmsClient.isMemberOf(token, group)) { return true; } } return false; } private ResponseEntity<?> getFileResponse(FileInfo fileInfo) { File file = new File(fileInfo.getOsPath()); Loading src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java +1 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ */ package it.inaf.ia2.transfer.controller; import it.inaf.ia2.transfer.persistence.model.FileInfo; import it.inaf.ia2.transfer.persistence.FileDAO; import it.inaf.ia2.transfer.persistence.JobDAO; import java.io.File; Loading Loading
pom.xml +6 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,12 @@ <artifactId>vospace-datamodel</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.kamranzafar</groupId> <artifactId>jtar</artifactId> <version>2.3</version> </dependency> </dependencies> <profiles> Loading
src/main/java/it/inaf/ia2/transfer/controller/ArchiveFileController.java 0 → 100644 +47 −0 Original line number Diff line number Diff line /* * This file is part of vospace-file-service * Copyright (C) 2021 Istituto Nazionale di Astrofisica * SPDX-License-Identifier: GPL-3.0-or-later */ package it.inaf.ia2.transfer.controller; import it.inaf.ia2.transfer.auth.TokenPrincipal; import it.inaf.ia2.transfer.service.ArchiveJob; import it.inaf.ia2.transfer.service.ArchiveService; import java.util.List; import java.util.concurrent.CompletableFuture; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class ArchiveFileController { @Autowired private ArchiveService archiveService; @Autowired private HttpServletRequest request; @PostMapping(value = "/tar", consumes = MediaType.APPLICATION_JSON_VALUE) public void createTarArchive(@RequestParam(value = "jobId", required = true) String jobId, @RequestBody List<String> vosPaths) { ArchiveJob job = new ArchiveJob(); job.setPrincipal((TokenPrincipal) request.getUserPrincipal()); job.setJobId(jobId); job.setType(ArchiveJob.Type.TAR); job.setVosPaths(vosPaths); startArchiveJob(job); } private void startArchiveJob(ArchiveJob job) { CompletableFuture.runAsync(() -> { archiveService.createArchive(job); }); } }
src/main/java/it/inaf/ia2/transfer/controller/ArchiveRequest.java 0 → 100644 +16 −0 Original line number Diff line number Diff line /* * This file is part of vospace-file-service * Copyright (C) 2021 Istituto Nazionale di Astrofisica * SPDX-License-Identifier: GPL-3.0-or-later */ package it.inaf.ia2.transfer.controller; import java.util.List; public class ArchiveRequest { private List<String> vosPaths; String jobId; String type; }
src/main/java/it/inaf/ia2/transfer/controller/GetFileController.java +7 −31 Original line number Diff line number Diff line Loading @@ -5,9 +5,10 @@ */ package it.inaf.ia2.transfer.controller; import it.inaf.ia2.transfer.auth.GmsClient; import it.inaf.ia2.transfer.persistence.model.FileInfo; import it.inaf.ia2.transfer.auth.TokenPrincipal; import it.inaf.ia2.transfer.persistence.FileDAO; import it.inaf.ia2.transfer.service.AuthorizationService; import java.io.File; import java.io.FileInputStream; import java.io.IOException; Loading Loading @@ -37,7 +38,7 @@ public class GetFileController extends FileController { private FileDAO fileDAO; @Autowired private GmsClient gmsClient; private AuthorizationService authorizationService; @Autowired private HttpServletResponse response; Loading @@ -55,7 +56,7 @@ public class GetFileController extends FileController { FileInfo fileInfo = optFileInfo.get(); if (!fileInfo.isIsPublic() && !privateButDownloadable(fileInfo)) { if (!authorizationService.isDownloadable(fileInfo, (TokenPrincipal) request.getUserPrincipal())) { return new ResponseEntity<>("Unauthorized", UNAUTHORIZED); } Loading @@ -65,31 +66,6 @@ public class GetFileController extends FileController { } } private boolean privateButDownloadable(FileInfo fileInfo) { TokenPrincipal principal = (TokenPrincipal) request.getUserPrincipal(); String token = principal.getToken(); if (token == null) { return false; } if (principal.getName().equals(fileInfo.getOwnerId())) { return true; } // TODO: configure cache if (fileInfo.getGroupRead() == null) { return false; } for (String group : fileInfo.getGroupRead()) { if (gmsClient.isMemberOf(token, group)) { return true; } } return false; } private ResponseEntity<?> getFileResponse(FileInfo fileInfo) { File file = new File(fileInfo.getOsPath()); Loading
src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java +1 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ */ package it.inaf.ia2.transfer.controller; import it.inaf.ia2.transfer.persistence.model.FileInfo; import it.inaf.ia2.transfer.persistence.FileDAO; import it.inaf.ia2.transfer.persistence.JobDAO; import java.io.File; Loading