From f1868148f821086c899eefaaae58ef997ba6fbc2 Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Tue, 6 Jul 2021 17:06:06 +0200
Subject: [PATCH] Started CopyController development

---
 .../controller/ArchiveFileController.java     | 14 +++----
 .../AuthenticatedFileController.java          | 24 ++++++++++++
 .../transfer/controller/CopyController.java   | 31 +++++++++++++++
 .../ia2/transfer/controller/CopyRequest.java  | 38 +++++++++++++++++++
 4 files changed, 98 insertions(+), 9 deletions(-)
 create mode 100644 src/main/java/it/inaf/ia2/transfer/controller/AuthenticatedFileController.java
 create mode 100644 src/main/java/it/inaf/ia2/transfer/controller/CopyController.java
 create mode 100644 src/main/java/it/inaf/ia2/transfer/controller/CopyRequest.java

diff --git a/src/main/java/it/inaf/ia2/transfer/controller/ArchiveFileController.java b/src/main/java/it/inaf/ia2/transfer/controller/ArchiveFileController.java
index 6372082..7f5ed6c 100644
--- a/src/main/java/it/inaf/ia2/transfer/controller/ArchiveFileController.java
+++ b/src/main/java/it/inaf/ia2/transfer/controller/ArchiveFileController.java
@@ -25,7 +25,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
-public class ArchiveFileController extends FileController {
+public class ArchiveFileController extends AuthenticatedFileController {
 
     @Autowired
     private ArchiveService archiveService;
@@ -63,13 +63,9 @@ public class ArchiveFileController extends FileController {
         FileResponseUtil.getFileResponse(response, file);
     }
 
-    private TokenPrincipal getPrincipal() {
-        TokenPrincipal principal = (TokenPrincipal) request.getUserPrincipal();
-
-        if ("anonymous".equals(principal.getName())) {
-            throw new PermissionDeniedException("Tar/Zip archive generation not allowed to anonymous users");
-        }
-        
-        return principal;
+    @Override
+    protected String getCustomAuthErrorMessage() {
+        return "Tar/Zip archive generation not allowed to anonymous users";
     }
+    
 }
diff --git a/src/main/java/it/inaf/ia2/transfer/controller/AuthenticatedFileController.java b/src/main/java/it/inaf/ia2/transfer/controller/AuthenticatedFileController.java
new file mode 100644
index 0000000..cefea30
--- /dev/null
+++ b/src/main/java/it/inaf/ia2/transfer/controller/AuthenticatedFileController.java
@@ -0,0 +1,24 @@
+/*
+ * 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.exception.PermissionDeniedException;
+
+public abstract class AuthenticatedFileController extends FileController {
+
+    protected TokenPrincipal getPrincipal() {
+        TokenPrincipal principal = (TokenPrincipal) request.getUserPrincipal();
+
+        if ("anonymous".equals(principal.getName())) {
+            throw new PermissionDeniedException("Tar/Zip archive generation not allowed to anonymous users");
+        }
+
+        return principal;
+    }
+    
+    protected abstract String getCustomAuthErrorMessage();
+}
diff --git a/src/main/java/it/inaf/ia2/transfer/controller/CopyController.java b/src/main/java/it/inaf/ia2/transfer/controller/CopyController.java
new file mode 100644
index 0000000..72041fb
--- /dev/null
+++ b/src/main/java/it/inaf/ia2/transfer/controller/CopyController.java
@@ -0,0 +1,31 @@
+/*
+ * 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 org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class CopyController extends AuthenticatedFileController {
+   
+
+    @PostMapping(value = "/copy", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<?> copyFiles(@RequestBody CopyRequest copyRequest) {
+
+        return ResponseEntity.ok(
+                copyRequest.getJobId() + " copy task accepted by File Service"
+        );
+    }
+
+    @Override
+    protected String getCustomAuthErrorMessage() {
+        return "File Copy not allowed to anonymous users";
+    }
+
+}
diff --git a/src/main/java/it/inaf/ia2/transfer/controller/CopyRequest.java b/src/main/java/it/inaf/ia2/transfer/controller/CopyRequest.java
new file mode 100644
index 0000000..d725d46
--- /dev/null
+++ b/src/main/java/it/inaf/ia2/transfer/controller/CopyRequest.java
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+public class CopyRequest {
+
+    String jobId;
+    String target;
+    String direction;
+
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
+
+    public String getTarget() {
+        return target;
+    }
+
+    public void setTarget(String target) {
+        this.target = target;
+    }
+
+    public String getDirection() {
+        return direction;
+    }
+
+    public void setDirection(String direction) {
+        this.direction = direction;
+    }
+
+}
-- 
GitLab