From d125e7a5dcee75c83114f60cd9afd8895fb61fa3 Mon Sep 17 00:00:00 2001
From: Lucas Bertrand-Christen <l.b-c@hotmail.com>
Date: Fri, 17 Nov 2023 16:43:14 +0100
Subject: [PATCH] feat:end-td4

---
 .../miage23/filestore/api/dto/InputNodeDto.java |  3 ++-
 .../miage23/filestore/api/dto/POSTNodeDto.java  |  6 +-----
 .../filestore/api/filter/VersionFilter.java     | 17 +++++++++++++++++
 .../filestore/api/resources/NodesResource.java  |  4 ++--
 .../filestore/api/validation/Filename.java      |  6 +++---
 .../api/validation/ValidationPattern.java       |  2 +-
 .../resources/ValidationMessages.properties     |  8 +-------
 7 files changed, 27 insertions(+), 19 deletions(-)
 create mode 100644 TD4/src/main/java/fr/miage23/filestore/api/filter/VersionFilter.java

diff --git a/TD4/src/main/java/fr/miage23/filestore/api/dto/InputNodeDto.java b/TD4/src/main/java/fr/miage23/filestore/api/dto/InputNodeDto.java
index 8ac1240..c9233dd 100644
--- a/TD4/src/main/java/fr/miage23/filestore/api/dto/InputNodeDto.java
+++ b/TD4/src/main/java/fr/miage23/filestore/api/dto/InputNodeDto.java
@@ -1,5 +1,6 @@
 package fr.miage23.filestore.api.dto;
 
+import fr.miage23.filestore.api.validation.Filename;
 import jakarta.validation.constraints.Pattern;
 import jakarta.validation.constraints.Size;
 import jakarta.ws.rs.FormParam;
@@ -12,7 +13,7 @@ public class InputNodeDto {
 
     @FormParam("name")
     @PartType(MediaType.TEXT_PLAIN)
-    @Pattern(regexp = "^[^*&%/]+$")
+    @Filename
     private String name;
     @FormParam("data")
     @PartType(MediaType.APPLICATION_OCTET_STREAM)
diff --git a/TD4/src/main/java/fr/miage23/filestore/api/dto/POSTNodeDto.java b/TD4/src/main/java/fr/miage23/filestore/api/dto/POSTNodeDto.java
index 3ee3970..758350c 100644
--- a/TD4/src/main/java/fr/miage23/filestore/api/dto/POSTNodeDto.java
+++ b/TD4/src/main/java/fr/miage23/filestore/api/dto/POSTNodeDto.java
@@ -5,12 +5,8 @@ import fr.miage23.filestore.TypeNode;
 public class POSTNodeDto {
 
     private String id = null;
-    private String name = null;
-    private TypeNode type = null;
 
-    public POSTNodeDto(String id, String name, TypeNode type) {
+    public POSTNodeDto(String id) {
         this.id = id;
-        this.name = name;
-        this.type = type;
     }
 }
diff --git a/TD4/src/main/java/fr/miage23/filestore/api/filter/VersionFilter.java b/TD4/src/main/java/fr/miage23/filestore/api/filter/VersionFilter.java
new file mode 100644
index 0000000..92bb753
--- /dev/null
+++ b/TD4/src/main/java/fr/miage23/filestore/api/filter/VersionFilter.java
@@ -0,0 +1,17 @@
+package fr.miage23.filestore.api.filter;
+
+import jakarta.ws.rs.container.ContainerRequestContext;
+import jakarta.ws.rs.container.ContainerResponseContext;
+import jakarta.ws.rs.container.ContainerResponseFilter;
+import jakarta.ws.rs.ext.Provider;
+
+@Provider
+public class VersionFilter implements ContainerResponseFilter {
+
+    private static final String VERSION = "1.0.0-SNAPSHOT";
+
+    @Override
+    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
+        responseContext.getHeaders().add("X-FILESTORE-VERSION", VERSION);
+    }
+}
diff --git a/TD4/src/main/java/fr/miage23/filestore/api/resources/NodesResource.java b/TD4/src/main/java/fr/miage23/filestore/api/resources/NodesResource.java
index 202cb7c..5d4e533 100644
--- a/TD4/src/main/java/fr/miage23/filestore/api/resources/NodesResource.java
+++ b/TD4/src/main/java/fr/miage23/filestore/api/resources/NodesResource.java
@@ -141,7 +141,7 @@ public class NodesResource {
         Node node = service.get(newid);
 
         return Response.ok(gson.toJson(
-                        (new POSTNodeDto(node.getId(), node.getName(), node.getType())),
+                        (new POSTNodeDto(node.getId())),
                         POSTNodeDto.class),
                 MediaType.APPLICATION_JSON).build();
     }
@@ -173,7 +173,7 @@ public class NodesResource {
                 .create();
         Node node = service.get(newid);
         return Response.ok(gson.toJson(
-                        (new POSTNodeDto(node.getId(), node.getName(), node.getType())),
+                        (new POSTNodeDto(node.getId())),
                         POSTNodeDto.class),
                 MediaType.APPLICATION_JSON).build();
     }
diff --git a/TD4/src/main/java/fr/miage23/filestore/api/validation/Filename.java b/TD4/src/main/java/fr/miage23/filestore/api/validation/Filename.java
index c11e79e..1d53b63 100644
--- a/TD4/src/main/java/fr/miage23/filestore/api/validation/Filename.java
+++ b/TD4/src/main/java/fr/miage23/filestore/api/validation/Filename.java
@@ -9,12 +9,12 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-@Target({ElementType.FIELD, ElementType.PARAMETER})
 @Constraint(validatedBy={})
-@Retention(RetentionPolicy.RUNTIME)
 @Pattern(regexp=ValidationPattern.FILE_PATTERN)
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD, ElementType.PARAMETER})
 public @interface Filename {
-    String message() default "{invalid.filename_FR}";
+    String message() default "{invalid.filename}";
     Class<?>[] groups() default {};
     Class<? extends Payload>[] payload() default {};
 }
diff --git a/TD4/src/main/java/fr/miage23/filestore/api/validation/ValidationPattern.java b/TD4/src/main/java/fr/miage23/filestore/api/validation/ValidationPattern.java
index 96cbd79..465b82b 100644
--- a/TD4/src/main/java/fr/miage23/filestore/api/validation/ValidationPattern.java
+++ b/TD4/src/main/java/fr/miage23/filestore/api/validation/ValidationPattern.java
@@ -1,6 +1,6 @@
 package fr.miage23.filestore.api.validation;
 
 public class ValidationPattern {
-    public static final String FILE_PATTERN = "^[^*&%/]+$";
+    public static final String FILE_PATTERN = "^[^*&%/\\~]+$";
 }
 
diff --git a/TD4/src/main/resources/ValidationMessages.properties b/TD4/src/main/resources/ValidationMessages.properties
index 080da2d..a58bc63 100644
--- a/TD4/src/main/resources/ValidationMessages.properties
+++ b/TD4/src/main/resources/ValidationMessages.properties
@@ -1,7 +1 @@
-invalid.filename_FR=Le nom du fichier contient des caract�res interdits
-invalid.filename_EN=The filename contains forbidden characters
-invalid.filename_ES=El nombre del archivo contiene caracteres no permitidos
-invalid.filename_DE=Der Dateiname enth�lt unzul�ssige Zeichen
-invalid.filename_IT=Il nome del file contiene caratteri non consentiti
-invalid.filename_NL=De bestandsnaam bevat verboden tekens
-invalid.filename_PT=O nome do arquivo cont�m caracteres proibidos
+invalid.filename=Le nom du fichier contient des caract�res interdits
-- 
GitLab